# HG changeset patch # User Tero Marttila # Date 1402138440 -10800 # Node ID 13c2deb919d13f5450b1ea0e38721082e5c3b432 # Parent 1b3cea759eff4c200369534783e5bfbdcee3c2a0 qmsk.dmx.control: python3; remove broken serial timeout, quickfix startup dual-sync diff -r 1b3cea759eff -r 13c2deb919d1 qmsk/dmx/control.py --- 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) : """