From 99325eca1bbe7adc532a63fb0ec06e593b4f9b39 Mon Sep 17 00:00:00 2001 From: Russell Cohen Date: Tue, 23 Nov 2010 00:24:08 -0500 Subject: First Commit with the code. In process of doing some refactoring. --- LightInstallation.py | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 LightInstallation.py (limited to 'LightInstallation.py') diff --git a/LightInstallation.py b/LightInstallation.py new file mode 100644 index 0000000..0c24981 --- /dev/null +++ b/LightInstallation.py @@ -0,0 +1,91 @@ +from xml.etree.ElementTree import ElementTree +from Screen import Screen +from PixelStrip import PixelStrip +import pdb, sys, time, Util +from pygame.locals import * +#Python class to instantiate and drive a Screen through different patterns, +#and effects. +class LightInstallation: + def __init__(self, configFileName): + self.inputs = {} #dict of inputs and their bound behaviors, keyed by InputId + self.behaviors = {} + config = ElementTree() + config.parse(configFileName) + self.screen = Screen() + rendererConfig = config.find('RendererConfiguration') + layoutConfig = config.find('LayoutConfiguration') + inputConfig = config.find('InputConfiguration') + behaviorConfig = config.find('BehaviorConfiguration') + self.initializeLights(layoutConfig) + self.initializeRenderers(rendererConfig) + self.initializeInputs(inputConfig) + self.initializeBehaviors(behaviorConfig) + + self.mainLoop() + def initializeLights(self, layoutConfig): + layoutEngines = self.initializeComponent(layoutConfig) + [self.addPixelStrip(l) for l in layoutEngines] + def addPixelStrip(self, layoutEngine): + pixelStrip = PixelStrip(layoutEngine) + self.screen.addStrip(pixelStrip) + def initializeInputs(self, inputConfig): + inputs = self.initializeComponent(inputConfig) + for inputClass in inputs: + inputClass.start() + self.inputs[inputClass.argDict['InputId']] = (inputClass, []) + def initializeRenderers(self, rendererConfig): + self.renderers = self.initializeComponent(rendererConfig) + print self.renderers + def initializeComponent(self, config): + components = [] + if config != None: + for configItem in config.getchildren(): + className = configItem.find('Class').text + exec('from ' + className + ' import ' + className) + args = Util.generateArgDict(configItem.find('Args')) + args['parentScope'] = self + components.append(eval(className+'(args)')) #TODO: doesn't error + #right + return components + def alive(self): + return True + def mainLoop(self): + #self.screen.allOn() + while 1: + time.sleep(.1) + responses = [] + for behaviorId in self.behaviors: + [responses.append(b) for b in \ + self.behaviors[behaviorId].timeStep()] #processes all queued inputs + [self.screen.respond(response) for response in responses if + response != []] + self.screen.timeStep() + if responses != []: + print responses + [r.render(self.screen) for r in self.renderers] + def initializeBehaviors(self, behaviorConfig): + behaviors = self.initializeComponent(behaviorConfig) + for behavior in behaviors: + print behavior.argDict + self.addBehavior(behavior) + print self.inputs + print self.behaviors + def addBehavior(self, behavior): + self.behaviors[behavior.argDict['behaviorId']] = behavior + for inputId in behavior.argDict['Inputs']: + self.inputs[inputId][1].append(behavior.argDict['behaviorId']) + def processResponse(self,inputDict, responseDict): + #pdb.set_trace() + inputId = inputDict['InputId'] + boundBehaviors = self.inputs[inputId][1] + [self.behaviors[b].addInput(responseDict) for b in boundBehaviors] + +def main(argv): + print argv + if len(argv) == 1: + l = LightInstallation('LightInstallationConfig.xml') + else: + l = LightInstallation(argv[1]) +if __name__ == "__main__": + main(sys.argv) + -- cgit v1.2.3