📄 nmea_8c-source.html
字号:
00108 00109 <span class="keywordflow">if</span>(foundpacket)00110 {00111 <span class="comment">// check message type and process appropriately</span>00112 <span class="keywordflow">if</span>(!strncmp(NmeaPacket, <span class="stringliteral">"GPGGA"</span>, 5))00113 nmeaProcessGPGGA(NmeaPacket);00114 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!strncmp(NmeaPacket, <span class="stringliteral">"GPVTG"</span>, 5))00115 nmeaProcessGPVTG(NmeaPacket);00116 }00117 <span class="keywordflow">return</span> foundpacket;00118 }00119 00120 <span class="keywordtype">void</span> nmeaProcessGPGGA(u08* packet)00121 {00122 u08 i;00123 <span class="keywordtype">char</span>* endptr;00124 00125 <span class="keywordflow">if</span>(debug)00126 {00127 rprintf(<span class="stringliteral">"NMEA: "</span>);00128 <a class="code" href="rprintf_8h.html#a8">rprintfStr</a>(packet);00129 <a class="code" href="rprintf_8c.html#a9">rprintfCRLF</a>();00130 }00131 00132 <span class="comment">// start parsing just after "GPGGA,"</span>00133 i = 6;00134 00135 <span class="comment">// get UTC time [hhmmss.sss]</span>00136 GpsInfo.PosLLA.TimeOfFix.f = strtod(&packet[i], &endptr);00137 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: latitude</span>00138 00139 <span class="comment">// get latitude [ddmm.mmmmm]</span>00140 GpsInfo.PosLLA.lat.f = strtod(&packet[i], &endptr);00141 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: N/S indicator</span>00142 00143 <span class="comment">// correct latitute for N/S</span>00144 <span class="keywordflow">if</span>(packet[i] == <span class="charliteral">'S'</span>) GpsInfo.PosLLA.lat.f = -GpsInfo.PosLLA.lat.f;00145 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: longitude</span>00146 00147 <span class="comment">// get longitude [ddmm.mmmmm]</span>00148 GpsInfo.PosLLA.lon.f = strtod(&packet[i], &endptr);00149 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: E/W indicator</span>00150 00151 <span class="comment">// correct latitute for E/W</span>00152 <span class="keywordflow">if</span>(packet[i] == <span class="charliteral">'W'</span>) GpsInfo.PosLLA.lon.f = -GpsInfo.PosLLA.lon.f;00153 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: position fix status</span>00154 00155 <span class="comment">// position fix status</span>00156 <span class="comment">// 0 = Invalid, 1 = Valid SPS, 2 = Valid DGPS, 3 = Valid PPS</span>00157 <span class="comment">// check for good position fix</span>00158 <span class="keywordflow">if</span>( (packet[i] != <span class="charliteral">'0'</span>) && (packet[i] != <span class="charliteral">','</span>) )00159 GpsInfo.PosLLA.updates++;00160 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: satellites used</span>00161 00162 <span class="comment">// get number of satellites used in GPS solution</span>00163 GpsInfo.numSVs = atoi(&packet[i]);00164 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: HDOP (horizontal dilution of precision)</span>00165 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: altitude</span>00166 00167 <span class="comment">// get altitude (in meters)</span>00168 GpsInfo.PosLLA.alt.f = strtod(&packet[i], &endptr);00169 00170 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: altitude units, always 'M'</span>00171 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: geoid seperation</span>00172 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: seperation units</span>00173 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: DGPS age</span>00174 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: DGPS station ID</span>00175 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">'*'</span>); <span class="comment">// next field: checksum</span>00176 }00177 00178 <span class="keywordtype">void</span> nmeaProcessGPVTG(u08* packet)00179 {00180 u08 i;00181 <span class="keywordtype">char</span>* endptr;00182 00183 <span class="keywordflow">if</span>(debug)00184 {00185 rprintf(<span class="stringliteral">"NMEA: "</span>);00186 <a class="code" href="rprintf_8h.html#a8">rprintfStr</a>(packet);00187 <a class="code" href="rprintf_8c.html#a9">rprintfCRLF</a>();00188 }00189 00190 <span class="comment">// start parsing just after "GPVTG,"</span>00191 i = 6;00192 <span class="comment">// get course (true north ref) in degrees [ddd.dd]</span>00193 GpsInfo.VelHS.heading.f = strtod(&packet[i], &endptr);00194 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: 'T'</span>00195 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: course (magnetic north)</span>00196 00197 <span class="comment">// get course (magnetic north ref) in degrees [ddd.dd]</span>00198 <span class="comment">//GpsInfo.VelHS.heading.f = strtod(&packet[i], &endptr);</span>00199 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: 'M'</span>00200 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: speed (knots)</span>00201 00202 <span class="comment">// get speed in knots</span>00203 <span class="comment">//GpsInfo.VelHS.speed.f = strtod(&packet[i], &endptr);</span>00204 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: 'N'</span>00205 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: speed (km/h)</span>00206 00207 <span class="comment">// get speed in km/h</span>00208 GpsInfo.VelHS.speed.f = strtod(&packet[i], &endptr);00209 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>); <span class="comment">// next field: 'K'</span>00210 <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">'*'</span>); <span class="comment">// next field: checksum</span>00211 00212 GpsInfo.VelHS.updates++;00213 }00214 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Oct 15 03:50:22 2004 for Procyon AVRlib by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.6 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -