⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nmea_8c-source.html

📁 国外牛人公开的AVR代码
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00131             foundpacket = NMEA_GPGGA;00132         }00133         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!strncmp(NmeaPacket, <span class="stringliteral">"GPVTG"</span>, 5))00134         {00135             <span class="comment">// process packet of this type</span>00136             nmeaProcessGPVTG(NmeaPacket);00137             <span class="comment">// report packet type</span>00138             foundpacket = NMEA_GPVTG;00139         }00140     }00141     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(rxBuffer-&gt;<a class="code" href="structstruct__cBuffer.html#o2">datalength</a> &gt;= rxBuffer-&gt;<a class="code" href="structstruct__cBuffer.html#o1">size</a>)00142     {00143         <span class="comment">// if we found no packet, and the buffer is full</span>00144         <span class="comment">// we're logjammed, flush entire buffer</span>00145         <a class="code" href="group__buffer.html#ga7">bufferFlush</a>(rxBuffer);00146     }00147     <span class="keywordflow">return</span> foundpacket;00148 }00149 00150 <span class="keywordtype">void</span> nmeaProcessGPGGA(u08* packet)00151 {00152     u08 i;00153     <span class="keywordtype">char</span>* endptr;00154     <span class="keywordtype">double</span> degrees, minutesfrac;00155 00156 <span class="preprocessor">    #ifdef NMEA_DEBUG_GGA</span>00157 <span class="preprocessor"></span>    rprintf(<span class="stringliteral">"NMEA: "</span>);00158     <a class="code" href="group__rprintf.html#ga2">rprintfStr</a>(packet);00159     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00160 <span class="preprocessor">    #endif</span>00161 <span class="preprocessor"></span>00162     <span class="comment">// start parsing just after "GPGGA,"</span>00163     i = 6;00164     <span class="comment">// attempt to reject empty packets right away</span>00165     <span class="keywordflow">if</span>(packet[i]==<span class="charliteral">','</span> &amp;&amp; packet[i+1]==<span class="charliteral">','</span>)00166         <span class="keywordflow">return</span>;00167 00168     <span class="comment">// get UTC time [hhmmss.sss]</span>00169     GpsInfo.PosLLA.TimeOfFix.f = strtod(&amp;packet[i], &amp;endptr);00170     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: latitude</span>00171     00172     <span class="comment">// get latitude [ddmm.mmmmm]</span>00173     GpsInfo.PosLLA.lat.f = strtod(&amp;packet[i], &amp;endptr);00174     <span class="comment">// convert to pure degrees [dd.dddd] format</span>00175     minutesfrac = modf(GpsInfo.PosLLA.lat.f/100, &amp;degrees);00176     GpsInfo.PosLLA.lat.f = degrees + (minutesfrac*100)/60;00177     <span class="comment">// convert to radians</span>00178     GpsInfo.PosLLA.lat.f *= (M_PI/180);00179     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: N/S indicator</span>00180     00181     <span class="comment">// correct latitute for N/S</span>00182     <span class="keywordflow">if</span>(packet[i] == <span class="charliteral">'S'</span>) GpsInfo.PosLLA.lat.f = -GpsInfo.PosLLA.lat.f;00183     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: longitude</span>00184     00185     <span class="comment">// get longitude [ddmm.mmmmm]</span>00186     GpsInfo.PosLLA.lon.f = strtod(&amp;packet[i], &amp;endptr);00187     <span class="comment">// convert to pure degrees [dd.dddd] format</span>00188     minutesfrac = modf(GpsInfo.PosLLA.lon.f/100, &amp;degrees);00189     GpsInfo.PosLLA.lon.f = degrees + (minutesfrac*100)/60;00190     <span class="comment">// convert to radians</span>00191     GpsInfo.PosLLA.lon.f *= (M_PI/180);00192     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: E/W indicator</span>00193 00194     <span class="comment">// correct latitute for E/W</span>00195     <span class="keywordflow">if</span>(packet[i] == <span class="charliteral">'W'</span>) GpsInfo.PosLLA.lon.f = -GpsInfo.PosLLA.lon.f;00196     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: position fix status</span>00197 00198     <span class="comment">// position fix status</span>00199     <span class="comment">// 0 = Invalid, 1 = Valid SPS, 2 = Valid DGPS, 3 = Valid PPS</span>00200     <span class="comment">// check for good position fix</span>00201     <span class="keywordflow">if</span>( (packet[i] != <span class="charliteral">'0'</span>) &amp;&amp; (packet[i] != <span class="charliteral">','</span>) )00202         GpsInfo.PosLLA.updates++;00203     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: satellites used</span>00204     00205     <span class="comment">// get number of satellites used in GPS solution</span>00206     GpsInfo.numSVs = atoi(&amp;packet[i]);00207     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: HDOP (horizontal dilution of precision)</span>00208     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: altitude</span>00209     00210     <span class="comment">// get altitude (in meters)</span>00211     GpsInfo.PosLLA.alt.f = strtod(&amp;packet[i], &amp;endptr);00212 00213     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: altitude units, always 'M'</span>00214     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: geoid seperation</span>00215     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: seperation units</span>00216     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: DGPS age</span>00217     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: DGPS station ID</span>00218     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">'*'</span>);              <span class="comment">// next field: checksum</span>00219 }00220 00221 <span class="keywordtype">void</span> nmeaProcessGPVTG(u08* packet)00222 {00223     u08 i;00224     <span class="keywordtype">char</span>* endptr;00225 00226 <span class="preprocessor">    #ifdef NMEA_DEBUG_VTG</span>00227 <span class="preprocessor"></span>    rprintf(<span class="stringliteral">"NMEA: "</span>);00228     <a class="code" href="group__rprintf.html#ga2">rprintfStr</a>(packet);00229     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00230 <span class="preprocessor">    #endif</span>00231 <span class="preprocessor"></span>00232     <span class="comment">// start parsing just after "GPVTG,"</span>00233     i = 6;00234     <span class="comment">// attempt to reject empty packets right away</span>00235     <span class="keywordflow">if</span>(packet[i]==<span class="charliteral">','</span> &amp;&amp; packet[i+1]==<span class="charliteral">','</span>)00236         <span class="keywordflow">return</span>;00237 00238     <span class="comment">// get course (true north ref) in degrees [ddd.dd]</span>00239     GpsInfo.VelHS.heading.f = strtod(&amp;packet[i], &amp;endptr);00240     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: 'T'</span>00241     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: course (magnetic north)</span>00242 00243     <span class="comment">// get course (magnetic north ref) in degrees [ddd.dd]</span>00244     <span class="comment">//GpsInfo.VelHS.heading.f = strtod(&amp;packet[i], &amp;endptr);</span>00245     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: 'M'</span>00246     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: speed (knots)</span>00247 00248     <span class="comment">// get speed in knots</span>00249     <span class="comment">//GpsInfo.VelHS.speed.f = strtod(&amp;packet[i], &amp;endptr);</span>00250     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: 'N'</span>00251     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: speed (km/h)</span>00252 00253     <span class="comment">// get speed in km/h</span>00254     GpsInfo.VelHS.speed.f = strtod(&amp;packet[i], &amp;endptr);00255     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">','</span>);              <span class="comment">// next field: 'K'</span>00256     <span class="keywordflow">while</span>(packet[i++] != <span class="charliteral">'*'</span>);              <span class="comment">// next field: checksum</span>00257 00258     GpsInfo.VelHS.updates++;00259 }00260 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 24 16:03:55 2005 for Procyon AVRlib by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -