qmsk/dmx/heads.py
changeset 83 136e210fce82
child 84 9ebf1a2cee3a
equal deleted inserted replaced
82:b5878197d017 83:136e210fce82
       
     1 """
       
     2     High-level DMX output.
       
     3 """
       
     4 
       
     5 class Head (object) :
       
     6     CHANNELS = None
       
     7 
       
     8     def __init__ (self, channel) :
       
     9         self.channel = channel
       
    10         self.channels = self.init()
       
    11         self.attrs = { }
       
    12 
       
    13     def init (self) :
       
    14         if self.CHANNELS :
       
    15             return self.CHANNELS
       
    16         else :
       
    17             raise NotImplementedError()
       
    18 
       
    19     def __setitem__ (self, attr, value) :
       
    20         if attr in self.channels :
       
    21             self.attrs[attr] = value
       
    22         else :
       
    23             raise KeyError(attr)
       
    24 
       
    25     def __getitem__ (self, attr) :
       
    26         if attr in self.channels :
       
    27             return self.attrs.get(attr, 0)
       
    28         else :
       
    29             raise KeyError(attr)
       
    30  
       
    31     def alpha (self, alpha=None) :
       
    32         if alpha is not None :
       
    33             self['alpha'] = alpha
       
    34         
       
    35         if 'alpha' in self.channels :
       
    36             return dict(alpha=self['alpha'])
       
    37         else :
       
    38             return None
       
    39 
       
    40     def color (self, red=None, green=None, blue=None) :
       
    41         if red is not None :
       
    42             self['red'] = red
       
    43         if green is not None :
       
    44             self['green'] = green
       
    45         if blue is not None :
       
    46             self['blue'] = blue
       
    47         
       
    48         if 'red' in self.channels and 'green' in self.channels and 'blue' in self.channels :
       
    49             return dict(red=self['red'], green=self['green'], blue=self['blue'])
       
    50         else :
       
    51             return None
       
    52 
       
    53     def __iter__ (self) :
       
    54         for attr in self.channels :
       
    55             yield self.attrs.get(attr, 0)
       
    56 
       
    57     def __call__ (self, dmx) :
       
    58         dmx[self.channel] = tuple(self)
       
    59 
       
    60 class Stairville_LEDPar56 (Head) :
       
    61     CHANNELS = [
       
    62         'control1',
       
    63         'red',
       
    64         'green',
       
    65         'blue',
       
    66         'control2',
       
    67     ]
       
    68 
       
    69 class Dimmer (Head) :
       
    70     CHANNELS = [
       
    71         'alpha',
       
    72     ]
       
    73 
       
    74 class AmericanDJ_MegaTri60_Mode2 (Head) :
       
    75     CHANNELS = [
       
    76         'red',
       
    77         'green',
       
    78         'blue',
       
    79         'control',
       
    80         'alpha',
       
    81     ]
       
    82