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
Diff: Sensors/GPS/Sirf3.cpp
- 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; +}