qmsk.dmx.control: python3; remove broken serial timeout, quickfix startup dual-sync
authorTero Marttila <terom@paivola.fi>
Sat, 07 Jun 2014 13:54:00 +0300
changeset 90 13c2deb919d1
parent 89 1b3cea759eff
child 91 292b26405ee7
qmsk.dmx.control: python3; remove broken serial timeout, quickfix startup dual-sync
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) :
         """