#!/usr/bin/python #UDP listener import signal,sys def signal_handler(signal, frame): insock.close() print "tomorrowtheground: interrupted" sys.exit(0) signal.signal(signal.SIGINT, signal_handler) from latLng import * from layers import * from xml2obj import * if len(sys.argv)<2: print "usage: tomorrowtheground {configfile}" doc=xml2obj(open(sys.argv[1])) gpslayers=[] #catch invalid xml try: for i in doc.gps.index: #catch invalid xml try: g=indexlayer(i.file,i.ll1,i.ll2) for t in i.trigger: g.triggers.append(trigger(int(t.id),t.command,t.param)) gpslayers.append(g) except: print "error parsing xml index entry" except: print "no index layers found" #catch invalid xml try: for i in doc.gps.scale: #catch invalid xml try: g=scalelayer(i.file,i.ll1,i.ll2) g.setcommand(i.command) gpslayers.append(g) except: print "error parsing xml index entry" except: print "no scale layers found" import gpspoller gpsp="" try: gpsp = GpsPoller(doc.gpsdevice) gpsp.start() except: print "gps device not found" import socket GUI_IP="127.0.0.1" GUI_PORT=5400 insock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) insock.bind( (GUI_IP,GUI_PORT) ) insock.settimeout(0.01) #non blocking PD_IP="127.0.0.1" PD_PORT=5401 outsock = socket.socket( socket.AF_INET,socket.SOCK_DGRAM ) pos=latLng() posChanged=False while True: data="" try: data, addr = insock.recvfrom(128) pos.parse(data) posChanged=True except: nothing=None if gpsp!="": check=gpsp.check() if check!=False: pos=latLng(check[0],check[1]) posChanged=True if posChanged: posChanged=False for layer in gpslayers: r=layer.checkcoord(pos) #returns a message or None if r!=None: #pd needs \n at end of message outsock.sendto( str(r[0])+' '+str(r[1])+'\n', (PD_IP, PD_PORT) )