aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar rcoh <rcoh@mit.edu>2011-01-28 15:19:21 -0500
committerGravatar rcoh <rcoh@mit.edu>2011-01-28 15:19:21 -0500
commitef1abfa913498e02a4ece3be4be45d2f03e47d05 (patch)
treeca9e7fb9819e59872f7f6a73c032b40a0804517c
parenta7d6577e55ebd665ad9e4f45183836f11b3c6fd4 (diff)
Lots of stuff INCOMPLETE
-rwxr-xr-xLightInstallation.py2
-rw-r--r--behaviors/ExpandingColorZones.py7
-rw-r--r--behaviors/MITDoors.py1
-rw-r--r--behaviors/RiseFall.py6
-rwxr-xr-xbehaviors/SmootWind.py24
-rw-r--r--config/6thFloorOSC.xml30
-rw-r--r--config/Jennifer.xml1
-rw-r--r--config/Kuan.xml9
-rwxr-xr-xconfig/SmootWindTest.xml12
-rw-r--r--inputs/OSCInput.py4
-rw-r--r--inputs/PygameInput.py5
-rw-r--r--pixelcore/Pixel.py4
-rw-r--r--renderers/IndoorRenderer.py7
-rw-r--r--util/NetworkOps.py6
-rw-r--r--util/PacketComposition.py15
15 files changed, 111 insertions, 22 deletions
diff --git a/LightInstallation.py b/LightInstallation.py
index 24ad8b1..c1f01e8 100755
--- a/LightInstallation.py
+++ b/LightInstallation.py
@@ -139,7 +139,7 @@ class LightInstallation(object):
def mainLoop(self):
lastLoopTime = clock.time()
- refreshInterval = 30
+ refreshInterval = 30
while not self.dieNow: #dieNow is set if one of its constituents sends a die request.
loopStart = clock.time()
responses = self.evaluateBehaviors()
diff --git a/behaviors/ExpandingColorZones.py b/behaviors/ExpandingColorZones.py
index 345851e..75be761 100644
--- a/behaviors/ExpandingColorZones.py
+++ b/behaviors/ExpandingColorZones.py
@@ -2,13 +2,14 @@ from operationscore.Behavior import *
from logger import main_log
class ExpandingColorZones(Behavior):
def behaviorInit(self):
- self.mapping = {'r':[(132,0),(255,0,0)], 'g':[(400,0), (0,255,0)],
- 'b':[(668,0),
+ self.mapping = {'s001':[(132,0),(255,0,0)], 's002':[(400,0), (0,255,0)],
+ 's003':[(668,0),
(0,0,255)]}
- self.mappingkey = 'KeyChar'
+ self.mappingkey = 'data'
def processResponse(self, sensorInputs, recursiveInputs):
ret = []
for data in sensorInputs:
+ print data
data = dict(data)
if self.mappingkey in data:
try:
diff --git a/behaviors/MITDoors.py b/behaviors/MITDoors.py
index 03bef6d..cee47f0 100644
--- a/behaviors/MITDoors.py
+++ b/behaviors/MITDoors.py
@@ -23,5 +23,6 @@ class MITDoors(Behavior):
data['Left'], data['Right'] = bounds
data['Bottom'] = self['Bottom']
data['Location'] = (sum(bounds) / 2., self['Bottom'])
+ data['Oscillate'] = False
ret.append(data)
return (ret, [])
diff --git a/behaviors/RiseFall.py b/behaviors/RiseFall.py
index 109cd10..eea2283 100644
--- a/behaviors/RiseFall.py
+++ b/behaviors/RiseFall.py
@@ -29,7 +29,13 @@ class RiseFall(Behavior):
data['Right'] = data['Location'][0]+data['Width']/2.
currentTime = timeOps.time()
deltaTime = currentTime-data['StartTime']
+ #if data['Oscillate'] == True:
data['Height'] = data['MaxHeight']*math.sin(deltaTime/data['Period']*(math.pi*2))
+ #else:
+ # data['Height'] = data['MaxHeight']
+ #if (currentTime-data['StartTime']) > data['Period']:
+ # del data['StartTime']
+
data['Location'] = "{x}>"+str(data['Left']) + ", " +\
"{x}<"+str(data['Right'])+", {y}<" + str(data['Bottom']) + ",\
{y}>"+str(data['Bottom']-data['Height'])
diff --git a/behaviors/SmootWind.py b/behaviors/SmootWind.py
index 347e2fc..804183c 100755
--- a/behaviors/SmootWind.py
+++ b/behaviors/SmootWind.py
@@ -22,12 +22,22 @@ class SmootWind(Behavior):
for sensory in sensorInputs:
print sensory
# input[0] is windspeed, [1] is dir
- windSpeed = sensory[0]
- windDir = sensory[1]
+ if 0 in sensory and 1 in sensory:
+ windSpeed = sensory[0]
+ windDir = sensory[1]
+ #print self.mapper.argDict
+ self.mapper.argDict['Width'] = self.mapper.argDict['Width']+float(windSpeed)*2+20
+ self.xFor.argDict['ParamOp'] = self.xFor.argDict['ParamOp']+float(windSpeed)*3+10*random.random();
+ #print 'Width: ' + str(self.mapper.argDict['Width'])
+ #print 'xFor: ' + str(self.xFor.argDict['ParamOp'])
+
+ elif 'Key' in sensory:
+ if sensory['Key'] == 273:
+ self.mapper.argDict['Width'] = self.mapper.argDict['Width']+10;
+ self.xFor.argDict['ParamOp'] = self.xFor.argDict['ParamOp']+5;
+
+ elif sensory['Key'] == 274:
+ self.mapper.argDict['Width'] = self.mapper.argDict['Width']-10;
+ self.xFor.argDict['ParamOp'] = self.xFor.argDict['ParamOp']-5;
- #print self.mapper.argDict
- self.mapper.argDict['Width'] = float(windSpeed)*2+20
- self.xFor.argDict['ParamOp'] = float(windSpeed)*3+10*random.random();
- #print 'Width: ' + str(self.mapper.argDict['Width'])
- #print 'xFor: ' + str(self.xFor.argDict['ParamOp'])
return (sensorInputs, recursiveInputs)
diff --git a/config/6thFloorOSC.xml b/config/6thFloorOSC.xml
index 792fd0c..2215688 100644
--- a/config/6thFloorOSC.xml
+++ b/config/6thFloorOSC.xml
@@ -40,6 +40,14 @@
<InputElement>
<Class>inputs.OSCInput</Class>
<Args>
+ <Id>osc2</Id>
+ <Port>1234</Port>
+ <RefreshInterval>10</RefreshInterval>
+ </Args>
+ </InputElement>
+ <InputElement>
+ <Class>inputs.OSCInput</Class>
+ <Args>
<Id>osc</Id>
<Port>12345</Port>
<RefreshInterval>10</RefreshInterval>
@@ -81,6 +89,12 @@
</Behavior>
<Behavior>
<Args>
+ <Id>sixaxis</Id>
+ </Args>
+ <Class>behaviors.ControllerOSC</Class>
+ </Behavior>
+ <Behavior>
+ <Args>
<Id>touchosc</Id>
</Args>
<Class>behaviors.TouchOSC</Class>
@@ -265,10 +279,24 @@
<Behavior>
<Class>behaviors.BehaviorChain</Class>
<Args>
+ <Id>mousechaser2</Id>
+ <Inputs>
+ <Id>osc2</Id>
+ </Inputs>
+ <ChainedBehaviors>
+ <Id>sixaxis</Id>
+ <Id>singleframe</Id>
+ </ChainedBehaviors>
+ <RenderToScreen>True</RenderToScreen>
+ <Mapper>gaussmap</Mapper>
+ </Args>
+ </Behavior>
+ <Behavior>
+ <Class>behaviors.BehaviorChain</Class>
+ <Args>
<Id>mousechaser</Id>
<Inputs>
<!--Id>followmouse</Id-->
- <Id>tcp</Id>
<Id>osc</Id>
</Inputs>
<ChainedBehaviors>
diff --git a/config/Jennifer.xml b/config/Jennifer.xml
index e6cfc40..179c462 100644
--- a/config/Jennifer.xml
+++ b/config/Jennifer.xml
@@ -98,6 +98,7 @@
<Id>colorbars</Id>
<Inputs>
<Id>pygamekey</Id>
+ <Id>udp</Id>
</Inputs>
<ChainedBehaviors>
<Id>colorzones</Id>
diff --git a/config/Kuan.xml b/config/Kuan.xml
index c85cb75..7d76ed4 100644
--- a/config/Kuan.xml
+++ b/config/Kuan.xml
@@ -82,6 +82,15 @@
<Timeout>2000</Timeout>
</Args>
</Behavior>
+ <!--Behavior>
+ <Class>behaviors.ModifyParam</Class>
+ <Args>
+ <Id>swaposc</Id>
+ <ParamType>Sensor</ParamType>
+ <ParamName>Oscillate</ParamName>
+ <ParamOp>not {val}</ParamOp>
+ </Args>
+ </Behavior-->
<Behavior>
<Class>behaviors.MITDoors</Class>
<Args>
diff --git a/config/SmootWindTest.xml b/config/SmootWindTest.xml
index 6b74450..f6e7a97 100755
--- a/config/SmootWindTest.xml
+++ b/config/SmootWindTest.xml
@@ -53,6 +53,14 @@
<RefreshInterval>1</RefreshInterval>
</Args>
</InputElement>
+ <InputElement>
+ <Class>inputs.PygameInput</Class>
+ <Args>
+ <Id>pygamekey</Id>
+ <RefreshInterval>10</RefreshInterval>
+ <Keyboard>True</Keyboard>
+ </Args>
+ </InputElement>
<InputElement>
<Class>inputs.HTMLInput</Class>
<Args>
@@ -141,8 +149,8 @@
<Args>
<Id>smootwind</Id>
<Inputs>
- <Id>weatherinput</Id>
- </Inputs>
+ <Id>pygamekey</Id>
+ </Inputs>
</Args>
</Behavior>
<Behavior>
diff --git a/inputs/OSCInput.py b/inputs/OSCInput.py
index f867fb5..ba1e035 100644
--- a/inputs/OSCInput.py
+++ b/inputs/OSCInput.py
@@ -7,8 +7,8 @@ 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)
+ self.server = liblo.Server(PORT)
+ self.server.add_method(None,None, self.fallback)
# except liblo.ServerError, err:
# main_log.error(str(err))
diff --git a/inputs/PygameInput.py b/inputs/PygameInput.py
index 18f463d..414adf3 100644
--- a/inputs/PygameInput.py
+++ b/inputs/PygameInput.py
@@ -23,7 +23,10 @@ class PygameInput(Input):
if event.key == 27:
self.die()
if self['Keyboard']:
- self.respond({'Key': event.key, 'KeyChar': chr(event.key)})
+ try:
+ self.respond({'Key': event.key, 'KeyChar': chr(event.key)})
+ except:
+ self.respond({'Key': event.key})
return
else:
pygame.event.post(event)
diff --git a/pixelcore/Pixel.py b/pixelcore/Pixel.py
index 6ff2e67..4e7cfce 100644
--- a/pixelcore/Pixel.py
+++ b/pixelcore/Pixel.py
@@ -1,4 +1,5 @@
import util.ColorOps as color
+from logger import main_log
import pdb
from pixelevents.StepEvent import *
import util.TimeOps as timeops
@@ -57,7 +58,8 @@ class Pixel:
if eventResult != None:
scaledEvent = color.multiplyColor(eventResult,scale)
if (scaledEvent[0] + scaledEvent[1] + scaledEvent[2]) < 5:
- deadEvents.append(eventObj)
+ pass
+ #deadEvents.append(eventObj)
else:
colors.append(scaledEvent)
else:
diff --git a/renderers/IndoorRenderer.py b/renderers/IndoorRenderer.py
index 531a732..710ca43 100644
--- a/renderers/IndoorRenderer.py
+++ b/renderers/IndoorRenderer.py
@@ -21,7 +21,7 @@ class IndoorRenderer(Renderer):
for stripId in stripsInPowerSupply:
self.stripLocations[stripId] = (ip, \
stripsInPowerSupply[stripId])
-
+ self.broadSocket = network.getBroadcastSocket(6038)
def render(self, lightSystem, currentTime=timeops.time()):
#try:
for pixelStrip in lightSystem.pixelStrips:
@@ -32,4 +32,9 @@ class IndoorRenderer(Renderer):
self.sockets[ip] = network.getConnectedSocket(ip,sock_port)
packet = composer.composePixelStripPacket(pixelStrip, port, currentTime)
self.sockets[ip].send(packet, 0x00)
+
+ synchPacket = composer.composeSynchPacket()
+ #pdb.set_trace()
+ #self.broadSocket.sendto(synchPacket, ('10.0.32.255', 6038))
+
diff --git a/util/NetworkOps.py b/util/NetworkOps.py
index 8894b78..3ece763 100644
--- a/util/NetworkOps.py
+++ b/util/NetworkOps.py
@@ -8,3 +8,9 @@ def getConnectedSocket(ip,port):
except Exception as inst:
main_log.error('Network down. All network based renderers and sensors will not function.',
inst)
+
+def getBroadcastSocket(port):
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+ return s
diff --git a/util/PacketComposition.py b/util/PacketComposition.py
index 7b4fe95..75ef917 100644
--- a/util/PacketComposition.py
+++ b/util/PacketComposition.py
@@ -5,7 +5,7 @@ PORTOUT = 0x0108
UNI = 0
import pdb
import util.TimeOps as timeops
-argDict = {'flags': 0, 'startcode': 0, 'pad':0}
+argDict = {'flags': 0, 'startcode': 0x0fff, 'pad':0}
def composePixelStripData(pixelStrip,currentTime=timeops.time()):
packet = bytearray()
@@ -33,10 +33,10 @@ def memoize(f):
def cachePacketHeader(port):
packet = bytearray()
subDict = dict(argDict)
- subDict['len'] = 38500 #I have no idea why this works.
+ subDict['len'] = 150 #I have no idea why this works.
subDict['port'] = port
packet.extend(portOutPacket(subDict))
- packet.append(0x0)
+# packet.append(0x0)
return packet
def composePixelStripPacket(pixelStrip,port, currentTime):
@@ -61,10 +61,19 @@ def portOut():
def portOutPayload(argDict):
payload = bytearray()
payload.extend(struct.pack('B', argDict['port']))
+ payload.extend(struct.pack('B',0))
payload.extend(struct.pack('H', argDict['flags']))
payload.extend(struct.pack('H', argDict['len']))
payload.extend(struct.pack('H', argDict['startcode']))
return payload
+def composeSynchPacket():
+ header = bytearray()
+ header.extend(struct.pack('L', MAGIC))
+ header.extend(struct.pack('H', VERSION))
+ header.extend(struct.pack('H', 0x0109))
+ header.extend(struct.pack('L', 0))
+ header.extend(struct.pack('L', 0))
+ return header
def portOutPacket(payloadArgs):
packet = bytearray()