X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=sigrok-meter;h=caa6fdd1dea3821cee17808765aaa3cad51edc3f;hb=49e0ee28b7cfcdeae48e8818173d2ac18c0c84e0;hp=b2d459c0b5bec53adb7cb1f2d05a6b3b2dd6d2c7;hpb=57daed83591be2025b49af7e589e86b661fd132d;p=sigrok-meter.git diff --git a/sigrok-meter b/sigrok-meter index b2d459c..caa6fdd 100755 --- a/sigrok-meter +++ b/sigrok-meter @@ -19,13 +19,85 @@ ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ## -from gi.repository import Gtk +from multiprocessing import Process, Queue +from gi.repository import Gtk, GObject +from sigrok.core import Context, Driver, Device, Session, Packet, Log +from sigrok.core import lowlevel as ll -builder = Gtk.Builder() -builder.add_from_file("sigrok-meter.glade") +def init_and_run(queue): + def datafeed_in(device, packet): + if packet.type == Packet.ANALOG: + data = packet.payload.data + unit, unit_str = packet.payload.unit, "" + if unit == ll.SR_UNIT_VOLT: + unit_str = " V" + elif unit == ll.SR_UNIT_OHM: + unit_str = " Ohm" + elif unit == ll.SR_UNIT_AMPERE: + unit_str = " A" + mqflags, mqflags_str = packet.payload.mqflags, "" + if mqflags & ll.SR_MQFLAG_AC: + mqflags_str = " AC" + elif mqflags & ll.SR_MQFLAG_DC: + 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)) -win = builder.get_object("main-window") -win.connect("delete-event", Gtk.main_quit) -win.show_all() -Gtk.main() + # log = Log() + # log.level = Log.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): + Gtk.main_quit(*args) + + def on_about(self, action): + about = self.builder.get_object("aboutdialog") + sr_pkg = ll.sr_package_version_string_get() + sr_lib = ll.sr_lib_version_string_get() + s = "Using libsigrok %s (lib version %s)." % (sr_pkg, sr_lib) + about.set_comments(s) + about.run() + about.hide() + +if __name__ == '__main__': + s = SigrokMeter() + process = Process(target=init_and_run, args=(s.queue,)) + process.start() + Gtk.main() + process.terminate()