qmsk/dmx/heads.py
author Tero Marttila <terom@paivola.fi>
Thu, 01 May 2014 23:34:20 +0300
changeset 83 136e210fce82
child 84 9ebf1a2cee3a
permissions -rw-r--r--
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
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
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
class Head (object) :
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
    def __call__ (self, dmx) :
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
        dmx[self.channel] = tuple(self)
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
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
    61
    CHANNELS = [
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
        'control1',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
        'red',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
        'green',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
        'blue',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
        'control2',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
    ]
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
class Dimmer (Head) :
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
    CHANNELS = [
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
        'alpha',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
    ]
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
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
    75
    CHANNELS = [
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
        'red',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
        'green',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
        'blue',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
        'control',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
        'alpha',
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
    ]
136e210fce82 qmsk.dmx: new Head-based model/view; output/updates not yet implemented
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82