]> sigrok.org Git - sigrok-meter.git/blame - sigrok-meter
Add a command line options to adjust the log level.
[sigrok-meter.git] / sigrok-meter
CommitLineData
5add80f6
JS
1#!/usr/bin/env python
2
c09ca11b
UH
3##
4## This file is part of the sigrok-meter project.
5##
6## Copyright (C) 2013 Uwe Hermann <uwe@hermann-uwe.de>
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
13e332b7
UH
24from multiprocessing import Process, Queue
25from gi.repository import Gtk, GObject
efdef4fa 26import sigrok.core as sr
782f5926 27import sys
13e332b7 28
782f5926
JS
29default_loglevel = sr.LogLevel.WARN
30
31def init_and_run(queue, loglevel):
13e332b7 32 def datafeed_in(device, packet):
efdef4fa 33 if packet.type == sr.PacketType.ANALOG:
13e332b7
UH
34 data = packet.payload.data
35 unit, unit_str = packet.payload.unit, ""
efdef4fa 36 if unit == sr.Unit.VOLT:
13e332b7 37 unit_str = " V"
efdef4fa 38 elif unit == sr.Unit.OHM:
13e332b7 39 unit_str = " Ohm"
efdef4fa 40 elif unit == sr.Unit.AMPERE:
13e332b7 41 unit_str = " A"
92ba651c 42 mqflags, mqflags_str = packet.payload.mq_flags, ""
efdef4fa 43 if sr.QuantityFlag.AC in mqflags:
13e332b7 44 mqflags_str = " AC"
efdef4fa 45 elif sr.QuantityFlag.DC in mqflags:
13e332b7
UH
46 mqflags_str = " DC"
47 for i in range(packet.payload.num_samples):
53fed2c3 48 dev = "%s %s" % (device.vendor, device.model)
92ba651c 49 val = "%f%s%s" % (data[0][i], unit_str, mqflags_str)
49e0ee28 50 queue.put((dev, val))
13e332b7 51
efdef4fa 52 context = sr.Context_create()
782f5926 53 context.log_level = loglevel
53fed2c3 54 drivers_to_use = ['tecpel-dmm-8061-ser']
49e0ee28 55 drivers = [context.drivers[d] for d in drivers_to_use]
53fed2c3
UH
56 devices = [d.scan(conn="/dev/ttyUSB0")[0] for d in drivers]
57 # devices = [d.scan()[0] for d in drivers]
58 # for dev in devices:
59 # dev.limit_samples = 1000
92ba651c 60 session = context.create_session()
49e0ee28
UH
61 for dev in devices:
62 session.add_device(dev)
92ba651c
JS
63 dev.open()
64 session.add_datafeed_callback(datafeed_in)
13e332b7
UH
65 session.start()
66 session.run()
67 session.stop()
c09ca11b 68
730cbd1f
UH
69class SigrokMeter:
70 def __init__(self):
71 self.builder = Gtk.Builder()
72 self.builder.add_from_file("sigrok-meter.glade")
73 self.builder.connect_signals(self)
13e332b7 74 self.value_label = self.builder.get_object("value_label")
49e0ee28 75 self.value_label2 = self.builder.get_object("value_label2")
fd029d02 76 self.win = self.builder.get_object("mainwindow")
730cbd1f 77 self.win.show_all()
13e332b7
UH
78 self.queue = Queue()
79 GObject.timeout_add(100, self.update_label_if_needed)
80
81 def update_label_if_needed(self):
82 try:
83 t = self.queue.get_nowait()
49e0ee28
UH
84 l = self.value_label if t[0] != "Victor" else self.value_label2
85 l.set_text("%s: %s" % (t[0], t[1]))
13e332b7
UH
86 except:
87 pass
88 GObject.timeout_add(100, self.update_label_if_needed)
730cbd1f 89
fd029d02 90 def on_quit(self, *args):
2f5ef701 91 Gtk.main_quit(*args)
730cbd1f 92
fd029d02 93 def on_about(self, action):
730cbd1f 94 about = self.builder.get_object("aboutdialog")
efdef4fa 95 context = sr.Context_create()
92ba651c
JS
96 sr_pkg = context.package_version
97 sr_lib = context.lib_version
a683a5e2
UH
98 s = "Using libsigrok %s (lib version %s)." % (sr_pkg, sr_lib)
99 about.set_comments(s)
dd73092b
UH
100 about.run()
101 about.hide()
2f5ef701 102
730cbd1f 103if __name__ == '__main__':
782f5926
JS
104 parser = argparse.ArgumentParser(
105 description='Simple sigrok GUI for multimeters and dataloggers.')
106 parser.add_argument('-l', '--loglevel',
107 type=int,
108 help='Set loglevel (5 is most verbose)')
109 args = parser.parse_args()
110
111 loglevel = default_loglevel
112 if args.loglevel != None:
113 try:
114 loglevel = sr.LogLevel.get(args.loglevel)
115 except:
116 sys.exit('error: invalid log level')
117
9e7bd3d2 118 s = SigrokMeter()
782f5926 119 process = Process(target=init_and_run, args=(s.queue, loglevel))
9e7bd3d2
UH
120 process.start()
121 Gtk.main()
122 process.terminate()
c09ca11b 123