#! /usr/bin/python import os from gps import * from time import * import time import threading import socket import subprocess import fcntl import struct import datetime gpsd = None #seting the global variable class GpsPoller(threading.Thread): def __init__(self): threading.Thread.__init__(self) global gpsd #bring it in scope gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info self.current_value = None self.running = True #setting the thread running to true def run(self): global gpsd while gpsp.running: gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer def logData(data): time = datetime.datetime.now() fileName = "/home/dsu/data.csv" logFile = open(fileName,"a") # logFile.write(time.isoformat() +",") logFile.write(data+"\n") logFile.close() def recovergpsd(): logData("Trying to recover gpsd service...") process = subprocess.Popen(["service gpsd restart"], stdout = subprocess.PIPE) out, err = process.communicate() logData(out) def isGpsRunning(): process = subprocess.Popen(["ps", "-A"], stdout = subprocess.PIPE) out, err = process.communicate() if("gpsd" in out): return True else: logData("gpsd service unavailable") return False def sendPacket(data): port = 81 ip = "127.0.0.1" packet = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) packet.sendto(data,(ip,port)) if __name__ == '__main__': gpsp = GpsPoller() # create the thread try: loopCount = 0 #how many times did we have to try before we got valid data? gpsp.start() # start it up while(True): time.sleep(2) #wait for a wee bit before polling again if isGpsRunning(): currentTime = datetime.datetime.now() #determine the current latitude and store it latitude = gpsd.fix.latitude if( latitude > 0 ): latitude = str(abs(latitude)) + " N" else: latitude = str(abs(latitude)) + " S" #same story with longtitude longitude = gpsd.fix.longitude if( longitude > 0 ): longitude = str(abs(longitude)) + " E" else: longitude = str(abs(longitude)) + " W" #what's the altitude? altFt = str(gpsd.fix.altitude * 3.28084) + " ft" if ("nan" not in str(altFt)): print("Time:\t" + " " + str(currentTime.isoformat())) print("Latitude:\t" + " " + str(latitude)) print("Longitude:\t" + " " + str(longitude)) print("Altitude:\t" + " " + str(altFt)) gpsData = str(gpsd.fix.latitude) + "," + str(gpsd.fix.longitude) logData(str(gpsData)) #gpsData = str(gpsd.fix.latitude) + ",\n" + str(gpsd.fix.longitude)+",\n"+str(loopCount)+",\n"+str(gpsd.fix.time) #logData(str(gpsData)+str(gpsd.fix.altitude)+",\n"+str(gpsd.fix.eps)+",\n"+str(gpsd.fix.epx)+",\n"+str(gpsd.fix.epv)+",\n"+str(gpsd.fix.ept)+",\n"+str(gpsd.fix.speed)+",\n"+str(gpsd.fix.climb)) else: print("Time: \t" + str(currentTime.isoformat())) print("Unable to obtain GPS lock") else: recovergpsd() except (KeyboardInterrupt, SystemExit): #when you press ctrl+c gpsp.running = False print ("Closing down...") gpsp.join() # wait for the thread to finish what it's doing