|
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 |