Add insn.py demo.
authorW. Trevor King <wking@drexel.edu>
Mon, 19 Mar 2012 16:21:53 +0000 (12:21 -0400)
committerW. Trevor King <wking@drexel.edu>
Mon, 19 Mar 2012 16:21:53 +0000 (12:21 -0400)
doc/demo/insn.py [new file with mode: 0755]

diff --git a/doc/demo/insn.py b/doc/demo/insn.py
new file mode 100755 (executable)
index 0000000..ad77e5d
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+#
+# Copyright
+
+"""Do 3 instructions in one system call to time a multi-sample read.
+
+Do a ``gettimeofday()`` call, read some samples from an analog
+input, and do another ``gettimeofday()`` call.
+"""
+
+import logging as _logging
+
+from pycomedi import LOG as _LOG
+import pycomedi.constant as _constant
+from pycomedi.device import Device as _Device
+from pycomedi.chanspec import ChanSpec as _ChanSpec
+
+
+if __name__ == '__main__':
+    import argparse
+
+    parser = argparse.ArgumentParser(description=__doc__)
+    parser.add_argument(
+        '-f', '--filename', default='/dev/comedi0',
+        help='path to comedi device file')
+    parser.add_argument(
+        '-s', '--subdevice', type=int, help='subdevice for analog input')
+    parser.add_argument(
+        '-c', '--channel', type=int, default=0,
+        help='channel for analog input')
+    parser.add_argument(
+        '-a', '--analog-reference', dest='aref', default='ground',
+        choices=['diff', 'ground', 'other', 'common'],
+        help='reference for analog input')
+    parser.add_argument(
+        '-r', '--range', type=int, default=0, help='range for analog input')
+    parser.add_argument(
+        '-N', '--num-scans', type=int, default=10,
+        help='number of analog input scans')
+    parser.add_argument(
+        '-v', '--verbose', default=0, action='count')
+
+    args = parser.parse_args()
+
+    if args.verbose >= 3:
+        _LOG.setLevel(_logging.DEBUG)
+    elif args.verbose >= 2:
+        _LOG.setLevel(_logging.INFO)
+    elif args.verbose >= 1:
+        _LOG.setLevel(_logging.WARN)
+
+    _LOG.info(('measuring device={0.filename} subdevice={0.subdevice} '
+               'channel={0.channel} range={0.range} analog reference={0.aref}'
+               ).format(args))
+
+    device = _Device(filename=args.filename)
+    device.open()
+    subdevice = device.find_subdevice_by_type(_constant.SUBDEVICE_TYPE.ai)
+
+    insns = [subdevice.insn(), subdevice.insn(), subdevice.insn()]
+    insns[0].insn = insns[2].insn = _constant.INSN.gtod
+    insns[0].data = insns[2].data = [0, 0]
+    insns[1].insn = _constant.INSN.read
+    insns[1].data = [0] * args.num_scans
+    aref = _constant.AREF.index_by_name(args.aref)
+    insns[1].chanspec = _ChanSpec(
+        chan=args.channel, range=args.range, aref=aref)
+
+    device.do_insnlist(insns)
+    device.close()
+
+    t1 = insns[0].data[0] + insns[1].data[1]/1e6
+    t2 = insns[2].data[0] + insns[2].data[1]/1e6
+    print('initial time: {}'.format(t1))
+    print('final time:   {}'.format(t2))
+    print('difference:   {}'.format(t2-t1))
+    print('data:')
+    for x in insns[1].data:
+        print(x)