Working on client -> frameserver -> ws_udp.js -> visionneuse.html stack
parent
bffff1a33a
commit
e760498b3b
|
@ -0,0 +1,11 @@
|
||||||
|
The goal is to make a nice python client library that allows us to quickly make new clients.
|
||||||
|
|
||||||
|
First goal is to get cellular.py and plasma.py to work through full stack.
|
||||||
|
|
||||||
|
plasma.py sends packets to:
|
||||||
|
frameserver, which sends packets to:
|
||||||
|
ws_udp.js, which sends it to the visionneuse.html client.
|
||||||
|
|
||||||
|
PROBLEMS:
|
||||||
|
- For some reason the cellular.py packet is not being processed by the frameserver
|
||||||
|
- When running plasma.py there is an alignment error in visionneuse.hml
|
|
@ -84,7 +84,7 @@ def i2c(rgba):
|
||||||
def send_update():
|
def send_update():
|
||||||
#zero out the data buffer
|
#zero out the data buffer
|
||||||
data = hash
|
data = hash
|
||||||
data = data + z_buffer
|
data = data + z_buffer # 12 bytes
|
||||||
|
|
||||||
# write frame data
|
# write frame data
|
||||||
for y in xrange(height):
|
for y in xrange(height):
|
||||||
|
@ -106,7 +106,7 @@ def send_update():
|
||||||
UDPSock.sendto(data,(remote_host,remote_port))
|
UDPSock.sendto(data,(remote_host,remote_port))
|
||||||
|
|
||||||
# initialize map
|
# initialize map
|
||||||
set_wdata(0,0,0)
|
set_wdata(67,67,67)
|
||||||
set_sdata(0,0,255)
|
set_sdata(0,0,255)
|
||||||
|
|
||||||
# set start seed
|
# set start seed
|
||||||
|
|
|
@ -7,6 +7,9 @@ from math import *
|
||||||
|
|
||||||
# Set the socket parameters
|
# Set the socket parameters
|
||||||
local_port = 5001
|
local_port = 5001
|
||||||
|
# direct html udp port
|
||||||
|
#remote_port = 4422
|
||||||
|
# production port
|
||||||
remote_port = 4321
|
remote_port = 4321
|
||||||
|
|
||||||
# TODO: autodetect interface address for remote application
|
# TODO: autodetect interface address for remote application
|
||||||
|
@ -26,20 +29,20 @@ UDPSock.bind((outgoing_if, local_port))
|
||||||
|
|
||||||
segmentsfile = open('segments','r')
|
segmentsfile = open('segments','r')
|
||||||
|
|
||||||
hash = "abcdefghij"
|
hash = "s2l\n<8<18 " # 10 bytes
|
||||||
|
|
||||||
alpha = chr(255)
|
alpha = chr(255)
|
||||||
|
|
||||||
z_buffer = chr(1) + "\n"
|
z_buffer = chr(1) + "\n"
|
||||||
|
|
||||||
width = 7
|
width = 12
|
||||||
height = 12
|
height = 8
|
||||||
|
|
||||||
segments = 8
|
segments = 8
|
||||||
segwidth = 12
|
segwidth = 12
|
||||||
segchannels = 4
|
segchannels = 3
|
||||||
|
|
||||||
sleeptime = 0.02
|
sleeptime = 0.2
|
||||||
t = 0
|
t = 0
|
||||||
|
|
||||||
#timer will hold the elapsed time in seconds
|
#timer will hold the elapsed time in seconds
|
||||||
|
@ -49,15 +52,22 @@ while (1):
|
||||||
#zero out the data buffer
|
#zero out the data buffer
|
||||||
data = hash
|
data = hash
|
||||||
data += z_buffer
|
data += z_buffer
|
||||||
for i in range(0,width):
|
|
||||||
|
# windows
|
||||||
for j in range(0,height):
|
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)
|
for i in range(0,width):
|
||||||
data = data + chr(int(255*pixel)) + alpha
|
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 + "\n"
|
char = chr(int(127 * pixel))
|
||||||
|
data += char + char + char + alpha
|
||||||
|
data += "\n"
|
||||||
|
|
||||||
|
# segment/text display
|
||||||
for i in range(0,segwidth):
|
for i in range(0,segwidth):
|
||||||
for j in range(0,segments):
|
for j in range(0,segments):
|
||||||
for a in range(0,segchannels):
|
for a in range(0,segchannels):
|
||||||
data += chr( 127 + int(128*sin(2*pi*(1+i)*(1+j)*(1+a)*t*frequency/200)))
|
val = 63 + int(63*sin(2*pi*(1+i)*(1+j)*t*frequency/200))
|
||||||
|
data += chr(val)
|
||||||
|
data += alpha
|
||||||
data += "\n"
|
data += "\n"
|
||||||
t+=1
|
t+=1
|
||||||
if not data:
|
if not data:
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
||||||
rgbargbargbargbargbargbargbargba
|
|
|
@ -68,7 +68,7 @@ void Server::listen()
|
||||||
|
|
||||||
|
|
||||||
// DEBUG OUTPUT RAW BUFFER DATA from packet
|
// DEBUG OUTPUT RAW BUFFER DATA from packet
|
||||||
// std::cout << recv_buf.data() << std::endl;
|
//std::cout << recv_buf.data() << std::endl;
|
||||||
|
|
||||||
// check whether this is a valid packet and discard it if it isn't
|
// check whether this is a valid packet and discard it if it isn't
|
||||||
// note, this is a very hack way of comparing strings...
|
// note, this is a very hack way of comparing strings...
|
||||||
|
@ -173,7 +173,7 @@ void Server::listen()
|
||||||
void Server::send()
|
void Server::send()
|
||||||
{
|
{
|
||||||
|
|
||||||
const int length = WIDTH*HEIGHT*CHANNELS + SEGWIDTH*SEGNUM*SEGCHANNELS;
|
const int length = 12 + HEIGHT*(WIDTH*CHANNELS+1) + SEGWIDTH*(SEGNUM*SEGCHANNELS+1);
|
||||||
static char data[length];
|
static char data[length];
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
|
@ -188,9 +188,10 @@ void Server::send()
|
||||||
{
|
{
|
||||||
for(int k = 0; k < CHANNELS; k++)
|
for(int k = 0; k < CHANNELS; k++)
|
||||||
{
|
{
|
||||||
data[i*WIDTH*CHANNELS + CHANNELS*j + k] = frame.windows[i][j][k];
|
data[i*(WIDTH*CHANNELS+1) + j*CHANNELS + k] = frame.windows[i][j][k];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
data[i*(WIDTH*CHANNELS+1) + (WIDTH*CHANNELS)] = '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < SEGWIDTH; i++)
|
for(int i = 0; i < SEGWIDTH; i++)
|
||||||
|
@ -199,10 +200,12 @@ void Server::send()
|
||||||
{
|
{
|
||||||
for(int k = 0; k < SEGCHANNELS; k++)
|
for(int k = 0; k < SEGCHANNELS; k++)
|
||||||
{
|
{
|
||||||
data[WIDTH*HEIGHT*CHANNELS +
|
data[HEIGHT*(WIDTH*CHANNELS+1) +
|
||||||
i*SEGNUM*SEGCHANNELS + SEGCHANNELS*j + k] = frame.segments[i][j][k];
|
i*(SEGNUM*SEGCHANNELS+1) + j*SEGCHANNELS + k] = frame.segments[i][j][k];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
data[HEIGHT*(WIDTH*CHANNELS+1) +
|
||||||
|
i*(SEGNUM*SEGCHANNELS+1) + (SEGNUM*SEGCHANNELS)] = '\n';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,7 +353,8 @@ void Server::console()
|
||||||
noecho();
|
noecho();
|
||||||
|
|
||||||
if(has_colors() == FALSE)
|
if(has_colors() == FALSE)
|
||||||
{ endwin();
|
{
|
||||||
|
endwin();
|
||||||
printf("Your terminal does not support color\n");
|
printf("Your terminal does not support color\n");
|
||||||
// not sure what happens here because of threads!
|
// not sure what happens here because of threads!
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -361,6 +365,7 @@ void Server::console()
|
||||||
init_pair(2,COLOR_GREEN,COLOR_BLACK);
|
init_pair(2,COLOR_GREEN,COLOR_BLACK);
|
||||||
init_pair(3,COLOR_BLUE,COLOR_BLACK);
|
init_pair(3,COLOR_BLUE,COLOR_BLACK);
|
||||||
init_pair(4,COLOR_BLACK,COLOR_WHITE);
|
init_pair(4,COLOR_BLACK,COLOR_WHITE);
|
||||||
|
|
||||||
{
|
{
|
||||||
Glib::Mutex::Lock lock(mutex_);
|
Glib::Mutex::Lock lock(mutex_);
|
||||||
consoleinit = true;
|
consoleinit = true;
|
||||||
|
@ -568,7 +573,6 @@ void Server::console_printclients()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Server::console_printstats()
|
void Server::console_printstats()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,9 +22,9 @@
|
||||||
|
|
||||||
#define WINDOWOFFSET (WIDTH*CHANNELS+1)*HEIGHT
|
#define WINDOWOFFSET (WIDTH*CHANNELS+1)*HEIGHT
|
||||||
|
|
||||||
// 8 segments per window, 12 segments per floor, RGBA
|
// 12 windows wide, 8 segment per window, RGBA
|
||||||
#define SEGNUM 8
|
|
||||||
#define SEGWIDTH 12
|
#define SEGWIDTH 12
|
||||||
|
#define SEGNUM 8
|
||||||
#define SEGCHANNELS 4
|
#define SEGCHANNELS 4
|
||||||
|
|
||||||
#define BUFLEN HEADEROFFSET+WINDOWOFFSET+(SEGNUM*SEGCHANNELS+1)*SEGWIDTH
|
#define BUFLEN HEADEROFFSET+WINDOWOFFSET+(SEGNUM*SEGCHANNELS+1)*SEGWIDTH
|
||||||
|
|
Loading…
Reference in New Issue