Code for autonomous rover for Sparkfun AVC. DataBus won 3rd in 2012 and the same code was used on Troubled Child, a 1986 Jeep Grand Wagoneer to win 1st in 2014.

Dependencies:   mbed Watchdog SDFileSystem DigoleSerialDisp

Revision:
2:fbc6e3cf3ed8
Parent:
0:a6a169de725f
Child:
23:a34af501ea89
--- a/Sensors/GPS/Sirf3.cpp	Tue May 28 13:58:35 2013 +0000
+++ b/Sensors/GPS/Sirf3.cpp	Thu Jun 06 13:40:23 2013 +0000
@@ -6,7 +6,6 @@
 Sirf3::Sirf3(PinName tx, PinName rx):
     serial(tx, rx)
 {
-    setBaud(4800);
     enable();
 }
 
@@ -28,11 +27,13 @@
 void Sirf3::enable(void)
 {
     reset_available();
+    setBaud(4800);
     serial.attach(this, &Sirf3::recv_handler, Serial::RxIrq);
 }
 
 void Sirf3::disable(void)
 {
+    setBaud(4800);
     serial.attach(NULL, Serial::RxIrq);
 }
 
@@ -41,8 +42,13 @@
  */
 void Sirf3::enableVerbose(void)
 {
+    setBaud(4800);
     gsaMessage(true);
+    ggaMessage(true);
+    gllMessage(false);
     gsvMessage(true);
+    rmcMessage(true);
+    vtgMessage(false);
 }
 
 /**
@@ -50,8 +56,27 @@
  */
 void Sirf3::disableVerbose(void)
 {
-    gsaMessage(false);
+    setBaud(4800);
+    gsaMessage(true);
+    ggaMessage(true);
+    gllMessage(false);
     gsvMessage(false);
+    rmcMessage(true);
+    vtgMessage(false);
+}
+
+void Sirf3::setUpdateRate(int rate)
+{
+    // We're stuck at 1Hz
+    return;
+}
+
+int Sirf3::getAvailable(void)
+{
+    int answer = 0x00;
+    if (nmea.gga_ready()) answer |= 0x01;
+    if (nmea.rmc_ready()) answer |= 0x02;
+    return answer;
 }
 
 double Sirf3::latitude(void)
@@ -107,6 +132,28 @@
     }
 }
 
+void Sirf3::ggaMessage(bool enable)
+{
+    if (enable) {
+        serial.printf("$PSRF103,00,00,01,01*25\r\n");     // Enable GGA
+    } else {
+        serial.printf("$PSRF103,00,00,00,01*24\r\n");     // Disable GGA
+    }
+
+    return;
+}
+
+void Sirf3::gllMessage(bool enable)
+{
+    if (enable) {
+        serial.printf("$PSRF103,01,00,01,01*24\r\n");     // Enable GLL
+    } else {
+        serial.printf("$PSRF103,01,00,00,01*25\r\n");     // Disable GLL
+    }
+
+    return;
+}
+
 void Sirf3::gsaMessage(bool enable)
 {
     if (enable) {
@@ -129,3 +176,24 @@
     return;
 }
 
+void Sirf3::rmcMessage(bool enable)
+{
+    if (enable) {
+        serial.printf("$PSRF103,04,00,01,01*21\r\n");     // Enable RMC
+    } else {
+        serial.printf("$PSRF103,04,00,00,01*20\r\n");     // Disable RMC
+    }
+
+    return;
+}
+
+void Sirf3::vtgMessage(bool enable)
+{
+    if (enable) {
+        serial.printf("$PSRF103,05,00,01,01*20\r\n");     // Enable VTG
+    } else {
+        serial.printf("$PSRF103,05,00,00,01*21\r\n");     // Disable VTG
+    }
+
+    return;
+}