<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>C++ parser library for NMEA GPS data - pt. 4: We have C++ objects and containers: So what?</title><link>/technologies/embedded/b/blog/posts/c-parser-library-for-nmea-gps-data---pt-3-we-have-c-objects-and-containers-so-what</link><description>I wrote an OO driver for Teseo-LIV3 GPS module (as used in shabaz &amp;#39; GPS / Galileo / BeiDou / GLONASS receiver ). It knows how to retrieve info from the GPS, in NMEA format. In this series, I&amp;#39;m designing an OO li...</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: C++ parser library for NMEA GPS data - pt. 4: We have C++ objects and containers: So what?</title><link>https://community.element14.com/technologies/embedded/b/blog/posts/c-parser-library-for-nmea-gps-data---pt-3-we-have-c-objects-and-containers-so-what</link><pubDate>Sat, 10 Aug 2024 21:52:33 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a96bbaf6-de38-4da9-aa95-4a60be3d5c79</guid><dc:creator>shabaz</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Hi Jan,&lt;/p&gt;
&lt;p&gt;The debugger is STL aware?&amp;nbsp;Very neat. I had expected it not to be capable of revealing the contents of the container at all!&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=28252&amp;AppID=7&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: C++ parser library for NMEA GPS data - pt. 4: We have C++ objects and containers: So what?</title><link>https://community.element14.com/technologies/embedded/b/blog/posts/c-parser-library-for-nmea-gps-data---pt-3-we-have-c-objects-and-containers-so-what</link><pubDate>Sat, 10 Aug 2024 13:20:15 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a96bbaf6-de38-4da9-aa95-4a60be3d5c79</guid><dc:creator>Jan Cumps</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;to get all valid satellites out of one gsv object (can be between 1 and 4):&lt;/p&gt;
&lt;p&gt;o: gsv object&lt;br /&gt;o.sats: container of sat objects&lt;/p&gt;
&lt;div&gt;
&lt;pre&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sts&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sats&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;views&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;[](&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nmea&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;gsv_sat&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;){ &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prn&lt;/span&gt;&lt;span&gt; != &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;}&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;prn is the satellite&amp;#39;s &amp;quot;id&amp;quot;.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;possible code:&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:a17079ed-0610-4b5b-917a-9881a20259dd:type=c_cpp&amp;text=void%20list_satellites%28const%20nmea%3A%3Agsv%26%20o%29%20%7B%0D%0A%20%20%20%20auto%20sts%20%3D%20o.sats%20%7C%20std%3A%3Aviews%3A%3Afilter%28%5B%5D%28const%20nmea%3A%3Agsv_sat%26%20s%29%7B%20return%20s.prn%20%21%3D%200%3B%7D%29%3B%0D%0A%20%20%20%20print_talker%28o.source%29%3B%0D%0A%20%20%20%20printf%28%22%20sat%20id%3A%20%22%29%3B%0D%0A%20%20%20%20for%20%28const%20auto%26%20s%20%3A%20sts%29%20%7B%0D%0A%20%20%20%20%20%20printf%28%22%20%25i%22%2C%20s.prn%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20printf%28%22.%20%5Cr%5Cn%22%29%3B%0D%0A%20%20%20%20return%3B%0D%0A%7D%0D%0A]&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;looping over all our gsv objects to get their satellites:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:bc476ac0-a3be-43c7-a20a-0dcb58c44b15:type=c_cpp&amp;text=%20%20%20%20%20%20%20%20for%28const%20auto%26%20g%20%3A%20std%3A%3Aranges%3A%3Asubrange%28gsv_set.begin%28%29%2C%20gsv_set.begin%28%29%20%2B%20count%29%20%29%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20list_satellites%28g%29%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A]&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;result:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;gps count: 4&lt;br /&gt;glonass count: 3&lt;br /&gt;gps sat id: 9 6 4 11. &lt;br /&gt;gps sat id: 7 3 20 19. &lt;br /&gt;gps sat id: 26 31 30 49. &lt;br /&gt;gps sat id: 36. &lt;br /&gt;glonass sat id: 71 86 87 70. &lt;br /&gt;glonass sat id: 80 72 73 79. &lt;br /&gt;glonass sat id: 85 85. &lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;The last gps object has 1 satellite. The last glonass gsv object had 2. You can see that the std::views::filter (as defined in the predicate&amp;nbsp;&lt;strong&gt;s.prn != 0&lt;/strong&gt;) nicely does not include the full array of 4 possible satellites. But only the ones that match the filter.&lt;/div&gt;
&lt;div&gt;Again, done without writing a custom filter, but using a STL construct.&lt;/div&gt;
&lt;/div&gt;&lt;img src="https://community.element14.com/aggbug?PostID=28252&amp;AppID=7&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item></channel></rss>