diff -r b5878197d017 -r 136e210fce82 qmsk/dmx/heads.py --- /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', + ] +