Pico GPS Teseo I2C
Loading...
Searching...
No Matches
nmea_iface.cpp
Go to the documentation of this file.
1/*
2 * nmea_iface.cpp
3 *
4 * Created on: 29 jul. 2024
5 * Author: jancu
6 */
7
8module;
9
10#include <string>
11#include <array>
12#include <string_view>
13#include <chrono>
14
15export module nmea;
16
17export namespace nmea {
18
19using time_t = std::chrono::hh_mm_ss<std::chrono::duration<long long, std::ratio<1, 1000>>>;
20
21enum class talker_id {
22 notset, // avoid that an initialised but unset variable assumes the first valid value
23 gps, // If system works in GPS only mode
24 glonass, // If system works in GLONASS only mode
25 galileo, // If system works in GALILEO only mode
26 beidou, // If system works in BEIDOU only mode
27 qzss, // If system works in QZSS only mode
28 multiconstellation // If system works in multi-constellation mode
29};
30
31enum class direction {
36};
37
38enum class quality : unsigned int {
39 q0 = 0,
40 q1 = 1,
41 q2 = 2,
42 q6 = 6
43};
44
45class nmea {
46public:
47 nmea() = delete; // prevent creation of objects of this utility class
48
49 static talker_id talker(const std::string_view& sv);
50 static talker_id system(const std::string_view& sv);
51 static float coord(const unsigned int degrees_chars, const std::string_view& sv);
52 static direction dir(const std::string_view& sv);
53 static void time(const std::string_view& sv, time_t& t);
54 static void date(const std::string_view& sv, std::chrono::year_month_day& d);
55 static bool valid(const std::string_view& sv);
56 static quality qual(const std::string_view& sv);
57};
58
59class gll {
60public:
61 static bool from_data(const std::string& data, gll& gll);
63 float lat;
64 float lon;
66 bool valid;
67};
68
69class gga {
70public:
71 static bool from_data(const std::string& data, gga& gga);
73 float lat;
74 float lon;
76 unsigned int sats;
78 float alt;
79 float geosep;
80};
81
82using gsa_sat_array = std::array<unsigned int, 12>;
83
84class gsa {
85public:
86 static bool from_data(const std::string& data, gsa& gsa);
90};
91
92class gsv_sat {
93public:
94 unsigned int prn;
95 unsigned int elev;
96 unsigned int azim;
97 unsigned int snr;
98};
99
100using gsv_sat_array = std::array<gsv_sat, 4>;
101
102class gsv {
103public:
104 static bool from_data(const std::string& data, gsv& gsv);
107};
108
109class rmc {
110public:
111 static bool from_data(const std::string& data, rmc& rmc);
113 float lat;
114 float lon;
115 float speed;
117 std::chrono::year_month_day d;
118 bool valid;
119};
120
121} // namespace nmea
float geosep
quality qual
static bool from_data(const std::string &data, gga &gga)
Definition nmea.cpp:160
talker_id source
unsigned int sats
talker_id source
static bool from_data(const std::string &data, gll &gll)
Definition nmea.cpp:121
talker_id source
talker_id system_id
gsa_sat_array sats
static bool from_data(const std::string &data, gsa &gsa)
Definition nmea.cpp:210
unsigned int snr
unsigned int prn
unsigned int elev
unsigned int azim
static bool from_data(const std::string &data, gsv &gsv)
Definition nmea.cpp:253
talker_id source
gsv_sat_array sats
static quality qual(const std::string_view &sv)
Definition nmea.cpp:113
static talker_id system(const std::string_view &sv)
Definition nmea.cpp:40
nmea()=delete
static direction dir(const std::string_view &sv)
Definition nmea.cpp:64
static void time(const std::string_view &sv, time_t &t)
Definition nmea.cpp:82
static float coord(const unsigned int degrees_chars, const std::string_view &sv)
Definition nmea.cpp:56
static talker_id talker(const std::string_view &sv)
Definition nmea.cpp:22
static void date(const std::string_view &sv, std::chrono::year_month_day &d)
Definition nmea.cpp:92
std::chrono::year_month_day d
talker_id source
static bool from_data(const std::string &data, rmc &rmc)
Definition nmea.cpp:314
Definition nmea.cpp:20
std::array< unsigned int, 12 > gsa_sat_array
std::array< gsv_sat, 4 > gsv_sat_array
std::chrono::hh_mm_ss< std::chrono::duration< long long, std::ratio< 1, 1000 > > > time_t