qmsk/dmx/heads.py
changeset 83 136e210fce82
child 84 9ebf1a2cee3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/dmx/heads.py	Thu May 01 23:34:20 2014 +0300
@@ -0,0 +1,82 @@
+"""
+    High-level DMX output.
+"""
+
+class Head (object) :
+    CHANNELS = None
+
+    def __init__ (self, channel) :
+        self.channel = channel
+        self.channels = self.init()
+        self.attrs = { }
+
+    def init (self) :
+        if self.CHANNELS :
+            return self.CHANNELS
+        else :
+            raise NotImplementedError()
+
+    def __setitem__ (self, attr, value) :
+        if attr in self.channels :
+            self.attrs[attr] = value
+        else :
+            raise KeyError(attr)
+
+    def __getitem__ (self, attr) :
+        if attr in self.channels :
+            return self.attrs.get(attr, 0)
+        else :
+            raise KeyError(attr)
+ 
+    def alpha (self, alpha=None) :
+        if alpha is not None :
+            self['alpha'] = alpha
+        
+        if 'alpha' in self.channels :
+            return dict(alpha=self['alpha'])
+        else :
+            return None
+
+    def color (self, red=None, green=None, blue=None) :
+        if red is not None :
+            self['red'] = red
+        if green is not None :
+            self['green'] = green
+        if blue is not None :
+            self['blue'] = blue
+        
+        if 'red' in self.channels and 'green' in self.channels and 'blue' in self.channels :
+            return dict(red=self['red'], green=self['green'], blue=self['blue'])
+        else :
+            return None
+
+    def __iter__ (self) :
+        for attr in self.channels :
+            yield self.attrs.get(attr, 0)
+
+    def __call__ (self, dmx) :
+        dmx[self.channel] = tuple(self)
+
+class Stairville_LEDPar56 (Head) :
+    CHANNELS = [
+        'control1',
+        'red',
+        'green',
+        'blue',
+        'control2',
+    ]
+
+class Dimmer (Head) :
+    CHANNELS = [
+        'alpha',
+    ]
+
+class AmericanDJ_MegaTri60_Mode2 (Head) :
+    CHANNELS = [
+        'red',
+        'green',
+        'blue',
+        'control',
+        'alpha',
+    ]
+