import sys import socket import struct import numpy as np if len(sys.argv) > 1: HOST = sys.argv[1] else: HOST = "127.0.0.2" PORT = 43949 BUFF = 2**2 FPS = 250 SEC = 4 MIN = 0 QUERY = 1 INFO = 2 START = 3 STOP = 4 DATA = 5 if struct.calcsize('L') == 4: CMD = 'L' elif struct.calcsize('I') == 4: CMD = 'I' else: raise OSError,'Cannot find 4 byte unsigned int for your OS' pack = lambda fmt,*vals : struct.pack( '!'+fmt, *vals) unpack = lambda fmt,str : struct.unpack( '!'+fmt, str) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST,PORT)) def get( s, fmt ): "Read data from socket based on format string, and parse it accordingly" N = struct.calcsize(fmt) buf = '' while len(buf) < N: buf += s.recv(N-len(buf)) return unpack(fmt,buf) # send QUERY s.send( pack( CMD, QUERY ) ) # recv INFO c = get( s, CMD )[0]; assert c == INFO N = get( s, CMD )[0] names = [] for _ in xrange(N): L = get( s, CMD )[0] names.append( get( s, '%ds' % L )[0] ) print names # send START s.send( pack( CMD, START ) ) # recv DATA dat = [] for _ in xrange( ( MIN * 60 + SEC ) * FPS ): c = get( s, CMD )[0]; assert c == DATA N = get( s, CMD )[0]; assert N == len(names) d = get( s, '%ds' % (4 * N) )[0] dat.append( np.frombuffer(d, dtype=np.float32) ) #print np.frombuffer(d, dtype=np.float32) dat = np.vstack(dat) dt = np.diff(dat[:,0]) dtj = (dt > 5e-3).nonzero()[0] print np.array(zip(dtj,dt[dtj])) s.send( pack( CMD, STOP ) ) s.close()