]> sigrok.org Git - sigrok-meter.git/blame - sigrok-meter
Minor cosmetics and typo fixes.
[sigrok-meter.git] / sigrok-meter
CommitLineData
5add80f6 1#!/usr/bin/env python
c09ca11b
UH
2##
3## This file is part of the sigrok-meter project.
4##
5## Copyright (C) 2013 Uwe Hermann <uwe@hermann-uwe.de>
73f2129a 6## Copyright (C) 2014 Jens Steinhauser <jens.steinhauser@gmail.com>
c09ca11b
UH
7##
8## This program is free software; you can redistribute it and/or modify
9## it under the terms of the GNU General Public License as published by
10## the Free Software Foundation; either version 2 of the License, or
11## (at your option) any later version.
12##
13## This program is distributed in the hope that it will be useful,
14## but WITHOUT ANY WARRANTY; without even the implied warranty of
15## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16## GNU General Public License for more details.
17##
18## You should have received a copy of the GNU General Public License
19## along with this program; if not, write to the Free Software
20## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21##
22
782f5926 23import argparse
782f5926 24import sys
f94bb73f 25import textwrap
baf990de 26import signal
13e332b7 27
739a1d54 28default_drivers = [('demo:analog_channels=4', 'samplerate=4')]
782f5926 29
1f199679
JS
30def parse_cli():
31 parser = argparse.ArgumentParser(
32 description='Simple sigrok GUI for multimeters and dataloggers.',
33 epilog=textwrap.dedent('''\
8fa01018
UH
34 The DRIVER string is the same as for sigrok-cli(1). Multiple
35 DRIVER and CONFIG items can be supplied. The nth CONFIG is applied
36 to the nth DRIVER. If there are more drivers than configs, the
37 remaining drivers use the default configuration.
1f199679 38
480cdb7b 39 Examples:
1f199679
JS
40
41 %(prog)s --driver tecpel-dmm-8061-ser:conn=/dev/ttyUSB0
42
43 %(prog)s --driver uni-t-ut61e:conn=1a86.e008
739a1d54
JS
44
45 %(prog)s --driver demo:analog_channels=1 \\
46 --config samplerate=10
8fa01018
UH
47
48 %(prog)s --driver voltcraft-k204:conn=/dev/ttyUSB0 \\
49 --driver uni-t-ut61d:conn=1a86.e008 \\
50 --driver uni-t-ut61e-ser:conn=/dev/ttyUSB1
1f199679
JS
51 '''),
52 formatter_class=argparse.RawDescriptionHelpFormatter)
53
54 parser.add_argument('-d', '--driver',
55 action='append',
739a1d54 56 default=[],
1f199679 57 help='The driver to use')
739a1d54
JS
58 parser.add_argument('-c', '--config',
59 action='append',
60 default=[],
61 help='Specify device configuration options')
1f199679
JS
62 parser.add_argument('-l', '--loglevel',
63 type=int,
a6fe45e1 64 default=None,
1f199679
JS
65 help='Set loglevel (5 is most verbose)')
66 parser.add_argument('--pyside',
67 action='store_true',
68 default=False,
69 help='Force use of PySide (default is to use PyQt4)')
70 args = parser.parse_args()
71
739a1d54 72 if len(args.config) > len(args.driver):
480cdb7b 73 sys.exit('Error: More configurations than drivers given.')
739a1d54 74
480cdb7b 75 # Merge drivers and configurations into a list of tuples.
739a1d54 76 setattr(args, 'drivers', [])
4ce8c1c0 77 if not args.driver:
739a1d54 78 args.drivers = default_drivers
480cdb7b 79 sys.stderr.write('No driver given, using demo driver.\n')
739a1d54
JS
80 if args.driver:
81 args.config.extend([''] * (len(args.driver) - len(args.config)))
82 args.drivers = zip(args.driver, args.config)
83 del args.driver
84 del args.config
1f199679 85
4ce8c1c0 86 return args
1f199679
JS
87
88if __name__ == '__main__':
baf990de
JS
89 signal.signal(signal.SIGINT, signal.SIG_DFL)
90
1f199679
JS
91 args = parse_cli()
92
48723bbb 93 import qtcompat
4ce8c1c0 94 qtcompat.load_modules(args.pyside)
48723bbb
JS
95 QtCore = qtcompat.QtCore
96 QtGui = qtcompat.QtGui
58d308d1 97
73f2129a 98 app = QtGui.QApplication([])
68348e5a 99
4946c320
JS
100 try:
101 import sigrok.core as sr
102 except Exception as e:
103 QtGui.QMessageBox.critical(None, 'Error starting sigrok-meter',
911ab26e 104 'Unable to use the sigrok Python bindings:\n{}.'.format(e))
4946c320
JS
105 sys.exit(1)
106
2abf5a93
JS
107 # Initialize modules that need a QApplication to exist.
108 import settings
109 settings.init()
68348e5a
JS
110 import icons
111 icons.load_icons()
112
a6fe45e1
JS
113 context = sr.Context_create()
114
115 if args.loglevel != None:
116 try:
117 loglevel = sr.LogLevel.get(args.loglevel)
118 settings.logging.level.setValue(loglevel)
119 except:
120 sys.exit('Error: invalid log level.')
121
4946c320 122 import mainwindow
739a1d54 123 s = mainwindow.MainWindow(context, args.drivers)
73f2129a
JS
124 s.show()
125
e65cc368 126 sys.exit(app.exec_())