X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=sigrok-meter;h=4722feba8d2245cbb265b3089b5b89e0057ee7b8;hb=4452730c1cdac699ac7edfe98821a68ab0d1a701;hp=b2d459c0b5bec53adb7cb1f2d05a6b3b2dd6d2c7;hpb=57daed83591be2025b49af7e589e86b661fd132d;p=sigrok-meter.git diff --git a/sigrok-meter b/sigrok-meter index b2d459c..4722feb 100755 --- a/sigrok-meter +++ b/sigrok-meter @@ -1,8 +1,9 @@ -#!/usr/bin/python3 +#!/usr/bin/env python ## ## This file is part of the sigrok-meter project. ## ## Copyright (C) 2013 Uwe Hermann +## Copyright (C) 2014 Jens Steinhauser ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -19,13 +20,93 @@ ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ## -from gi.repository import Gtk +import argparse +import sigrok.core as sr +import sys +import textwrap +import signal -builder = Gtk.Builder() -builder.add_from_file("sigrok-meter.glade") +default_drivers = [('demo:analog_channels=4', 'samplerate=4')] +default_loglevel = 2 -win = builder.get_object("main-window") -win.connect("delete-event", Gtk.main_quit) -win.show_all() -Gtk.main() +def parse_cli(): + parser = argparse.ArgumentParser( + description='Simple sigrok GUI for multimeters and dataloggers.', + epilog=textwrap.dedent('''\ + The DRIVER string is the same as for sigrok-cli(1). Multiple + DRIVER and CONFIG items can be supplied. The nth CONFIG is applied + to the nth DRIVER. If there are more drivers than configs, the + remaining drivers use the default configuration. + Examples: + + %(prog)s --driver tecpel-dmm-8061-ser:conn=/dev/ttyUSB0 + + %(prog)s --driver uni-t-ut61e:conn=1a86.e008 + + %(prog)s --driver demo:analog_channels=1 \\ + --config samplerate=10 + + %(prog)s --driver voltcraft-k204:conn=/dev/ttyUSB0 \\ + --driver uni-t-ut61d:conn=1a86.e008 \\ + --driver uni-t-ut61e-ser:conn=/dev/ttyUSB1 + '''), + formatter_class=argparse.RawDescriptionHelpFormatter) + + parser.add_argument('-d', '--driver', + action='append', + default=[], + help='The driver to use') + parser.add_argument('-c', '--config', + action='append', + default=[], + help='Specify device configuration options') + parser.add_argument('-l', '--loglevel', + type=int, + default=default_loglevel, + help='Set loglevel (5 is most verbose)') + parser.add_argument('--pyside', + action='store_true', + default=False, + help='Force use of PySide (default is to use PyQt4)') + args = parser.parse_args() + + if len(args.config) > len(args.driver): + sys.exit('Error: More configurations than drivers given.') + + # Merge drivers and configurations into a list of tuples. + setattr(args, 'drivers', []) + if not args.driver: + args.drivers = default_drivers + sys.stderr.write('No driver given, using demo driver.\n') + if args.driver: + args.config.extend([''] * (len(args.driver) - len(args.config))) + args.drivers = zip(args.driver, args.config) + del args.driver + del args.config + + return args + +if __name__ == '__main__': + signal.signal(signal.SIGINT, signal.SIG_DFL) + + args = parse_cli() + + import qtcompat + qtcompat.load_modules(args.pyside) + QtCore = qtcompat.QtCore + QtGui = qtcompat.QtGui + import mainwindow + + context = sr.Context_create() + try: + loglevel = sr.LogLevel.get(args.loglevel) + context.log_level = loglevel + except: + sys.exit('Error: invalid log level.') + + app = QtGui.QApplication([]) + s = mainwindow.MainWindow(context, args.drivers) + s.show() + + sys.exit(app.exec_())