+def init_and_run(queue):
+ def datafeed_in(device, packet):
+ if packet.type is PacketType.ANALOG:
+ data = packet.payload.data
+ unit, unit_str = packet.payload.unit, ""
+ if unit is Unit.VOLT:
+ unit_str = " V"
+ elif unit is Unit.OHM:
+ unit_str = " Ohm"
+ elif unit is Unit.AMPERE:
+ unit_str = " A"
+ mqflags, mqflags_str = packet.payload.mqflags, ""
+ if QuantityFlag.AC in mqflags:
+ mqflags_str = " AC"
+ elif QuantityFlag.DC in mqflags:
+ mqflags_str = " DC"
+ for i in range(packet.payload.num_samples):
+ dev = "%s" % device.vendor
+ val = "%f%s%s" % (data[i], unit_str, mqflags_str)
+ queue.put((dev, val))
+
+ # log = Log()
+ # log.level = LogLevel.SPEW
+ context = Context()
+ drivers_to_use = ['voltcraft-vc820', 'victor-dmm']
+ drivers = [context.drivers[d] for d in drivers_to_use]
+ devices = [d.scan()[0] for d in drivers]
+ for dev in devices:
+ dev.limit_samples = 1000
+ session = Session(context)
+ for dev in devices:
+ session.add_device(dev)
+ session.add_callback(datafeed_in)
+ session.start()
+ session.run()
+ session.stop()
+
+class SigrokMeter:
+ def __init__(self):
+ self.builder = Gtk.Builder()
+ self.builder.add_from_file("sigrok-meter.glade")
+ self.builder.connect_signals(self)
+ self.value_label = self.builder.get_object("value_label")
+ self.value_label2 = self.builder.get_object("value_label2")
+ self.win = self.builder.get_object("mainwindow")
+ self.win.show_all()
+ self.queue = Queue()
+ GObject.timeout_add(100, self.update_label_if_needed)
+
+ def update_label_if_needed(self):
+ try:
+ t = self.queue.get_nowait()
+ l = self.value_label if t[0] != "Victor" else self.value_label2
+ l.set_text("%s: %s" % (t[0], t[1]))
+ except:
+ pass
+ GObject.timeout_add(100, self.update_label_if_needed)
+
+ def on_quit(self, *args):