aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Dan <dan@rcoh-ubuntu-small.(none)>2011-01-25 00:33:46 -0500
committerGravatar Dan <dan@rcoh-ubuntu-small.(none)>2011-01-25 00:33:46 -0500
commiteaaef5460a95d2de1dddc847f6c3bbcb2aef8047 (patch)
tree004f6e326959cb5d6bfcf0793686dab74260a3db
parent2019fb2895237aa9d86450daaf6d90831189fc13 (diff)
Adding an OSC input.
-rwxr-xr-x[-rw-r--r--]LightInstallation.py2
-rw-r--r--behaviors/DebugBehavior.py2
-rw-r--r--behaviors/MrmrSetColor.py21
-rw-r--r--behaviors/Square.py15
-rw-r--r--config/6thFloorOSC.xml285
-rw-r--r--config/osc.xml10
-rw-r--r--inputs/OSCInput.py22
-rwxr-xr-xoscserver.py36
-rw-r--r--pixelcore/PixelStrip.py3
9 files changed, 385 insertions, 11 deletions
diff --git a/LightInstallation.py b/LightInstallation.py
index b582bd2..06852e4 100644..100755
--- a/LightInstallation.py
+++ b/LightInstallation.py
@@ -1,3 +1,5 @@
+#!/usr/bin/python
+
from xml.etree.ElementTree import ElementTree
from pixelcore.Screen import *
from pixelcore.PixelStrip import *
diff --git a/behaviors/DebugBehavior.py b/behaviors/DebugBehavior.py
index 34f4106..17383db 100644
--- a/behaviors/DebugBehavior.py
+++ b/behaviors/DebugBehavior.py
@@ -4,5 +4,5 @@ import pdb
class DebugBehavior(Behavior):
def processResponse(self, sensorInputs, recursiveInputs):
if sensorInputs != []:
- main_log.debug('Sensor Inputs: ' + str(sensorInputs))
+ main_log.error('Sensor Inputs: ' + str(sensorInputs))
return ([], [])
diff --git a/behaviors/MrmrSetColor.py b/behaviors/MrmrSetColor.py
new file mode 100644
index 0000000..97b9fb7
--- /dev/null
+++ b/behaviors/MrmrSetColor.py
@@ -0,0 +1,21 @@
+from operationscore.Behavior import *
+from logger import main_log
+#import util.ColorOps as color
+import colorsys
+import pdb
+class MrmrSetColor(Behavior):
+ def behaviorInit(self):
+ self.h=0
+ self.s=0
+ self.v=0
+ def processResponse(self, sensorInputs, recursiveInputs):
+ ret = []
+ for data in sensorInputs:
+ if data['Path'].find('horizontal') != -1:
+ self.h = data['Value'] / 2.78
+ elif data['Path'].find('vertical') != -1:
+ self.s = data['Value'] / 1000.0
+ else:
+ main_log.error('Sensor Inputs: ' + str(sensorInputs))
+ ret.append({'Color':[i*255 for i in colorsys.hsv_to_rgb(self.h,self.s,self.v)]})
+ return (ret, [])
diff --git a/behaviors/Square.py b/behaviors/Square.py
index aef3622..ecd000c 100644
--- a/behaviors/Square.py
+++ b/behaviors/Square.py
@@ -2,11 +2,12 @@ from operationscore.Behavior import *
class Square(Behavior):
def processResponse(self, sensorInputs, recursiveInputs):
for sensory in sensorInputs:#TODO: consider replicating the dict
- xLoc = sensory['Location'][0]
- yLoc = sensory['Location'][1]
- width = self['Width']
- #sensory['Location'] = 'True'
- sensory['Location'] =\
- '{x}<'+str(xLoc+width)+',{x}>'+str(xLoc-width)+\
- ',{y}<'+str(yLoc+width)+',{y}>'+str(yLoc-width)
+ if 'Location' in sensory:
+ xLoc = sensory['Location'][0]
+ yLoc = sensory['Location'][1]
+ width = self['Width']
+ #sensory['Location'] = 'True'
+ sensory['Location'] =\
+ '{x}<'+str(xLoc+width)+',{x}>'+str(xLoc-width)+\
+ ',{y}<'+str(yLoc+width)+',{y}>'+str(yLoc-width)
return (sensorInputs, recursiveInputs)
diff --git a/config/6thFloorOSC.xml b/config/6thFloorOSC.xml
new file mode 100644
index 0000000..0a27fda
--- /dev/null
+++ b/config/6thFloorOSC.xml
@@ -0,0 +1,285 @@
+<!---All configuration items contain a "Class" tag specifying the python class they represent, and an "Args" tag specifying the args to be passed in.-->
+<LightInstallation>
+ <InstallationConfiguration>
+ <Defaults>
+ <PixelMapper>simplemap</PixelMapper>
+ </Defaults>
+ </InstallationConfiguration>
+ <PixelConfiguration>
+ <InheritsFrom>layouts/60StripLayout.xml</InheritsFrom>
+ <!--<InheritsFrom>layouts/BasicSixStrip.xml</InheritsFrom-->
+ </PixelConfiguration>
+ <PixelMapperConfiguration>
+ <PixelMapper>
+ <Class>pixelmappers.SimpleMapper</Class>
+ <Args>
+ <Id>simplemap</Id>
+ <CutoffDist>20</CutoffDist>
+ </Args>
+ </PixelMapper>
+ <PixelMapper>
+ <Class>pixelmappers.GaussianMapper</Class>
+ <Args>
+ <Id>gaussmap</Id>
+ <CutoffDist>30</CutoffDist>
+ <MinWeight>0.1</MinWeight>
+ <Width>10</Width>
+ <Height>1</Height>
+ </Args>
+ </PixelMapper>
+ </PixelMapperConfiguration>
+ <RendererConfiguration>
+ <Renderer>
+ <InheritsFrom>renderers/60StripSeq.xml</InheritsFrom>
+ </Renderer>
+ <Renderer>
+ <InheritsFrom>renderers/Pygame.xml</InheritsFrom>
+ </Renderer>
+ </RendererConfiguration>
+ <InputConfiguration>
+ <InputElement>
+ <Class>inputs.OSCInput</Class>
+ <Args>
+ <Id>osc</Id>
+ <Port>1234</Port>
+ </Args>
+ </InputElement>
+ <InputElement>
+ <Class>inputs.PygameInput</Class>
+ <Args><!--Passed as a dictionary-->
+ <Id>pygame</Id>
+ <RefreshInterval>10</RefreshInterval>
+ </Args>
+ </InputElement>
+ <!--<InputElement>
+ <Class>inputs.TCPInput</Class>
+ <Args>
+ <Id>tcp</Id>
+ <Port>20120</Port>
+ <RefreshInterval>10</RefreshInterval>
+ </Args>
+ </InputElement>-->
+ <InputElement Id="followmouse">
+ <InheritsFrom>inputs/MouseFollower.xml</InheritsFrom>
+ </InputElement>
+ <InputElement>
+ <Class>inputs.RandomLocs</Class>
+ <Args>
+ <Id>randomLoc</Id>
+ </Args>
+ </InputElement>
+ </InputConfiguration>
+ <BehaviorConfiguration>
+ <Behavior>
+ <Class>behaviors.EchoBehavior</Class>
+ <Args>
+ <Id>echo</Id>
+ <z-index>0</z-index>
+ <RenderToScreen>False</RenderToScreen>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Args>
+ <Id>mrmrcolor</Id>
+ </Args>
+ <Class>behaviors.MrmrSetColor</Class>
+ </Behavior>
+ <Behavior Id="redshift">
+ <InheritsFrom>behaviors/RedShift.xml</InheritsFrom>
+ </Behavior>
+ <Behavior Id="colorchange">
+ <InheritsFrom>behaviors/RandomColor.xml</InheritsFrom>
+ </Behavior>
+ <Behavior Id="decay">
+ <InheritsFrom>behaviors/PixelDecay.xml</InheritsFrom>
+ </Behavior>
+ <Behavior Id="singleframe">
+ <InheritsFrom>behaviors/SingleFrame.xml</InheritsFrom>
+ </Behavior>
+ <Behavior Id="slowdecay">
+ <InheritsFrom>behaviors/PixelDecay.xml</InheritsFrom>
+ <Args>
+ <Coefficient>.01</Coefficient>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.XYMove</Class>
+ <Args>
+ <Id>xymove</Id>
+ <XStep>5</XStep>
+ <YStep>2</YStep>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.RestrictLocation</Class>
+ <Args>
+ <Id>xbounce</Id>
+ <Action>{val}*-1</Action>
+ <ParamName>XStep</ParamName>
+ <LocationRestriction>{x}&lt;0 or {x}&gt;800</LocationRestriction>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.RestrictLocation</Class>
+ <Args>
+ <Id>ybounce</Id>
+ <Action>{val}*-1</Action>
+ <ParamName>YStep</ParamName>
+ <LocationRestriction>{y}&lt;0 or {y}&gt;200</LocationRestriction>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
+ <Id>movebounce</Id>
+ <ChainedBehaviors>
+ <Id>xymove</Id>
+ <Id>ybounce</Id>
+ <Id>xbounce</Id>
+ </ChainedBehaviors>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
+ <Id>xymover</Id>
+ <Inputs>
+ <Id>pygame</Id>
+ </Inputs>
+ <ChainedBehaviors>
+ <Id>colorchange</Id>
+ <Id>mover</Id>
+ <Id>decay</Id>
+ </ChainedBehaviors>
+ <RecursiveHooks>{'mover':'movebounce'}</RecursiveHooks>
+ <RenderToScreen>True</RenderToScreen>
+ <Mapper>gaussmap</Mapper>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.DebugBehavior</Class>
+ <Args>
+ <Id>debug</Id>
+ <z-index>0</z-index>
+ <Inputs>
+ <Id>pygame</Id>
+ </Inputs>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.AllPixelsLeft</Class>
+ <Args>
+ <Id>pixelsleft</Id>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.Square</Class>
+ <Args>
+ <Id>square</Id>
+ <Width>20</Width>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.AllPixels</Class>
+ <Args>
+ <Id>allpixels</Id>
+ </Args>
+ </Behavior>
+ <Behavior Id="recursivedecay">
+ <InheritsFrom>behaviors/LoopAndDie.xml</InheritsFrom>
+ <Args>
+ <InitialResponseCount>50</InitialResponseCount>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
+ <Id>runcolordecay</Id>
+ <Inputs>
+ <Id>pygame</Id>
+ </Inputs>
+ <ChainedBehaviors>
+ <Id>colorchange</Id>
+ <Id>running</Id>
+ <Id>decay</Id>
+ </ChainedBehaviors>
+ <RecursiveHooks>{'running':'acceleratedie'}</RecursiveHooks>
+ <RenderToScreen>False</RenderToScreen>
+ <Mapper>gaussmap</Mapper>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
+ <Id>randomwalk</Id>
+ <Inputs>
+ <Id>pygame</Id>
+ </Inputs>
+ <ChainedBehaviors>
+ <Id>colorchange</Id>
+ <Id>mover</Id>
+ <Id>decay</Id>
+ </ChainedBehaviors>
+ <RecursiveHooks>{'mover':'redwalk'}</RecursiveHooks>
+ <RenderToScreen>False</RenderToScreen>
+ <Mapper>gaussmap</Mapper>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.ResponseMover</Class>
+ <Args>
+ <Id>mover</Id>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
+ <Id>redwalk</Id>
+ <ChainedBehaviors>
+ <Id>randmovement</Id>
+ <Id>redshift</Id>
+ </ChainedBehaviors>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.RandomWalk</Class>
+ <Args>
+ <Id>randmovement</Id>
+ <StepSize>2</StepSize>
+ </Args>
+ </Behavior>
+ <Behavior Id="accelerate">
+ <InheritsFrom>behaviors/Accelerate.xml</InheritsFrom>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
+ <Id>acceleratedie</Id>
+ <ChainedBehaviors>
+ <Id>accelerate</Id>
+ <Id>recursivedecay</Id>
+ </ChainedBehaviors>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
+ <Id>mousechaser</Id>
+ <Inputs>
+ <Id>followmouse</Id>
+ <Id>tcp</Id>
+ <Id>osc</Id>
+ </Inputs>
+ <ChainedBehaviors>
+ <Id>mrmrcolor</Id>
+ <Id>square</Id>
+ <Id>singleframe</Id>
+ </ChainedBehaviors>
+ <RenderToScreen>True</RenderToScreen>
+ </Args>
+ </Behavior>
+ <Behavior Id="running">
+ <InheritsFrom>behaviors/RunningBehavior.xml</InheritsFrom>
+ </Behavior>
+ </BehaviorConfiguration>
+</LightInstallation>
diff --git a/config/osc.xml b/config/osc.xml
new file mode 100644
index 0000000..6efea40
--- /dev/null
+++ b/config/osc.xml
@@ -0,0 +1,10 @@
+ <InputElement>
+ <Class>inputs.OSCInput</Class>
+ <Args>
+ <Id>osc</Id>
+ <Port>1234</Port>
+ </Args>
+ </InputElement>
+ <Behavior Id="mrmrcolor">
+ <Class>behaviors.MrmrSetColor</Class>
+ </Behavior>
diff --git a/inputs/OSCInput.py b/inputs/OSCInput.py
new file mode 100644
index 0000000..a998490
--- /dev/null
+++ b/inputs/OSCInput.py
@@ -0,0 +1,22 @@
+from operationscore.Input import *
+import liblo
+from logger import main_log
+
+
+class OSCInput(Input):
+ def inputInit(self):
+ HOST = '' # Symbolic name meaning all available interfaces
+ PORT = self['Port'] # Arbitrary non-privileged port
+ self.server = liblo.Server(PORT)
+ self.server.add_method(None,None, self.fallback)
+# except liblo.ServerError, err:
+ # main_log.error(str(err))
+
+ def fallback(self,path,args,types, src):
+ self.respond({'Path':path,'Type':types[0],'Value':args[0]})
+ def sensingLoop(self):
+ self.server.recv(100)
+ pass#(data,address) = self.sock.recvfrom(1024)
+ #dataDict = {'data':data, 'address':address}
+ #self.respond(dataDict)
+
diff --git a/oscserver.py b/oscserver.py
new file mode 100755
index 0000000..6763f41
--- /dev/null
+++ b/oscserver.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+
+import liblo, sys
+
+# create server, listening on port 1234
+try:
+ server = liblo.Server(1234)
+except liblo.ServerError, err:
+ print str(err)
+ sys.exit()
+
+def foo_bar_callback(path, args):
+ i, f = args
+ print "received message '%s' with arguments '%d' and '%f'" % (path, i, f)
+
+def foo_baz_callback(path, args, types, src, data):
+ print "received message '%s'" % path
+ print "blob contains %d bytes, user data was '%s'" % (len(args[0]), data)
+
+def fallback(path, args, types, src):
+ print "got unknown message '%s' from '%s'" % (path, src.get_url())
+ for a, t in zip(args, types):
+ print "argument of type '%s': %s" % (t, a)
+
+# register method taking an int and a float
+server.add_method("/foo/bar", 'if', foo_bar_callback)
+
+# register method taking a blob, and passing user data to the callback
+server.add_method("/foo/baz", 'b', foo_baz_callback, "blah")
+
+# register a fallback for unhandled messages
+server.add_method(None, None, fallback)
+
+# loop and dispatch messages every 100ms
+while True:
+ server.recv(100)
diff --git a/pixelcore/PixelStrip.py b/pixelcore/PixelStrip.py
index 662b8fe..647991d 100644
--- a/pixelcore/PixelStrip.py
+++ b/pixelcore/PixelStrip.py
@@ -14,9 +14,6 @@ class PixelStrip:
self.pixels = [Pixel(l) for l in pixelLocations]
def __iter__(self):
return self.pixels.__iter__()
- def render(self, surface):
- [l.render(surface) for l in self.pixels]
- #step
def allOn(self, time):
[l.turnOnFor(time) for l in self.pixels] #TODO: add test-on method to
#pixels