def __init__(self, parent): """ Perform preliminary init of all child classes, DB, etc. """ # make sure GPSd is running. init the gpsd class, make sure were getting data # connect to the OBD interface, init it, get some sample data # init the database or flat file, wherever we put our data # assuming both of those worked, return true/ok/whatever # setup a filename for this data dt = datetime.now() s = dt.strftime("%Y-%m-%d_%H-%M-%S") self.DATA_FILE_NAME = "obdlog_" + s + ".csv" # set data path if self.DATA_FILE_PATH == "": self.DATA_FILE_PATH = os.path.expanduser("~") # intialize SunSPOT self.accelQueue = TuxTruck_Thread_Queue(3) self.accel = TuxTruck_OBDlog_SunSPOT_Reader(self, self.accelQueue, self.SUNSPOT_PORT) # initialize the GPS self.gpsQueue = TuxTruck_Thread_Queue(3) self.gps = TuxTruck_OBDlog_GPS(self, self.gpsQueue) # initialize the OBD reader self.obdQueue = TuxTruck_Thread_Queue(3) self.obd = TuxTruck_OBDlog_OBDreader(self, self.obdQueue, self.ELMSCAN_PORT) # initialize the LCD self.lcdQueue = TuxTruck_Thread_Queue(3) if os.path.exists(self.LCD_PORT) and os.access(self.LCD_PORT, os.W_OK): self.lcd = TuxTruck_OBDlog_LCD(self, self.lcdQueue, self.LCD_PORT) else: print "LCD Port " + self.LCD_PORT + " does not exist or is not writable."
class TuxTruck_OBDlog_Main(): """ Master class that handles all OBD logging functions. """ # # CONFIGURATION # ELMSCAN_PORT = "/dev/ttyS0" # path to the serial port for the ElmScan #SUNSPOT_PORT = "/dev/ttyACM0" # path to the SunSPOT SUNSPOT_PORT = "/tmp/accelfifo" # path to the SunSPOT # DEBUG LCD_PORT = "/dev/ttyUSB0" # path to the LCD display DATA_INTERVAL = 0.5 # interval at which to collect data, in seconds (float) DATA_FILE_NAME = "" # what to call the data file DATA_FILE_PATH = "/home/jantman/" # where to put the data file # tell threads to die if killed... KILLED = False # Queues gpsQueue = None # queue for the GPSd data obdQueue = None # queue for the OBD data accelQueue = None # queue for the accelerometer (SunSPOT) data lcdQueue = None # queue going to LCD # data source objects gps = None # the TuxTruck_OBDlog_gpsd object obd = None # the TuxTruck_OBDlog_obd object accel = None # the TuxTruck_OBDlog_accel object # output objects lcd = None # the CrystalFontz LCD thread def __init__(self, parent): """ Perform preliminary init of all child classes, DB, etc. """ # make sure GPSd is running. init the gpsd class, make sure were getting data # connect to the OBD interface, init it, get some sample data # init the database or flat file, wherever we put our data # assuming both of those worked, return true/ok/whatever # setup a filename for this data dt = datetime.now() s = dt.strftime("%Y-%m-%d_%H-%M-%S") self.DATA_FILE_NAME = "obdlog_" + s + ".csv" # set data path if self.DATA_FILE_PATH == "": self.DATA_FILE_PATH = os.path.expanduser("~") # intialize SunSPOT self.accelQueue = TuxTruck_Thread_Queue(3) self.accel = TuxTruck_OBDlog_SunSPOT_Reader(self, self.accelQueue, self.SUNSPOT_PORT) # initialize the GPS self.gpsQueue = TuxTruck_Thread_Queue(3) self.gps = TuxTruck_OBDlog_GPS(self, self.gpsQueue) # initialize the OBD reader self.obdQueue = TuxTruck_Thread_Queue(3) self.obd = TuxTruck_OBDlog_OBDreader(self, self.obdQueue, self.ELMSCAN_PORT) # initialize the LCD self.lcdQueue = TuxTruck_Thread_Queue(3) if os.path.exists(self.LCD_PORT) and os.access(self.LCD_PORT, os.W_OK): self.lcd = TuxTruck_OBDlog_LCD(self, self.lcdQueue, self.LCD_PORT) else: print "LCD Port " + self.LCD_PORT + " does not exist or is not writable." def run(self): """ Once init is finished, start logging... """ DATA_FILE = open(self.DATA_FILE_PATH + "/" + self.DATA_FILE_NAME, "w") self.accel.start() self.gps.start() self.obd.start() if self.lcd != None: self.lcd.start() # every self.DATA_INTERVAL seconds, write the data to the data sink while True: try: a = None g = None o = None while a == None or g == None or o == None: if a == None: a = self.accelQueue.pop() if g == None: g = self.gpsQueue.pop() if o == None: o = self.obdQueue.pop() DATA_FILE.write(a + "," + g + "," + o) print "Accel=" + a + "\nGPS=" + g + "\nOBD=" + o + "\n=========\n" # DEBUG self.lcdQueue.append(a + "," + g + "," + o) time.sleep(self.DATA_INTERVAL) except KeyboardInterrupt: self.KILLED = True