Michael Shimniok / Mbed 2 deprecated DataBus

Dependencies:   mbed Watchdog SDFileSystem DigoleSerialDisp

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Sirf3.cpp Source File

Sirf3.cpp

00001 #include "mbed.h"
00002 #include "Sirf3.h"
00003 
00004 // TODO: parameterize LED
00005 
00006 Sirf3::Sirf3(PinName tx, PinName rx):
00007     serial(tx, rx)
00008 {
00009     enable();
00010 }
00011 
00012 void Sirf3::init(void)
00013 {
00014     disableVerbose();
00015 }
00016 
00017 void Sirf3::setBaud(int baud)
00018 {
00019     serial.baud(baud);
00020 }
00021 
00022 Serial *Sirf3::getSerial(void)
00023 {
00024     return &serial;
00025 }
00026 
00027 void Sirf3::enable(void)
00028 {
00029     reset_available();
00030     setBaud(4800);
00031     serial.attach(callback(this, &Sirf3::recv_handler), Serial::RxIrq);
00032 }
00033 
00034 void Sirf3::disable(void)
00035 {
00036     setBaud(4800);
00037     serial.attach(NULL, Serial::RxIrq);
00038 }
00039 
00040 /**
00041  * Enable verbose messages for debugging
00042  */
00043 void Sirf3::enableVerbose(void)
00044 {
00045     setBaud(4800);
00046     gsaMessage(true);
00047     ggaMessage(true);
00048     gllMessage(false);
00049     gsvMessage(true);
00050     rmcMessage(true);
00051     vtgMessage(false);
00052 }
00053 
00054 /**
00055  * Disable verbose messages for debugging
00056  */
00057 void Sirf3::disableVerbose(void)
00058 {
00059     setBaud(4800);
00060     gsaMessage(true);
00061     ggaMessage(true);
00062     gllMessage(false);
00063     gsvMessage(false);
00064     rmcMessage(true);
00065     vtgMessage(false);
00066 }
00067 
00068 void Sirf3::setUpdateRate(int rate)
00069 {
00070     // We're stuck at 1Hz
00071     return;
00072 }
00073 
00074 int Sirf3::getAvailable(void)
00075 {
00076     int answer = 0x00;
00077     if (nmea.gga_ready()) answer |= 0x01;
00078     if (nmea.rmc_ready()) answer |= 0x02;
00079     return answer;
00080 }
00081 
00082 double Sirf3::latitude(void)
00083 {
00084     double latitude, longitude;
00085     unsigned long age;
00086     nmea.f_get_position(&latitude, &longitude, &age);
00087     return latitude;
00088 }
00089 
00090 double Sirf3::longitude(void)
00091 {
00092     double latitude, longitude;
00093     unsigned long age;
00094     nmea.f_get_position(&latitude, &longitude, &age);
00095     return longitude;
00096 }
00097 
00098 float Sirf3::hdop(void)
00099 {
00100     return nmea.f_hdop();
00101 }
00102 
00103 int Sirf3::sat_count(void)
00104 {
00105     return nmea.sat_count();
00106 }
00107 
00108 float Sirf3::speed_mps(void)
00109 {
00110     return nmea.f_speed_mps();
00111 }
00112 
00113 float Sirf3::heading_deg(void)
00114 {
00115     return nmea.f_course();
00116 }
00117 
00118 bool Sirf3::available(void)
00119 {
00120     return nmea.ready();
00121 }
00122 
00123 void Sirf3::reset_available(void)
00124 {
00125     nmea.reset_ready();
00126 }
00127 
00128 void Sirf3::recv_handler(void)
00129 {
00130     while (serial.readable()) {
00131         nmea.encode(serial.getc());
00132     }
00133 }
00134 
00135 void Sirf3::ggaMessage(bool enable)
00136 {
00137     if (enable) {
00138         serial.printf("$PSRF103,00,00,01,01*25\r\n");     // Enable GGA
00139     } else {
00140         serial.printf("$PSRF103,00,00,00,01*24\r\n");     // Disable GGA
00141     }
00142 
00143     return;
00144 }
00145 
00146 void Sirf3::gllMessage(bool enable)
00147 {
00148     if (enable) {
00149         serial.printf("$PSRF103,01,00,01,01*24\r\n");     // Enable GLL
00150     } else {
00151         serial.printf("$PSRF103,01,00,00,01*25\r\n");     // Disable GLL
00152     }
00153 
00154     return;
00155 }
00156 
00157 void Sirf3::gsaMessage(bool enable)
00158 {
00159     if (enable) {
00160         serial.printf("$PSRF103,02,00,01,01*27\r\n");     // Enable GSA
00161     } else {
00162         serial.printf("$PSRF103,02,00,00,01*26\r\n");     // Disable GSA
00163     }
00164 
00165     return;
00166 }
00167 
00168 void Sirf3::gsvMessage(bool enable)
00169 {
00170     if (enable) {
00171         serial.printf("$PSRF103,03,00,01,01*26\r\n");     // Enable GSV
00172     } else {
00173         serial.printf("$PSRF103,03,00,00,01*27\r\n");     // Disable GSV
00174     }
00175 
00176     return;
00177 }
00178 
00179 void Sirf3::rmcMessage(bool enable)
00180 {
00181     if (enable) {
00182         serial.printf("$PSRF103,04,00,01,01*21\r\n");     // Enable RMC
00183     } else {
00184         serial.printf("$PSRF103,04,00,00,01*20\r\n");     // Disable RMC
00185     }
00186 
00187     return;
00188 }
00189 
00190 void Sirf3::vtgMessage(bool enable)
00191 {
00192     if (enable) {
00193         serial.printf("$PSRF103,05,00,01,01*20\r\n");     // Enable VTG
00194     } else {
00195         serial.printf("$PSRF103,05,00,00,01*21\r\n");     // Disable VTG
00196     }
00197 
00198     return;
00199 }