summaryrefslogtreecommitdiffstats
path: root/pyk8055/k8055.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyk8055/k8055.py')
-rwxr-xr-xpyk8055/k8055.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/pyk8055/k8055.py b/pyk8055/k8055.py
new file mode 100755
index 0000000..3c03a10
--- /dev/null
+++ b/pyk8055/k8055.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+# $Id: k8055.py,v 1.2 2007/03/15 14:50:55 pjetur Exp $
+"""
+Python version of K8055 command line program
+
+Copyright (C) 2007 by Pjetur G. Hjaltason
+
+Syntax : python k8055.py [-p:(number)] [-d:(value)] [-a1:(value)] [-a2:(value)]
+ [-num:(number) [-delay:(number)] [-dbt1:(value)]
+ [-dbt2:(value)] [-reset1] [-reset2] [-debug] [-h|--help]
+ -p:(number) Set board number (0/1/2/3)
+ -d:(value) Set digital output value (bitmask, 8 bits in decimal)
+ -a1:(value) Set analog output 1 value (0-255)
+ -a2:(value) Set analog output 2 value (0-255)
+ -num:(number) Set number of measures (-1 for no read)
+ -delay:(number) Set delay between two measures (in msec)
+ -dbt1:(value) Set debounce time for counter 1 (in msec)
+ -dbt2:(value) Set debounce time for counter 2 (in msec)
+ -reset1 Reset counter 1
+ -reset2 Reset counter 2
+ -debug Activate debug mode
+ -h or --help Print this text
+
+Example : python k8055.py -p:1 -d:147 -a1:25 -a2:203
+
+NOTE:
+ Because of the nature of commands sent to the K8055 board, this
+ program has no way of knowing previous state of the analog or
+ digial outputs, thus each run of this command will clear the previous
+ state - and set a new state - of the analog and digital outputs
+
+ See header of libk8055.c for more details of K8055 commands
+"""
+import sys
+from time import sleep, time
+from pyk8055 import *
+
+def main(argv):
+ # preset values
+ p , db = 0,0 # Port, debug
+ r1, r2 = 0,0 # reset1, reset2
+ dl = -1 # delay
+ db1,db2 = -1,-1 # debounce1, debounce2
+ a1,a2,d = -1,-1,-1 # analog1, analog2, digital
+ nm = 1 # number of times to read, default once
+
+ # not the standard getopts way, but...
+ for arg in argv:
+ if arg in ("-h", "--help"):
+ print __doc__
+ sys.exit(0)
+ elif arg[:4] == "-a1:" : a1 = int(arg[4:])
+ elif arg[:4] == "-a2:" : a2 = int(arg[4:])
+ elif arg[:5] == "-num:" : nm = int(arg[5:])
+ elif arg[:3] == "-d:" : d = int(arg[3:])
+ elif arg[:3] == "-p:" : p = int(arg[3:])
+ elif arg[:7] == "-delay:" : dl = int(arg[7:])
+ elif arg[:6] == "-dbt1:" : db1 = int(arg[6:])
+ elif arg[:6] == "-dbt2:" : db2 = int(arg[6:])
+ elif arg == "-reset1" : r1 = 1
+ elif arg == "-reset2" : r2 = 1
+ elif arg == "-debug" : db = 1
+ else:
+ print __doc__
+ sys.exit(0)
+
+ try:
+ # Open device
+ if db == 1: k = k8055(p,True) # Debug mode
+ else: k = k8055(p)
+
+ # set requested
+ if r1 != 0: k.ResetCounter(1)
+ if r2 != 0: k.ResetCounter(2)
+ if db1 != -1: k.SetCounterDebounceTime(1, db1)
+ if db2 != -1: k.SetCounterDebounceTime(2, db2)
+
+ # Try to set all digital/analog values at the same time
+ if (d != -1 and a1 != -1 and a2 != -1) : SetAllValues(d,a1,a2)
+ elif (d != -1 and a1 != -1 ) : SetAllValues(d,a1,0)
+ elif (d != -1 and a2 != -1 ) : SetAllValues(d,0,a2)
+ elif (a1 != -1 and a2 != -1 ) : SetAllValues(0,a1,a2)
+ # Else only one specified
+ else:
+ if d != -1: k.WriteAllDigital(d)
+ if a1 != -1: k.OutputAnalogChannel(1,a1)
+ if a2 != -1: k.OutputAnalogChannel(2,a2)
+
+ # Now we loop (or not) for the specified number of times
+ # reading all the input values
+
+ # Each read of all values will take about 2-8ms, at least
+ # on my setup - so no sense in using delay less than 10
+ if (dl > 0) & (dl < 10): dl = 10
+
+ if (nm > 0) & (dl > 0):
+ tst = tstart = time()
+ i = 0
+ while nm > 0:
+ ds = str(k)
+ tnow = time()
+ tms = (tnow - tstart) * 1000.0
+ delta= dl - (tms - dl*i)
+ #tst = tnow
+ print str(int(tms+0.4999))+";"+ds
+ sleep((delta)/1000.0) # compensate for read time
+ nm -= 1
+ i += 1
+ elif nm > 0:
+ print "0;"+ str(k)
+
+ k.CloseDevice()
+
+ except IOError:
+ print "Could not open the k8055 (port:%s)" % str(p)
+
+main(sys.argv[1:])