+import argparse
+from multiprocessing import Process, Queue
+from gi.repository import Gtk, GObject
+import re
+import sigrok.core as sr
+import sys
+import textwrap
+
+default_drivers = [('demo', {'analog_channels': 1})]
+default_loglevel = sr.LogLevel.WARN
+
+def init_and_run(queue, drivers, loglevel):
+ def datafeed_in(device, packet):
+ if packet.type == sr.PacketType.ANALOG:
+ data = packet.payload.data
+ unit, unit_str = packet.payload.unit, ""
+ if unit == sr.Unit.VOLT:
+ unit_str = " V"
+ elif unit == sr.Unit.OHM:
+ unit_str = " Ohm"
+ elif unit == sr.Unit.AMPERE:
+ unit_str = " A"
+ mqflags, mqflags_str = packet.payload.mq_flags, ""
+ if sr.QuantityFlag.AC in mqflags:
+ mqflags_str = " AC"
+ elif sr.QuantityFlag.DC in mqflags:
+ mqflags_str = " DC"
+ for i in range(packet.payload.num_samples):
+ dev = "%s %s" % (device.vendor, device.model)
+ val = "%f%s%s" % (data[0][i], unit_str, mqflags_str)
+ queue.put((dev, val))
+
+ context = sr.Context_create()
+ context.log_level = loglevel
+
+ devices = []
+ for name, options in drivers:
+ try:
+ dr = context.drivers[name]
+ devices.append(dr.scan(**options)[0])
+ except:
+ print('error getting device for driver "{}", skipping'.format(name))
+
+ if not devices:
+ print('no devices found')
+ return
+
+ session = context.create_session()
+ for dev in devices:
+ session.add_device(dev)
+ dev.open()
+ session.add_datafeed_callback(datafeed_in)
+ session.start()
+ session.run()
+ session.stop()