Pico GPS Teseo
Toggle main menu visibility
Loading...
Searching...
No Matches
gps_nmea_lib-src
nmea
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
8
module
;
9
10
#include <string>
11
#include <array>
12
#include <string_view>
13
#include <chrono>
14
#include <concepts>
15
#include <type_traits>
16
17
export
module
nmea
;
18
19
export
namespace
nmea
{
20
21
using
time_t
= std::chrono::hh_mm_ss<std::chrono::duration<long long, std::ratio<1, 1000>>>;
22
23
enum class
talker_id
{
24
notset
,
// avoid that an initialised but unset variable assumes the first valid value
25
gps
,
// If system works in GPS only mode
26
glonass
,
// If system works in GLONASS only mode
27
galileo
,
// If system works in GALILEO only mode
28
beidou
,
// If system works in BEIDOU only mode
29
qzss
,
// If system works in QZSS only mode
30
multiconstellation
// If system works in multi-constellation mode
31
};
32
33
enum class
direction
{
34
n
,
35
s
,
36
e
,
37
w
38
};
39
40
enum class
quality
:
unsigned
int
{
41
q0
= 0,
42
q1
= 1,
43
q2
= 2,
44
q6
= 6
45
};
46
47
class
nmea
{
48
public
:
49
nmea
() =
delete
;
// prevent creation of objects of this utility class
50
51
static
talker_id
talker
(
const
std::string_view& sv);
52
static
talker_id
system
(
const
std::string_view& sv);
53
static
float
coord
(
const
unsigned
int
degrees_chars,
const
std::string_view& sv);
54
static
direction
dir
(
const
std::string_view& sv);
55
static
time_t
time
(
const
std::string_view& sv);
56
static
std::chrono::year_month_day
date
(
const
std::string_view& sv);
57
static
bool
valid
(
const
std::string_view& sv);
58
static
quality
qual
(
const
std::string_view& sv);
59
};
60
61
template
<
typename
T>
62
concept
has_success_bool
=
63
requires
(T t) {
64
true
;
// { t.success; } -> std::same_as<bool>; // need to read up
65
};
66
67
template
<has_success_
bool
T>
struct
nmea_result
{
68
T
result
;
69
constexpr
explicit
operator
bool() const noexcept {
return
result
.success; }
70
};
71
72
struct
gll
{
73
using
gll_result
=
nmea_result<gll>
;
74
static
gll_result
from_data
(
const
std::string& data);
75
talker_id
source
;
76
float
lat
;
77
float
lon
;
78
time_t
t
;
79
bool
valid
;
80
bool
success
=
false
;
81
};
82
83
struct
gga
{
84
using
gga_result
=
nmea_result<gga>
;
85
static
gga_result
from_data
(
const
std::string& data);
86
talker_id
source
;
87
float
lat
;
88
float
lon
;
89
time_t
t
;
90
unsigned
int
sats
;
91
quality
qual
;
92
float
alt
;
93
float
geosep
;
94
bool
success
=
false
;
95
};
96
97
using
gsa_sat_array
= std::array<unsigned int, 12>;
98
99
struct
gsa
{
100
using
gsa_result
=
nmea_result<gsa>
;
101
static
gsa_result
from_data
(
const
std::string& data);
102
talker_id
source
;
103
talker_id
system_id
;
104
gsa_sat_array
sats
;
105
bool
success
=
false
;
106
};
107
108
struct
gsv_sat
{
109
unsigned
int
prn
;
110
unsigned
int
elev
;
111
unsigned
int
azim
;
112
unsigned
int
snr
;
113
};
114
115
using
gsv_sat_array
= std::array<gsv_sat, 4>;
116
117
struct
gsv
{
118
using
gsv_result
=
nmea_result<gsv>
;
119
static
gsv_result
from_data
(
const
std::string& data);
120
talker_id
source
;
121
gsv_sat_array
sats
;
122
bool
success
=
false
;
123
};
124
125
struct
rmc
{
126
using
rmc_result
=
nmea_result<rmc>
;
127
static
rmc_result
from_data
(
const
std::string& data);
128
talker_id
source
;
129
float
lat
;
130
float
lon
;
131
float
speed
;
132
time_t
t
;
133
std::chrono::year_month_day
d
;
134
bool
valid
;
135
bool
success
=
false
;
136
};
137
138
}
// namespace nmea
nmea::nmea::qual
static quality qual(const std::string_view &sv)
Definition
nmea.cpp:113
nmea::nmea::date
static std::chrono::year_month_day date(const std::string_view &sv)
Definition
nmea.cpp:92
nmea::nmea::time
static time_t time(const std::string_view &sv)
Definition
nmea.cpp:82
nmea::nmea::system
static talker_id system(const std::string_view &sv)
Definition
nmea.cpp:40
nmea::nmea::nmea
nmea()=delete
nmea::nmea::dir
static direction dir(const std::string_view &sv)
Definition
nmea.cpp:64
nmea::nmea::coord
static float coord(const unsigned int degrees_chars, const std::string_view &sv)
Definition
nmea.cpp:56
nmea::nmea::talker
static talker_id talker(const std::string_view &sv)
Definition
nmea.cpp:22
nmea::has_success_bool
Definition
nmea_iface.cpp:62
nmea
nmea
Definition
nmea.cpp:20
nmea::gsa_sat_array
std::array< unsigned int, 12 > gsa_sat_array
Definition
nmea_iface.cpp:97
nmea::quality
quality
Definition
nmea_iface.cpp:40
nmea::quality::q0
@ q0
Definition
nmea_iface.cpp:41
nmea::quality::q2
@ q2
Definition
nmea_iface.cpp:43
nmea::quality::q6
@ q6
Definition
nmea_iface.cpp:44
nmea::quality::q1
@ q1
Definition
nmea_iface.cpp:42
nmea::gsv_sat_array
std::array< gsv_sat, 4 > gsv_sat_array
Definition
nmea_iface.cpp:115
nmea::time_t
std::chrono::hh_mm_ss< std::chrono::duration< long long, std::ratio< 1, 1000 > > > time_t
Definition
nmea_iface.cpp:21
nmea::direction
direction
Definition
nmea_iface.cpp:33
nmea::direction::s
@ s
Definition
nmea_iface.cpp:35
nmea::direction::n
@ n
Definition
nmea_iface.cpp:34
nmea::direction::e
@ e
Definition
nmea_iface.cpp:36
nmea::direction::w
@ w
Definition
nmea_iface.cpp:37
nmea::talker_id
talker_id
Definition
nmea_iface.cpp:23
nmea::talker_id::notset
@ notset
Definition
nmea_iface.cpp:24
nmea::talker_id::multiconstellation
@ multiconstellation
Definition
nmea_iface.cpp:30
nmea::talker_id::galileo
@ galileo
Definition
nmea_iface.cpp:27
nmea::talker_id::qzss
@ qzss
Definition
nmea_iface.cpp:29
nmea::talker_id::glonass
@ glonass
Definition
nmea_iface.cpp:26
nmea::talker_id::beidou
@ beidou
Definition
nmea_iface.cpp:28
nmea::gga
Definition
nmea_iface.cpp:83
nmea::gga::geosep
float geosep
Definition
nmea_iface.cpp:93
nmea::gga::qual
quality qual
Definition
nmea_iface.cpp:91
nmea::gga::success
bool success
Definition
nmea_iface.cpp:94
nmea::gga::source
talker_id source
Definition
nmea_iface.cpp:86
nmea::gga::alt
float alt
Definition
nmea_iface.cpp:92
nmea::gga::lon
float lon
Definition
nmea_iface.cpp:88
nmea::gga::lat
float lat
Definition
nmea_iface.cpp:87
nmea::gga::t
time_t t
Definition
nmea_iface.cpp:89
nmea::gga::sats
unsigned int sats
Definition
nmea_iface.cpp:90
nmea::gga::from_data
static gga_result from_data(const std::string &data)
Definition
nmea.cpp:163
nmea::gga::gga_result
nmea_result< gga > gga_result
Definition
nmea_iface.cpp:84
nmea::gll
Definition
nmea_iface.cpp:72
nmea::gll::valid
bool valid
Definition
nmea_iface.cpp:79
nmea::gll::source
talker_id source
Definition
nmea_iface.cpp:75
nmea::gll::lat
float lat
Definition
nmea_iface.cpp:76
nmea::gll::lon
float lon
Definition
nmea_iface.cpp:77
nmea::gll::gll_result
nmea_result< gll > gll_result
Definition
nmea_iface.cpp:73
nmea::gll::t
time_t t
Definition
nmea_iface.cpp:78
nmea::gll::from_data
static gll_result from_data(const std::string &data)
Definition
nmea.cpp:122
nmea::gll::success
bool success
Definition
nmea_iface.cpp:80
nmea::gsa
Definition
nmea_iface.cpp:99
nmea::gsa::source
talker_id source
Definition
nmea_iface.cpp:102
nmea::gsa::success
bool success
Definition
nmea_iface.cpp:105
nmea::gsa::gsa_result
nmea_result< gsa > gsa_result
Definition
nmea_iface.cpp:100
nmea::gsa::from_data
static gsa_result from_data(const std::string &data)
Definition
nmea.cpp:215
nmea::gsa::system_id
talker_id system_id
Definition
nmea_iface.cpp:103
nmea::gsa::sats
gsa_sat_array sats
Definition
nmea_iface.cpp:104
nmea::gsv_sat
Definition
nmea_iface.cpp:108
nmea::gsv_sat::snr
unsigned int snr
Definition
nmea_iface.cpp:112
nmea::gsv_sat::prn
unsigned int prn
Definition
nmea_iface.cpp:109
nmea::gsv_sat::elev
unsigned int elev
Definition
nmea_iface.cpp:110
nmea::gsv_sat::azim
unsigned int azim
Definition
nmea_iface.cpp:111
nmea::gsv
Definition
nmea_iface.cpp:117
nmea::gsv::source
talker_id source
Definition
nmea_iface.cpp:120
nmea::gsv::gsv_result
nmea_result< gsv > gsv_result
Definition
nmea_iface.cpp:118
nmea::gsv::success
bool success
Definition
nmea_iface.cpp:122
nmea::gsv::sats
gsv_sat_array sats
Definition
nmea_iface.cpp:121
nmea::gsv::from_data
static gsv_result from_data(const std::string &data)
Definition
nmea.cpp:260
nmea::nmea_result
Definition
nmea_iface.cpp:67
nmea::nmea_result< gll >::result
T result
Definition
nmea_iface.cpp:68
nmea::rmc
Definition
nmea_iface.cpp:125
nmea::rmc::t
time_t t
Definition
nmea_iface.cpp:132
nmea::rmc::d
std::chrono::year_month_day d
Definition
nmea_iface.cpp:133
nmea::rmc::lat
float lat
Definition
nmea_iface.cpp:129
nmea::rmc::lon
float lon
Definition
nmea_iface.cpp:130
nmea::rmc::from_data
static rmc_result from_data(const std::string &data)
Definition
nmea.cpp:323
nmea::rmc::source
talker_id source
Definition
nmea_iface.cpp:128
nmea::rmc::success
bool success
Definition
nmea_iface.cpp:135
nmea::rmc::rmc_result
nmea_result< rmc > rmc_result
Definition
nmea_iface.cpp:126
nmea::rmc::valid
bool valid
Definition
nmea_iface.cpp:134
nmea::rmc::speed
float speed
Definition
nmea_iface.cpp:131
valid
bool valid
Definition
teseo_nmea_with_data_processing.cpp:24
gps
teseo::teseo gps
Definition
teseo_nmea_with_data_processing.cpp:15
Generated by
1.17.0