Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Watchdog SDFileSystem DigoleSerialDisp
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 }
Generated on Tue Jul 12 2022 21:36:19 by
 1.7.2
 1.7.2