Generation 3 of the Harp project

Dependencies:   Servo TMP36 GZ buffered-serial1 chan_fatfs_sd nmea_parser watchdog mbed-rtos mbed

Fork of HARP2 by Tyler Weaver

Revision:
13:db6af0620264
Parent:
12:0d943d69d3ec
Child:
14:dce4d8c29b17
--- a/main.cpp	Tue Dec 11 23:57:13 2012 +0000
+++ b/main.cpp	Wed Dec 12 16:01:30 2012 +0000
@@ -16,27 +16,89 @@
 BufferedSerial gps(NC, p14);
 AnalogIn gps_battery(p20);
 
-#define FSS_DBG
+typedef struct {
+    char    line[80];
+} gps_line;
+MemoryPool<gps_line, 16> mpool_gps_line;
+Queue<gps_line, 16> queue_gps_line;
+
+typedef struct {
+    float gps_battery; // gps battery voltage
+} sensor_line;
+MemoryPool<sensor_line, 16> mpool_sensor_line;
+Queue<sensor_line, 16> queue_sensor_line;
 
 void gps_thread(void const *args)
 {
     char buffer[80];
-    FATFS fs;
-    FIL fp;
 
     DigitalOut gps_led(LED4);
 
     gps.baud(4800);
-    
-    f_mount(0, &fs);
-    f_open(&fp, "0:gps.txt", FA_CREATE_ALWAYS | FA_WRITE);
 
     while(true) {
         gps.read_line(buffer);
         gps_led = !gps_led;
         pc.puts(buffer);
-        f_puts(buffer, &fp);
-        f_sync(&fp);
+        // send to log...
+        gps_line *message = mpool_gps_line.alloc();
+        strcpy(message->line, buffer);
+        queue_gps_line.put(message);
+    }
+}
+
+void log_thread(const void *args)
+{
+    FATFS fs;
+    FIL fp_gps, fp_sensor;
+    char buffer[80];
+
+    DigitalOut log_led(LED3);
+
+    f_mount(0, &fs);
+    f_open(&fp_gps, "0:gps.txt", FA_CREATE_ALWAYS | FA_WRITE);
+    f_open(&fp_sensor, "0:sensor.txt", FA_CREATE_ALWAYS | FA_WRITE);
+    log_led = 1;
+
+    while(1) {
+        osEvent evt = queue_gps_line.get(1);
+        if (evt.status == osEventMessage) {
+            gps_line *message = (gps_line*)evt.value.p;
+
+            log_led = !log_led;
+            f_puts(message->line, &fp_gps);
+            f_sync(&fp_gps);
+            
+            mpool_gps_line.free(message);
+        }
+        
+        evt = queue_sensor_line.get(1);
+        if(evt.status == osEventMessage) {
+            sensor_line *message = (sensor_line*)evt.value.p;
+            
+            sprintf(buffer, "%f\r\n", message->gps_battery);
+            
+            mpool_sensor_line.free(message);
+        }
+    }
+}
+
+void sensor_thread(const void* args)
+{
+    while(true)
+    {
+        //get sensor line memory
+        sensor_line *message = mpool_sensor_line.alloc();
+        
+        //gps battery
+        float sample = gps_battery.read();
+        float voltage = sample*BAT_MUL*3.3;
+        message->gps_battery = voltage;
+        
+        // more sensors
+        
+        queue_sensor_line.put(message);        
+        Thread::wait(1000);
     }
 }
 
@@ -44,14 +106,9 @@
 {
     pc.baud(9600);
     Thread thread(gps_thread, NULL, osPriorityHigh);
-    
+    Thread thread2(log_thread, NULL, osPriorityNormal);
+    //Thread thread3(sensor_thread, NULL, osPriorityNormal);
+
     while(true) {
-        float sample = gps_battery.read();
-        //pc.printf("Sample: %f Volts\r\n", sample*3.3);
-        float voltage = sample*BAT_MUL*3.3;
-        //pc.printf("Battery Voltage: %f Volts\r\n", voltage);
-        float level = (voltage-BAT_EMPTY) / (BAT_RANGE);
-        //pc.printf("Battery Level: %f \r\n", level);
-        Thread::wait(1000);
     }
 }
\ No newline at end of file