--- /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',
+ ]
+