diff --git a/clients/cellular.py b/clients/cellular.py new file mode 100644 index 0000000..043c3cb --- /dev/null +++ b/clients/cellular.py @@ -0,0 +1,142 @@ +# Client program "cellular" + +from socket import * +import sys +import time +from math import * +from random import randint + +# Set the socket parameters +local_port = 5001 + +# UDP webserver port to bypass frameserver for testing +remote_port = 4422 +# port to frameserver +#remote_port = 4321 + +# TODO: autodetect interface address for remote application +outgoing_if = "127.0.0.1" +remote_host = "127.0.0.1" + +# udp is the default for DGRAM +UDPSock = socket(AF_INET, SOCK_DGRAM) + +# we MUST bind, otherwise python will choose a different port for each +# connection +UDPSock.bind((outgoing_if, local_port)) + +# we will not use connections so we can keep working even if the server +# goes down or refuses connection +#UDPSock.connect((remote_host, remote_port)) + +# this is our handshake, weak certification +hash = "s2l\n<8<18 " + +alpha = chr(255) +z_buffer = chr(1) + "\n" + +# frame of 2 dimensional array holding data [r,g,b,a] +wdata = [] +# segment display, each segment holds 8 values of [r,g,b,a] +sdata = [] + +# setup window area, channels and segments +segwindows = 12 +segments = 8 # number of segments in a window (7 + period/dot/point) +width = 12 +height = 8 +segchannels = 4 # RGBA + +# timing elements +# timer will hold the elapsed time in seconds +timer = 0 +sleeptime = 5000 # milliseconds +frequency = 1000 / sleeptime # frames per second + +# function resets map to zero +def zero_wdata(): + for x in xrange(width): + wdata.append([0] * height) + for y in xrange(height): + # create an RGBA array at each location + wdata[x][y] = [0, 0, 0, 1] + +# function resets segment display +def zero_sdata(): + for s in xrange(segwindows): + sdata.append([0] * segments) + for seg in xrange(segments): + sdata[s][seg] = [0, 0, 1, 1] + +# convert [r,g,b,a] to chr string +def i2c(rgba): + return chr(int(255 * rgba[0])) + chr(int(255 * rgba[1])) + chr(int(255 * rgba[2])) + chr(int(255 * rgba[3])) + +# function sends wdata and sdata state to server +def send_update(): + #zero out the data buffer + data = hash + data = data + z_buffer + + # write frame data + for y in xrange(height): + for x in xrange(width): + data = data + i2c( wdata[x][y] ) + data = data + "\n" + + # write segment window displays + for s in xrange(segwindows): + for seg in xrange(segments): + # I don't think I understand what the 3 channels are... + for sc in xrange(segchannels): + data = data + i2c( sdata[s][seg] ) + data = data + "\n" + + print data + + # send the data packet to remote host + UDPSock.sendto(data,(remote_host,remote_port)) + +# clear map +zero_wdata() +zero_sdata() + +# set start seed +# get random location +rx = randint(0, width - 1) +ry = randint(0, height - 1) +wdata[rx][ry] = [1,0,0,0.5] + +send_update() + +exit() + +# build loop here +time.sleep(sleeptime/1000) + +# old code below ... +# keep to compare for now + +t = 0 +if True: + #zero out the data buffer + data = hash + data += z_buffer + for i in range(0,width): + for j in range(0,height): + pixel = 0.5+0.5*sin(2*pi*(float(i+1)/width)+t*frequency)*sin(2*pi*(float(j+1)/height)+t*frequency) + data = data + chr(int(255*pixel)) + alpha + data = data + "\n" + for i in range(0,segwindows): + for j in range(0,segments): + for a in range(0,segchannels): + val = chr( 127 + int(128*sin(2*pi*(1+i)*(1+j)*(1+a)*t*frequency/200))) + data += val + val + val + data += "\n" + t+=1 + + print data + UDPSock.sendto(data,(remote_host,remote_port)) + +# close socket +UDPSock.close()