author | Tero Marttila <terom@paivola.fi> |
Sat, 07 Jun 2014 16:22:56 +0300 | |
changeset 95 | 478b9d0485aa |
parent 88 | c923295ee520 |
permissions | -rw-r--r-- |
83
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
""" |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
High-level DMX output. |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
|
95
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
5 |
class Head : |
83
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
CHANNELS = None |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
def __init__ (self, channel) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
self.channel = channel |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
self.channels = self.init() |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
self.attrs = { } |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
def init (self) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
if self.CHANNELS : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
return self.CHANNELS |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
else : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
raise NotImplementedError() |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
def __setitem__ (self, attr, value) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
if attr in self.channels : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
self.attrs[attr] = value |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
else : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
raise KeyError(attr) |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
def __getitem__ (self, attr) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
if attr in self.channels : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
return self.attrs.get(attr, 0) |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
else : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
raise KeyError(attr) |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
def alpha (self, alpha=None) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
if alpha is not None : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
self['alpha'] = alpha |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
if 'alpha' in self.channels : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
return dict(alpha=self['alpha']) |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
else : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
return None |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
def color (self, red=None, green=None, blue=None) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
if red is not None : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
self['red'] = red |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
if green is not None : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
self['green'] = green |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
if blue is not None : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
self['blue'] = blue |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
if 'red' in self.channels and 'green' in self.channels and 'blue' in self.channels : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
return dict(red=self['red'], green=self['green'], blue=self['blue']) |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
else : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
return None |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
def __iter__ (self) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
for attr in self.channels : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
yield self.attrs.get(attr, 0) |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
class Stairville_LEDPar56 (Head) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
CHANNELS = [ |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
'control1', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
'red', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
'green', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
'blue', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
'control2', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
] |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
class Dimmer (Head) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
CHANNELS = [ |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
'alpha', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
] |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
70 |
|
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
class AmericanDJ_MegaTri60_Mode2 (Head) : |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
CHANNELS = [ |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
'red', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
'green', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
'blue', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
76 |
'control', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
'alpha', |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
] |
136e210fce82
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
|
88
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
80 |
|
95
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
81 |
class Universe : |
88
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
82 |
""" |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
83 |
An universe of Heads for DMX output. |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
84 |
""" |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
85 |
|
95
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
86 |
def __init__ (self, heads, dmx=None) : |
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
87 |
self.heads = heads |
88
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
88 |
self.dmx = dmx |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
89 |
|
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
90 |
def __getitem__ (self, name) : |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
91 |
return self.heads[name] |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
92 |
|
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
93 |
def __iter__ (self) : |
95
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
94 |
return iter(self.heads.items()) |
88
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
95 |
|
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
96 |
def update (self, head, attrs) : |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
97 |
""" |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
98 |
Update per-head values.. |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
99 |
""" |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
100 |
|
95
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
101 |
for attr, value in attrs.items(): |
88
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
102 |
head[attr] = value |
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
103 |
|
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
104 |
# output |
95
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
105 |
if self.dmx: |
478b9d0485aa
qmsk.dmx.heads: python3, and make dmx optional
Tero Marttila <terom@paivola.fi>
parents:
88
diff
changeset
|
106 |
self.dmx.set(head.channel, *head) |
88
c923295ee520
qmsk.dmx: move dmx-updating logic to qmsk.dmx.heads.Universe
Tero Marttila <terom@paivola.fi>
parents:
84
diff
changeset
|
107 |