Fixposition SDK 0.0.0-heads/main-0-g97f6014
Collection of c++ libraries and apps for use with Fixposition products on Linux
Loading...
Searching...
No Matches
parser_fpa.hpp
Go to the documentation of this file.
1/**
2 * \verbatim
3 * ___ ___
4 * \ \ / /
5 * \ \/ / Copyright (c) Fixposition AG (www.fixposition.com) and contributors
6 * / /\ \ License: see the LICENSE file
7 * /__/ \__\
8 * \endverbatim
9 *
10 * @file
11 * @brief Fixposition SDK: to_json() helpers for some fpsdk::common::parser::fpa messages
12 */
13#ifndef __FPSDK_COMMON_TO_JSON_PARSER_FPA_HPP__
14#define __FPSDK_COMMON_TO_JSON_PARSER_FPA_HPP__
15
16/* LIBC/STL */
17
18/* EXTERNAL */
19#include <nlohmann/json.hpp>
20
21/* PACKAGE */
22#include "../parser/fpa.hpp"
23
24#ifndef _DOXYGEN_ // not documenting these
25/* ****************************************************************************************************************** */
27
28inline void to_json(nlohmann::json& j, const FpaInitStatus e)
29{
30 j = FpaInitStatusStr(e);
31}
32
33inline void to_json(nlohmann::json& j, const FpaFusionStatusLegacy e)
34{
36}
37
38inline void to_json(nlohmann::json& j, const FpaMeasStatus e)
39{
40 j = FpaMeasStatusStr(e);
41}
42
43inline void to_json(nlohmann::json& j, const FpaImuStatus e)
44{
45 j = FpaImuStatusStr(e);
46}
47
48inline void to_json(nlohmann::json& j, const FpaImuStatusLegacy e)
49{
51}
52
53inline void to_json(nlohmann::json& j, const FpaImuNoise e)
54{
55 j = FpaImuNoiseStr(e);
56}
57
58inline void to_json(nlohmann::json& j, const FpaImuConv e)
59{
60 j = FpaImuConvStr(e);
61}
62
63inline void to_json(nlohmann::json& j, const FpaGnssStatus e)
64{
65 j = FpaGnssStatusStr(e);
66}
67
68inline void to_json(nlohmann::json& j, const FpaCorrStatus e)
69{
70 j = FpaCorrStatusStr(e);
71}
72
73inline void to_json(nlohmann::json& j, const FpaBaselineStatus e)
74{
76}
77
78inline void to_json(nlohmann::json& j, const FpaCamStatus e)
79{
80 j = FpaCamStatusStr(e);
81}
82
83inline void to_json(nlohmann::json& j, const FpaWsStatus e)
84{
85 j = FpaWsStatusStr(e);
86}
87
88inline void to_json(nlohmann::json& j, const FpaWsStatusLegacy e)
89{
91}
92
93inline void to_json(nlohmann::json& j, const FpaWsConv e)
94{
95 j = FpaWsConvStr(e);
96}
97
98inline void to_json(nlohmann::json& j, const FpaMarkersStatus e)
99{
100 j = FpaMarkersStatusStr(e);
101}
102
103inline void to_json(nlohmann::json& j, const FpaMarkersConv e)
104{
105 j = FpaMarkersConvStr(e);
106}
107
108inline void to_json(nlohmann::json& j, const FpaGnssFix e)
109{
110 j = FpaGnssFixStr(e);
111}
112
113inline void to_json(nlohmann::json& j, const FpaEpoch e)
114{
115 j = FpaEpochStr(e);
116}
117
118inline void to_json(nlohmann::json& j, const FpaAntState e)
119{
120 j = FpaAntStateStr(e);
121}
122
123inline void to_json(nlohmann::json& j, const FpaAntPower e)
124{
125 j = FpaAntPowerStr(e);
126}
127
128inline void to_json(nlohmann::json& j, const FpaTextLevel e)
129{
130 j = FpaTextLevelStr(e);
131}
132
133inline void to_json(nlohmann::json& j, const FpaTimebase e)
134{
135 j = FpaTimebaseStr(e);
136}
137
138inline void to_json(nlohmann::json& j, const FpaTimeref e)
139{
140 j = FpaTimerefStr(e);
141}
142
143// ---------------------------------------------------------------------------------------------------------------------
144
145inline void to_json(nlohmann::json& j, const FpaInt& m)
146{
147 if (m.valid) {
148 j = m.value;
149 } else {
150 j = nullptr;
151 }
152}
153
154inline void to_json(nlohmann::json& j, const FpaFloat& m)
155{
156 if (m.valid) {
157 j = m.value;
158 } else {
159 j = nullptr;
160 }
161}
162
163inline void to_json(nlohmann::json& j, const FpaFloat3& m)
164{
165 if (m.valid) {
166 j = m.values;
167 } else {
168 j = nullptr;
169 }
170}
171
172inline void to_json(nlohmann::json& j, const FpaFloat4& m)
173{
174 if (m.valid) {
175 j = m.values;
176 } else {
177 j = nullptr;
178 }
179}
180
181inline void to_json(nlohmann::json& j, const FpaFloat6& m)
182{
183 if (m.valid) {
184 j = m.values;
185 } else {
186 j = nullptr;
187 }
188}
189
190inline void to_json(nlohmann::json& j, const FpaGpsTime& m)
191{
192 j = nlohmann::json::object({
193 { "gps_week", m.week },
194 { "gps_tow", m.tow },
195 });
196}
197
198// ---------------------------------------------------------------------------------------------------------------------
199
200inline void to_json(nlohmann::json& j, const FpaEoePayload& m)
201{
202 j = nlohmann::json::object({
203 { "epoch", m.epoch },
204 });
205 j.update(m.gps_time);
206}
207
208// ---------------------------------------------------------------------------------------------------------------------
209
210inline void to_json(nlohmann::json& j, const FpaGnssantPayload& m)
211{
212 j = nlohmann::json::object({
213 { "gnss1_state", m.gnss1_state },
214 { "gnss1_power", m.gnss1_power },
215 { "gnss1_age", m.gnss1_age },
216 { "gnss2_state", m.gnss2_state },
217 { "gnss2_power", m.gnss2_power },
218 { "gnss2_age", m.gnss2_age },
219 });
220 j.update(m.gps_time);
221}
222
223// ---------------------------------------------------------------------------------------------------------------------
224
225inline void to_json(nlohmann::json& j, const FpaGnsscorrPayload& m)
226{
227 j = nlohmann::json::object({
228 { "gnss1_fix", m.gnss1_fix },
229 { "gnss1_nsig_l1", m.gnss1_nsig_l1 },
230 { "gnss1_nsig_l2", m.gnss1_nsig_l2 },
231 { "gnss2_fix", m.gnss2_fix },
232 { "gnss2_nsig_l2", m.gnss2_nsig_l1 },
233 { "gnss2_nsig_l2", m.gnss2_nsig_l2 },
234 { "corr_latency", m.corr_latency },
235 { "corr_update_rate", m.corr_update_rate },
236 { "corr_data_rate", m.corr_data_rate },
237 { "corr_msg_rate", m.corr_msg_rate },
238 { "sta_id", m.sta_id },
239 { "sta_llh", m.sta_llh },
240 { "sta_dist", m.sta_dist },
241 });
242 j.update(m.gps_time);
243}
244
245// ---------------------------------------------------------------------------------------------------------------------
246
247inline void to_json(nlohmann::json& j, const FpaImuPayload& m)
248{
249 j = nlohmann::json::object({
250 { "acc", m.acc },
251 { "rot", m.rot },
252 { "bias_comp", m.bias_comp },
253 { "imu_status", m.imu_status },
254 });
255 j.update(m.gps_time);
256}
257
258inline void to_json(nlohmann::json& j, const FpaRawimuPayload& m)
259{
260 to_json(j, dynamic_cast<const FpaImuPayload&>(m));
261}
262
263inline void to_json(nlohmann::json& j, const FpaCorrimuPayload& m)
264{
265 to_json(j, dynamic_cast<const FpaImuPayload&>(m));
266}
267
268// ---------------------------------------------------------------------------------------------------------------------
269
270inline void to_json(nlohmann::json& j, const FpaImubiasPayload& m)
271{
272 j = nlohmann::json::object({
273 { "fusion_imu", m.fusion_imu },
274 { "imu_status", m.imu_status },
275 { "imu_noise", m.imu_noise },
276 { "imu_conv", m.imu_conv },
277 { "bias_acc", m.bias_acc },
278 { "bias_gyr", m.bias_gyr },
279 { "bias_cov_acc", m.bias_cov_acc },
280 { "bias_cov_gyr", m.bias_cov_gyr },
281 });
282 j.update(m.gps_time);
283}
284
285// ---------------------------------------------------------------------------------------------------------------------
286
287inline void to_json(nlohmann::json& j, const FpaLlhPayload& m)
288{
289 j = nlohmann::json::object({
290 { "llh", m.llh },
291 { "longitude", nullptr },
292 { "height", nullptr },
293 { "cov_enu", m.cov_enu },
294 });
295 j.update(m.gps_time);
296}
297
298// ---------------------------------------------------------------------------------------------------------------------
299
300inline void to_json(nlohmann::json& j, const FpaOdomPayload& m)
301{
302 j = nlohmann::json::object({
303 { "pos", m.pos },
304 { "orientation", m.orientation },
305 { "vel", m.vel },
306 { "rot", m.rot },
307 { "acc", m.acc },
308 { "fusion_status", m.fusion_status },
309 { "imu_bias_status", m.imu_bias_status },
310 { "gnss1_fix", m.gnss1_fix },
311 { "gnss2_fix", m.gnss2_fix },
312 { "wheelspeed_status", m.wheelspeed_status },
313 { "pos_cov", m.pos_cov },
314 { "orientation_cov", m.orientation_cov },
315 { "vel_cov", m.vel_cov },
316 });
317 j.update(m.gps_time);
318}
319
320inline void to_json(nlohmann::json& j, const FpaOdometryPayload& m)
321{
322 if (m.valid_) {
323 to_json(j, dynamic_cast<const FpaOdomPayload&>(m));
324 j["version"] = m.version;
325 }
326}
327
328inline void to_json(nlohmann::json& j, const FpaOdomenuPayload& m)
329{
330 to_json(j, dynamic_cast<const FpaOdomPayload&>(m));
331}
332
333inline void to_json(nlohmann::json& j, const FpaOdomshPayload& m)
334{
335 to_json(j, dynamic_cast<const FpaOdomPayload&>(m));
336}
337
338// ---------------------------------------------------------------------------------------------------------------------
339
340inline void to_json(nlohmann::json& j, const FpaOdomstatusPayload& m)
341{
342 j = nlohmann::json::object({
343 { "init_status", m.init_status },
344 { "fusion_imu", m.fusion_imu },
345 { "fusion_gnss1", m.fusion_gnss1 },
346 { "fusion_gnss2", m.fusion_gnss2 },
347 { "fusion_corr", m.fusion_corr },
348 { "fusion_cam1", m.fusion_cam1 },
349 { "fusion_ws", m.fusion_ws },
350 { "fusion_markers", m.fusion_markers },
351 { "imu_status", m.imu_status },
352 { "imu_noise", m.imu_noise },
353 { "imu_conv", m.imu_conv },
354 { "gnss1_status", m.gnss1_status },
355 { "gnss2_status", m.gnss2_status },
356 { "baseline_status", m.baseline_status },
357 { "corr_status", m.corr_status },
358 { "cam1_status", m.cam1_status },
359 { "ws_status", m.ws_status },
360 { "ws_conv", m.ws_conv },
361 { "markers_status", m.markers_status },
362 { "markers_conv", m.markers_conv },
363 });
364 j.update(m.gps_time);
365}
366
367// ---------------------------------------------------------------------------------------------------------------------
368
369inline void to_json(nlohmann::json& j, const FpaTextPayload& m)
370{
371 j = nlohmann::json::object({
372 { "level", m.level },
373 { "text", m.text },
374 });
375}
376
377// ---------------------------------------------------------------------------------------------------------------------
378
379inline void to_json(nlohmann::json& j, const FpaTfPayload& m)
380{
381 j = nlohmann::json::object({
382 { "frame_a", m.frame_a },
383 { "frame_b", m.frame_b },
384 { "translation", m.translation },
385 { "orientation", m.orientation },
386 });
387 j.update(m.gps_time);
388}
389
390// ---------------------------------------------------------------------------------------------------------------------
391
392inline void to_json(nlohmann::json& j, const FpaTpPayload& m)
393{
394 j = nlohmann::json::object({
395 { "tp_name", m.tp_name },
396 { "timebase", m.timebase },
397 { "timeref", m.timeref },
398 { "tp_week", m.tp_week },
399 { "tp_tow_sec", m.tp_tow_sec },
400 { "tp_tow_psec", m.tp_tow_psec },
401 { "gps_leaps", m.gps_leaps },
402 });
403}
404
405// ---------------------------------------------------------------------------------------------------------------------
406
407inline void to_json(nlohmann::json& j, const FpaVersionPayload& m)
408{
409 j = nlohmann::json::object({
410 { "sw_version", m.sw_version },
411 { "hw_name", m.hw_name },
412 { "hw_ver", m.hw_ver },
413 { "hw_uid", m.hw_uid },
414 { "product_model", m.product_model },
415 });
416}
417
418// ---------------------------------------------------------------------------------------------------------------------
419
420inline void to_json(nlohmann::json& j, const FpaPayloadPtr& fpa)
421{
422 j = nlohmann::json::object();
423 if (!fpa) {
424 return;
425 }
426 j["_valid"] = fpa->valid_;
427 if (fpa) {
428 switch (fpa->msg_type_) { // clang-format off
429 case FpaMessageType::UNSPECIFIED: break;
430 case FpaMessageType::EOE: j.update(dynamic_cast<const FpaEoePayload&>(*fpa)); break;
431 case FpaMessageType::GNSSANT: j.update(dynamic_cast<const FpaGnssantPayload&>(*fpa)); break;
432 case FpaMessageType::GNSSCORR: j.update(dynamic_cast<const FpaGnsscorrPayload&>(*fpa)); break;
433 case FpaMessageType::RAWIMU: j.update(dynamic_cast<const FpaRawimuPayload&>(*fpa)); break;
434 case FpaMessageType::CORRIMU: j.update(dynamic_cast<const FpaCorrimuPayload&>(*fpa)); break;
435 case FpaMessageType::IMUBIAS: j.update(dynamic_cast<const FpaImubiasPayload&>(*fpa)); break;
436 case FpaMessageType::LLH: j.update(dynamic_cast<const FpaLlhPayload&>(*fpa)); break;
437 case FpaMessageType::ODOMETRY: j.update(dynamic_cast<const FpaOdometryPayload&>(*fpa)); break;
438 case FpaMessageType::ODOMENU: j.update(dynamic_cast<const FpaOdomenuPayload&>(*fpa)); break;
439 case FpaMessageType::ODOMSH: j.update(dynamic_cast<const FpaOdomshPayload&>(*fpa)); break;
440 case FpaMessageType::ODOMSTATUS: j.update(dynamic_cast<const FpaOdomstatusPayload&>(*fpa)); break;
441 case FpaMessageType::TEXT: j.update(dynamic_cast<const FpaTextPayload&>(*fpa)); break;
442 case FpaMessageType::TF: j.update(dynamic_cast<const FpaTfPayload&>(*fpa)); break;
443 case FpaMessageType::TP: j.update(dynamic_cast<const FpaTpPayload&>(*fpa)); break;
444 case FpaMessageType::VERSION: j.update(dynamic_cast<const FpaVersionPayload&>(*fpa)); break;
445 } // clang-format on
446 }
447}
448
449} // namespace fpsdk::common::parser::fpa
450/* ****************************************************************************************************************** */
451#endif // !_DOXYGEN_
452#endif // __FPSDK_COMMON_TO_JSON_PARSER_FPA_HPP__
Fixposition SDK: Parser FP_A routines and types.
Parser FP_A routines and types.
Definition fpa.hpp:98
FpaEpoch
FP_A epoch type.
Definition fpa.hpp:546
const char * FpaAntPowerStr(const FpaAntPower power)
Stringify antenna power.
FpaGnssStatus
FP_A GNSS fix status.
Definition fpa.hpp:313
FpaCorrStatus
FP_A GNSS correction status.
Definition fpa.hpp:340
FpaTimeref
FP_A time reference.
Definition fpa.hpp:647
const char * FpaCamStatusStr(const FpaCamStatus status)
Stringify camera status.
const char * FpaEpochStr(const FpaEpoch epoch)
Stringify epoch type.
FpaTextLevel
FP_A text levels.
Definition fpa.hpp:606
FpaAntPower
FP_A GNSS antenna power.
Definition fpa.hpp:587
const char * FpaCorrStatusStr(const FpaCorrStatus status)
Stringify GNSS correction status.
FpaMeasStatus
FP_A fusion measurement status.
Definition fpa.hpp:204
FpaBaselineStatus
FP_A baseline status.
Definition fpa.hpp:367
const char * FpaTextLevelStr(const FpaTextLevel level)
Stringify text level.
const char * FpaImuStatusStr(const FpaImuStatus status)
Stringify IMU bias status.
FpaWsStatus
FP_A wheelspeed status.
Definition fpa.hpp:411
const char * FpaAntStateStr(const FpaAntState state)
Stringify antenna state.
const char * FpaImuConvStr(const FpaImuConv conv)
Stringify IMU accelerometer and gyroscope convergence.
FpaGnssFix
FP_A GNSS fix type.
Definition fpa.hpp:520
const char * FpaWsStatusStr(const FpaWsStatus status)
Stringify wheelspeed status.
const char * FpaBaselineStatusStr(const FpaBaselineStatus status)
Stringify baseline status.
const char * FpaFusionStatusLegacyStr(const FpaFusionStatusLegacy status)
Stringify legacy fusion status.
const char * FpaMarkersConvStr(const FpaMarkersConv conv)
Stringify markers convergence status.
FpaFusionStatusLegacy
FP_A legacy fusion status.
Definition fpa.hpp:182
const char * FpaWsStatusLegacyStr(const FpaWsStatusLegacy status)
Stringify legacy wheelspeed status.
FpaMarkersConv
FP_A markers convergence status.
Definition fpa.hpp:498
FpaImuNoise
FP_A IMU variance.
Definition fpa.hpp:264
const char * FpaMeasStatusStr(const FpaMeasStatus status)
Stringify fusion measurement status.
FpaCamStatus
FP_A camera status.
Definition fpa.hpp:388
FpaWsConv
FP_A wheelspeed convergence status.
Definition fpa.hpp:453
FpaMarkersStatus
FP_A markers status.
Definition fpa.hpp:477
const char * FpaMarkersStatusStr(const FpaMarkersStatus status)
Stringify markers status.
FpaImuStatus
FP_A IMU bias status.
Definition fpa.hpp:224
FpaInitStatus
FP_A fusion initialisation status.
Definition fpa.hpp:162
FpaImuStatusLegacy
FP_A legacy IMU bias status.
Definition fpa.hpp:245
const char * FpaTimerefStr(const FpaTimeref ref)
Stringify time reference.
FpaAntState
FP_A GNSS antenna state.
Definition fpa.hpp:567
FpaTimebase
FP_A time base.
Definition fpa.hpp:627
const char * FpaImuNoiseStr(const FpaImuNoise noise)
Stringify IMU variance.
const char * FpaGnssFixStr(const FpaGnssFix fix)
Stringify fix type.
const char * FpaWsConvStr(const FpaWsConv status)
Stringify wheelspeed convergence status.
@ ODOMSTATUS
FpaOdomstatusPayload.
Definition fpa.hpp:751
std::unique_ptr< FpaPayload > FpaPayloadPtr
Pointer to FP_A payload.
Definition fpa.hpp:1079
FpaImuConv
FP_A IMU accelerometer and gyroscope convergence.
Definition fpa.hpp:288
const char * FpaImuStatusLegacyStr(const FpaImuStatusLegacy status)
Stringify legacy IMU bias status.
const char * FpaGnssStatusStr(const FpaGnssStatus status)
Stringify GNSS fix status.
FpaWsStatusLegacy
FP_A legacy wheelspeed status.
Definition fpa.hpp:433
const char * FpaTimebaseStr(const FpaTimebase base)
Stringify time base.
const char * FpaInitStatusStr(const FpaInitStatus status)
Stringify initialisation status.
FP_A-CORRIMU (version 1) message payload.
Definition fpa.hpp:878
FP_A-EOE (version 1) message payload.
Definition fpa.hpp:796
FP_A three float values.
Definition fpa.hpp:696
FP_A four float values.
Definition fpa.hpp:705
FP_A six float values.
Definition fpa.hpp:714
FP_A-GNSSANT (version 1) message payload.
Definition fpa.hpp:809
FP_A-GNSSCORR (version 1) message payload.
Definition fpa.hpp:828
FP_A-...IMU (versions 1 and 2) messages payload.
Definition fpa.hpp:854
FP_A-IMUBIAS (version 1) message payload.
Definition fpa.hpp:888
FP_A integer value.
Definition fpa.hpp:678
FP_A-LLH (version 1) message payload.
Definition fpa.hpp:909
FP_A-ODOM... (version 1) messages payload.
Definition fpa.hpp:924
FP_A-ODOMENU (version 1) messages payload (ENU0)
Definition fpa.hpp:960
FP_A-ODOMETRY (version 2) messages payload (ECEF)
Definition fpa.hpp:950
FP_A-ODOMSH (version 1) messages payload (ECEF)
Definition fpa.hpp:970
FP_A-ODOMSTATUS (version 1) messages payload.
Definition fpa.hpp:980
FP_A-RAWIMU (version 1) message payload.
Definition fpa.hpp:868
FP_A-TEXT (version 1) message payload.
Definition fpa.hpp:1013
FP_A-TF (version 2) message payload.
Definition fpa.hpp:1027
FP_A-TP (versions 1 and 2) message payload.
Definition fpa.hpp:1044
FP_A-VERSION (version 1) message payload.
Definition fpa.hpp:1063