]> sigrok.org Git - sigrok-meter.git/blame - sigrok-meter
Initial working display of multimeter values.
[sigrok-meter.git] / sigrok-meter
CommitLineData
c09ca11b
UH
1#!/usr/bin/python3
2##
3## This file is part of the sigrok-meter project.
4##
5## Copyright (C) 2013 Uwe Hermann <uwe@hermann-uwe.de>
6##
7## This program is free software; you can redistribute it and/or modify
8## it under the terms of the GNU General Public License as published by
9## the Free Software Foundation; either version 2 of the License, or
10## (at your option) any later version.
11##
12## This program is distributed in the hope that it will be useful,
13## but WITHOUT ANY WARRANTY; without even the implied warranty of
14## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15## GNU General Public License for more details.
16##
17## You should have received a copy of the GNU General Public License
18## along with this program; if not, write to the Free Software
19## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20##
21
13e332b7
UH
22from multiprocessing import Process, Queue
23from gi.repository import Gtk, GObject
24from sigrok.core import Context, Driver, Device, Session, Packet
25from sigrok.core import lowlevel as ll
26
27def init_and_run(queue):
28 def datafeed_in(device, packet):
29 if packet.type == Packet.ANALOG:
30 data = packet.payload.data
31 unit, unit_str = packet.payload.unit, ""
32 if unit == ll.SR_UNIT_VOLT:
33 unit_str = " V"
34 elif unit == ll.SR_UNIT_OHM:
35 unit_str = " Ohm"
36 elif unit == ll.SR_UNIT_AMPERE:
37 unit_str = " A"
38 mqflags, mqflags_str = packet.payload.unit, ""
39 if mqflags & ll.SR_MQFLAG_AC:
40 mqflags_str = " AC"
41 elif mqflags & ll.SR_MQFLAG_DC:
42 mqflags_str = " DC"
43 for i in range(packet.payload.num_samples):
44 queue.put("%f%s%s" % (data[i], unit_str, mqflags_str))
45
46 # ll.sr_log_loglevel_set(5)
47 context = Context()
48 driver = context.drivers['voltcraft-vc820']
49 device = driver.scan()[0]
50 device.limit_samples = 1000
51 session = Session(context)
52 session.add_device(device)
53 session.add_callback(datafeed_in)
54 session.start()
55 session.run()
56 session.stop()
c09ca11b 57
730cbd1f
UH
58class SigrokMeter:
59 def __init__(self):
60 self.builder = Gtk.Builder()
61 self.builder.add_from_file("sigrok-meter.glade")
62 self.builder.connect_signals(self)
13e332b7 63 self.value_label = self.builder.get_object("value_label")
fd029d02 64 self.win = self.builder.get_object("mainwindow")
730cbd1f 65 self.win.show_all()
13e332b7
UH
66 self.queue = Queue()
67 GObject.timeout_add(100, self.update_label_if_needed)
68
69 def update_label_if_needed(self):
70 try:
71 t = self.queue.get_nowait()
72 self.value_label.set_text(t)
73 except:
74 pass
75 GObject.timeout_add(100, self.update_label_if_needed)
730cbd1f 76
fd029d02 77 def on_quit(self, *args):
2f5ef701 78 Gtk.main_quit(*args)
730cbd1f 79
fd029d02 80 def on_about(self, action):
730cbd1f 81 about = self.builder.get_object("aboutdialog")
13e332b7
UH
82 sr_pkg = ll.sr_package_version_string_get()
83 sr_lib = ll.sr_lib_version_string_get()
a683a5e2
UH
84 s = "Using libsigrok %s (lib version %s)." % (sr_pkg, sr_lib)
85 about.set_comments(s)
dd73092b
UH
86 about.run()
87 about.hide()
2f5ef701 88
730cbd1f 89if __name__ == '__main__':
13e332b7
UH
90 s = SigrokMeter()
91 process = Process(target=init_and_run, args=(s.queue,))
92 process.start()
a683a5e2 93 Gtk.main()
13e332b7 94 process.terminate()
c09ca11b 95