"""
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',
]