From 44659801073c059aeac5a992dc241648263c74b6 Mon Sep 17 00:00:00 2001 From: mdan Date: Thu, 27 Jan 2011 17:58:47 -0500 Subject: Modifies OSC configuration and behavior. --- config/6thFloorOSC.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'config/6thFloorOSC.xml') diff --git a/config/6thFloorOSC.xml b/config/6thFloorOSC.xml index 792fd0c..d3f0e6f 100644 --- a/config/6thFloorOSC.xml +++ b/config/6thFloorOSC.xml @@ -42,7 +42,7 @@ osc 12345 - 10 + 20 -- cgit v1.2.3 From ef1abfa913498e02a4ece3be4be45d2f03e47d05 Mon Sep 17 00:00:00 2001 From: rcoh Date: Fri, 28 Jan 2011 15:19:21 -0500 Subject: Lots of stuff INCOMPLETE --- LightInstallation.py | 2 +- behaviors/ExpandingColorZones.py | 7 ++++--- behaviors/MITDoors.py | 1 + behaviors/RiseFall.py | 6 ++++++ behaviors/SmootWind.py | 24 +++++++++++++++++------- config/6thFloorOSC.xml | 30 +++++++++++++++++++++++++++++- config/Jennifer.xml | 1 + config/Kuan.xml | 9 +++++++++ config/SmootWindTest.xml | 12 ++++++++++-- inputs/OSCInput.py | 4 ++-- inputs/PygameInput.py | 5 ++++- pixelcore/Pixel.py | 4 +++- renderers/IndoorRenderer.py | 7 ++++++- util/NetworkOps.py | 6 ++++++ util/PacketComposition.py | 15 ++++++++++++--- 15 files changed, 111 insertions(+), 22 deletions(-) (limited to 'config/6thFloorOSC.xml') 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 @@ -37,6 +37,14 @@ + + inputs.OSCInput + + osc2 + 1234 + 10 + + inputs.OSCInput @@ -79,6 +87,12 @@ False + + + sixaxis + + behaviors.ControllerOSC + touchosc @@ -262,13 +276,27 @@ + + behaviors.BehaviorChain + + mousechaser2 + + osc2 + + + sixaxis + singleframe + + True + gaussmap + + behaviors.BehaviorChain mousechaser - tcp osc 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 @@ colorbars pygamekey + udp colorzones 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 @@ 2000 + behaviors.MITDoors 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 @@ 1 + + inputs.PygameInput + + pygamekey + 10 + True + + inputs.HTMLInput @@ -141,8 +149,8 @@ smootwind - weatherinput - + pygamekey + 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() -- cgit v1.2.3 From bd1119e82ff9f4bd8835ed6d3934f156a6da8b23 Mon Sep 17 00:00:00 2001 From: rcoh Date: Fri, 28 Jan 2011 16:24:21 -0500 Subject: Fixed TCPInput bug. --- config/6thFloorOSC.xml | 67 +++++++++++++++++++++++++++++++++++++++++--------- inputs/TCPInput.py | 14 ++++++++++- 2 files changed, 69 insertions(+), 12 deletions(-) (limited to 'config/6thFloorOSC.xml') diff --git a/config/6thFloorOSC.xml b/config/6thFloorOSC.xml index 2215688..aa7a07d 100644 --- a/config/6thFloorOSC.xml +++ b/config/6thFloorOSC.xml @@ -60,14 +60,14 @@ 10 - + inputs/MouseFollower.xml @@ -79,15 +79,60 @@ - - behaviors.EchoBehavior - - echo - 0 - False - - - + + behaviors.EchoBehavior + + echo + 0 + False + + + + behaviors.BehaviorChain + + moveanddecay + + tcp + + + move + decay + + True + gaussmap + + + + behaviors.MoveBehavior + + move + 3 + 3 + + + + behaviors.MobileShakeBehavior + + mobileshake + 3 + + + + behaviors.BehaviorChain + + shakeanddecay + + tcp + + + mobileshake + slowdecay + + True + simplemap + + + sixaxis diff --git a/inputs/TCPInput.py b/inputs/TCPInput.py index 17ea7e6..51a6677 100644 --- a/inputs/TCPInput.py +++ b/inputs/TCPInput.py @@ -4,6 +4,7 @@ from operationscore.Input import * import socket, json, time import logging as main_log import string +from select import select class TCPInput(Input): """TCPInput is a input to receive input on a TCP port. In its current incarnation, it parses @@ -20,9 +21,20 @@ class TCPInput(Input): self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind((self.HOST, self.PORT)) self.sock.listen(1) - (self.conn, self.address) = self.sock.accept() + + isreadable=select([self.sock],[],[], 0)[0] + self.conn = None + if isreadable: + (self.conn, self.address) = self.sock.accept() def sensingLoop(self): + if self.conn == None: + isreadable=select([self.sock],[],[], 0)[0] + if isreadable: + (self.conn, self.address) = self.sock.accept() + else: + return + data = self.conn.recv(self.BUFFER_SIZE) main_log.debug('Incoming data', data) -- cgit v1.2.3 From e34b4dbf8ba67c5374e43bea8b469172025a9163 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 29 Jan 2011 18:50:58 -0800 Subject: 6thFloorOsc commented out renderer to lights, default LightInstallation config and profile.py for OSC :) --- LightInstallation.py | 2 +- Profile.py | 2 +- config/6thFloorOSC.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'config/6thFloorOSC.xml') diff --git a/LightInstallation.py b/LightInstallation.py index c1f01e8..41cc925 100755 --- a/LightInstallation.py +++ b/LightInstallation.py @@ -193,7 +193,7 @@ class LightInstallation(object): def main(argv): if len(argv) == 1: - l = LightInstallation('LightInstallationConfig.xml') + l = LightInstallation('config/6thFloor.xml') else: l = LightInstallation(argv[1]) diff --git a/Profile.py b/Profile.py index 2f180c9..2f796b2 100644 --- a/Profile.py +++ b/Profile.py @@ -1,4 +1,4 @@ import cProfile from LightInstallation import main -command = """main(['', 'config/6thFloor.xml'])""" +command = """main(['', 'config/6thFloorOSC.xml'])""" cProfile.runctx(command, globals(), locals(), filename="smootlight.profile") diff --git a/config/6thFloorOSC.xml b/config/6thFloorOSC.xml index cb1fd10..ca99b2b 100644 --- a/config/6thFloorOSC.xml +++ b/config/6thFloorOSC.xml @@ -29,9 +29,9 @@ - + renderers/Pygame.xml -- cgit v1.2.3 From 482a94fd48627153b923931d6ff21ebf57fad6f7 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 29 Jan 2011 19:34:24 -0800 Subject: removed duplicate OSC server--one is much faster. Building more into custom input would probably be even faster. --- config/6thFloorOSC.xml | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) (limited to 'config/6thFloorOSC.xml') diff --git a/config/6thFloorOSC.xml b/config/6thFloorOSC.xml index ca99b2b..05c2973 100644 --- a/config/6thFloorOSC.xml +++ b/config/6thFloorOSC.xml @@ -40,19 +40,19 @@ inputs.OSCInput - osc2 + osc 1234 10 - + inputs.PygameInput @@ -110,7 +110,7 @@ 3 - + sixaxis @@ -188,7 +188,7 @@ {y}<0 or {y}>200 - + + behaviors.AllPixelsLeft @@ -245,7 +245,7 @@ allpixels - + + behaviors.BehaviorChain - mousechaser2 + SixaxisChase - osc2 + osc sixaxis @@ -339,9 +339,8 @@ behaviors.BehaviorChain - mousechaser + OSCTouchChase - osc -- cgit v1.2.3