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

Committer:
tylerjw
Date:
Sun Dec 09 08:48:30 2012 +0000
Revision:
9:4debfbc1fb3e
Parent:
8:13360ec824a7
Child:
10:b13416bbb4cd
not tested... standard SD card implementation, not working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tylerjw 0:ce5f06c3895f 1 #include "mbed.h"
tylerjw 7:d8ecabe16c9e 2 #include "rtos.h"
tylerjw 9:4debfbc1fb3e 3 #include "SDFileSystem.h"
tylerjw 9:4debfbc1fb3e 4 //#include "MODSERIAL.h"
tylerjw 0:ce5f06c3895f 5
tylerjw 0:ce5f06c3895f 6 Serial pc(USBTX, USBRX);
tylerjw 7:d8ecabe16c9e 7
tylerjw 7:d8ecabe16c9e 8 float test_lat = 39.943039;
tylerjw 7:d8ecabe16c9e 9 float test_long = -104.978226;
tylerjw 7:d8ecabe16c9e 10
tylerjw 7:d8ecabe16c9e 11 // Connect the TX of the GPS module to p10 RX input
tylerjw 9:4debfbc1fb3e 12 Serial gps(NC, p14);
tylerjw 9:4debfbc1fb3e 13
tylerjw 9:4debfbc1fb3e 14 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
tylerjw 7:d8ecabe16c9e 15
tylerjw 7:d8ecabe16c9e 16 DigitalOut irq_led(LED1);
tylerjw 7:d8ecabe16c9e 17
tylerjw 8:13360ec824a7 18 Semaphore newlines(0);
tylerjw 0:ce5f06c3895f 19
tylerjw 7:d8ecabe16c9e 20 // Called everytime a new character goes into
tylerjw 7:d8ecabe16c9e 21 // the RX buffer. Test that character for \n
tylerjw 7:d8ecabe16c9e 22 // Note, rxGetLastChar() gets the last char that
tylerjw 7:d8ecabe16c9e 23 // we received but it does NOT remove it from
tylerjw 7:d8ecabe16c9e 24 // the RX buffer.
tylerjw 9:4debfbc1fb3e 25 char gps_buffer[1024];
tylerjw 9:4debfbc1fb3e 26 int buffer_counter = 0;
tylerjw 9:4debfbc1fb3e 27 int newline_pos = 0;
tylerjw 9:4debfbc1fb3e 28
tylerjw 9:4debfbc1fb3e 29 void rxCallback()
tylerjw 7:d8ecabe16c9e 30 {
tylerjw 9:4debfbc1fb3e 31 char c;
tylerjw 9:4debfbc1fb3e 32 while(gps.readable()) {
tylerjw 9:4debfbc1fb3e 33 c = gps.getc();
tylerjw 9:4debfbc1fb3e 34 gps_buffer[buffer_counter++] = c;
tylerjw 9:4debfbc1fb3e 35 if(buffer_counter == 1024)
tylerjw 9:4debfbc1fb3e 36 {
tylerjw 9:4debfbc1fb3e 37 error("Buffer Overflow");
tylerjw 9:4debfbc1fb3e 38 buffer_counter = 1023;
tylerjw 9:4debfbc1fb3e 39 }
tylerjw 9:4debfbc1fb3e 40 if(c == '\n') {
tylerjw 9:4debfbc1fb3e 41 newlines.release();
tylerjw 9:4debfbc1fb3e 42 newline_pos = buffer_counter - 1;
tylerjw 9:4debfbc1fb3e 43 irq_led = !irq_led;
tylerjw 9:4debfbc1fb3e 44 }
tylerjw 9:4debfbc1fb3e 45 }
tylerjw 9:4debfbc1fb3e 46 }
tylerjw 9:4debfbc1fb3e 47
tylerjw 9:4debfbc1fb3e 48 void gps_getline(char *buffer, int size)
tylerjw 9:4debfbc1fb3e 49 {
tylerjw 9:4debfbc1fb3e 50 __disable_irq();
tylerjw 9:4debfbc1fb3e 51 strncpy(buffer, gps_buffer, newline_pos+1);
tylerjw 9:4debfbc1fb3e 52 memmove(gps_buffer,gps_buffer+(newline_pos+1), (buffer_counter - newline_pos - 1));
tylerjw 9:4debfbc1fb3e 53 buffer_counter = (buffer_counter - newline_pos - 1);
tylerjw 9:4debfbc1fb3e 54 newline_pos = 0;
tylerjw 9:4debfbc1fb3e 55 __enable_irq();
tylerjw 7:d8ecabe16c9e 56 }
tylerjw 7:d8ecabe16c9e 57
tylerjw 7:d8ecabe16c9e 58 void gps_thread(void const *args)
tylerjw 7:d8ecabe16c9e 59 {
tylerjw 7:d8ecabe16c9e 60 char buffer[512];
tylerjw 9:4debfbc1fb3e 61 int counter = 0;
tylerjw 9:4debfbc1fb3e 62 int file_counter = 0;
tylerjw 9:4debfbc1fb3e 63 char filename[21];
tylerjw 9:4debfbc1fb3e 64
tylerjw 9:4debfbc1fb3e 65 DigitalOut gps_led(LED2);
tylerjw 7:d8ecabe16c9e 66
tylerjw 7:d8ecabe16c9e 67 gps.baud(4800);
tylerjw 6:204487243310 68 pc.baud(9600);
tylerjw 9:4debfbc1fb3e 69
tylerjw 9:4debfbc1fb3e 70 //gps.autoDetectChar('\n');
tylerjw 9:4debfbc1fb3e 71 gps.attach(&rxCallback, Serial::RxIrq);
tylerjw 9:4debfbc1fb3e 72
tylerjw 9:4debfbc1fb3e 73 gps_led = 1;
tylerjw 9:4debfbc1fb3e 74
tylerjw 9:4debfbc1fb3e 75 sprintf(filename, "/sd/hab/gps%03d.log", file_counter++);
tylerjw 9:4debfbc1fb3e 76 pc.printf("Opening: %s\r\n", filename);
tylerjw 9:4debfbc1fb3e 77
tylerjw 9:4debfbc1fb3e 78 mkdir("/sd/hab", 0777);
tylerjw 9:4debfbc1fb3e 79
tylerjw 9:4debfbc1fb3e 80 FILE *gps_file = fopen(filename, "w");
tylerjw 9:4debfbc1fb3e 81 if(gps_file == NULL) {
tylerjw 9:4debfbc1fb3e 82 error("Could not open file for write\n");
tylerjw 9:4debfbc1fb3e 83 }
tylerjw 9:4debfbc1fb3e 84 pc.puts("File Open!\r\n");
tylerjw 9:4debfbc1fb3e 85 gps_led = 0;
tylerjw 9:4debfbc1fb3e 86
tylerjw 7:d8ecabe16c9e 87
tylerjw 7:d8ecabe16c9e 88 while(true) {
tylerjw 8:13360ec824a7 89 newlines.wait(); // wait for next line
tylerjw 7:d8ecabe16c9e 90 memset(buffer, 0, 512);
tylerjw 9:4debfbc1fb3e 91 gps_getline(buffer, 512);
tylerjw 7:d8ecabe16c9e 92 pc.puts(buffer);
tylerjw 9:4debfbc1fb3e 93 fputs(buffer, gps_file);
tylerjw 9:4debfbc1fb3e 94
tylerjw 9:4debfbc1fb3e 95 counter++;
tylerjw 9:4debfbc1fb3e 96 if(counter >= 20) {
tylerjw 9:4debfbc1fb3e 97 sprintf(filename, "/sd/hab/gps%03d.log", file_counter++);
tylerjw 9:4debfbc1fb3e 98 pc.printf("Opening: %s\r\n", filename);
tylerjw 9:4debfbc1fb3e 99 freopen(filename, "w", gps_file);
tylerjw 9:4debfbc1fb3e 100 counter = 0;
tylerjw 9:4debfbc1fb3e 101 }
tylerjw 0:ce5f06c3895f 102 }
tylerjw 7:d8ecabe16c9e 103 }
tylerjw 7:d8ecabe16c9e 104
tylerjw 7:d8ecabe16c9e 105 int main()
tylerjw 7:d8ecabe16c9e 106 {
tylerjw 9:4debfbc1fb3e 107 Thread thread(gps_thread, NULL, osPriorityHigh);
tylerjw 9:4debfbc1fb3e 108
tylerjw 7:d8ecabe16c9e 109 while(true);
tylerjw 0:ce5f06c3895f 110 }