--- a/qmsk/dmx/control.py Sat Jun 07 13:05:33 2014 +0300
+++ b/qmsk/dmx/control.py Sat Jun 07 13:54:00 2014 +0300
@@ -30,17 +30,24 @@
SERIAL = '/dev/arduino'
SERIAL_BAUD = 9600
- SERIAL_TIMEOUT = 1.0
@classmethod
- def open (cls, path, baud=SERIAL_BAUD, timeout=SERIAL_TIMEOUT) :
- return cls(serial.Serial(path, baud, timeout=timeout))
+ def open (cls, path, baud=SERIAL_BAUD) :
+ return cls(serial.Serial(path, baud))
def __init__ (self, io) :
self.io = io
+
+ # XXX: sync initial line
+ self.sync()
+ self.sync()
- # XXX: bug
- self.io.write('\r')
+ def sync (self) :
+ """
+ XXX: startup sync
+ """
+
+ self.io.write(b'\r')
self.io.flush()
self.io.read(1)
@@ -58,7 +65,7 @@
raise ValueError(arg)
if 0 <= value <= 255 :
- return str(value)
+ return str(value).encode('ascii')
else :
raise ValueError(value)
@@ -78,22 +85,23 @@
# XXX:
poll = opts.pop('poll', True)
-
- out = cmd + ' ' + ' '.join(self._arg(arg) for arg in args) + '\r'
+
+ out = cmd + b' ' + b' '.join(self._arg(arg) for arg in args)
log.info("%s", out)
self.io.write(out)
+ self.io.write(b'\r')
self.io.flush()
if poll:
for ret in self:
break
- if '!' in ret :
+ if b'!' in ret :
raise DMXCommandError(cmd=out, out=ret)
- elif '?' in ret :
+ elif b'?' in ret :
raise DMXUnknownCommandError(cmd=cmd)
def clear (self, **opts) :
@@ -104,7 +112,7 @@
For most lights, this seems to be equivalent to losing the DMX signal, and they retain their old state.
"""
- self('c', **opts)
+ self(b'c', **opts)
def zero (self, **opts) :
"""
@@ -113,35 +121,35 @@
Uses the maximum DMX packet length available.
"""
- self('z', **opts)
+ self(b'z', **opts)
def out (self, *values, **opts) :
"""
Set dmx = (value, ...)
"""
- self('o', *values, **opts)
+ self(b'o', *values, **opts)
def set (self, start, *values, **opts) :
"""
Set dmx[start:] = value
"""
- self('s', start, *values, **opts)
+ self(b's', start, *values, **opts)
def fill (self, start, end, *values, **opts) :
"""
Set dmx[start:end] to repetitions of (value, ...)
"""
- self('f', start, end, *values, **opts)
+ self(b'f', start, end, *values, **opts)
def range (self, start, stop, step, value, **opts) :
"""
Set dmx[start:end:step] = value
"""
- self('r', start, stop, step, value, **opts)
+ self(b'r', start, stop, step, value, **opts)
def __setitem__ (self, index, value) :
"""