aboutsummaryrefslogtreecommitdiff
path: root/LightInstallation.py
diff options
context:
space:
mode:
authorGravatar Russell Cohen <rcoh@mit.edu>2010-11-23 00:24:08 -0500
committerGravatar Russell Cohen <rcoh@mit.edu>2010-11-23 00:24:08 -0500
commit99325eca1bbe7adc532a63fb0ec06e593b4f9b39 (patch)
tree251a2d1c6ea4814747bf7bc1c3174129198e9bfb /LightInstallation.py
parenta9b3325a9171abd0785bd03cbcb51cbbf47da1f2 (diff)
First Commit with the code. In process of doing some refactoring.
Diffstat (limited to 'LightInstallation.py')
-rw-r--r--LightInstallation.py91
1 files changed, 91 insertions, 0 deletions
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)
+