STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
GPSMessage.hpp
Go to the documentation of this file.
1#ifndef GPS_MESSAGE_HPP
2#define GPS_MESSAGE_HPP
3
4#include <array>
5#include <cstdint>
6
7#include "CommsMessage.hpp"
8
9/**
10 * @brief GPS Position message
11 */
13 comms::CommsMessage<uint64_t, // (0) time_monotonic (ns) - monotonic timestamp
14 uint32_t, // (1) time_gps (ms) - GPS time
15 uint32_t, // (2) status - GPS status
16 double, // (3) latitude (deg) - latitude
17 double, // (4) longitude (deg) - longitude
18 double, // (5) altitude (m) - altitude
19 float, // (6) horizontal_accuracy (m) - horizontal accuracy
20 float, // (7) vertical_accuracy (m) - vertical accuracy
21 uint8_t>; // (8) satellites_used - number of satellites
22
23/**
24 * @brief GPS Velocity message
25 */
27 comms::CommsMessage<uint64_t, // (0) time_monotonic (ns) - monotonic timestamp
28 uint32_t, // (1) time_gps (s) - GPS time
29 float, // (2) velocity_x (m/s) - x velocity
30 float, // (3) velocity_y (m/s) - y velocity
31 float, // (4) velocity_z (m/s) - z velocity
32 float>; // (5) speed_accuracy (m/s) - speed accuracy
33
34// Function to set GPS position measurements
35static void set_gps_position_measurement(GPSPositionMessage& message, uint32_t time_gps,
36 uint32_t status, double latitude, double longitude,
37 double altitude, float horizontal_accuracy,
38 float vertical_accuracy, uint8_t satellites_used,
39 uint64_t time_monotonic) {
40 message.setField<0>(time_monotonic);
41 message.setField<1>(time_gps);
42 message.setField<2>(status);
43 message.setField<3>(latitude);
44 message.setField<4>(longitude);
45 message.setField<5>(altitude);
46 message.setField<6>(horizontal_accuracy);
47 message.setField<7>(vertical_accuracy);
48 message.setField<8>(satellites_used);
49}
50
51// Function to set GPS velocity measurements
52static void set_gps_velocity_measurement(GPSVelocityMessage& message, uint32_t time_gps,
53 float velocity_x, float velocity_y, float velocity_z,
54 float speed_accuracy, uint64_t time_monotonic) {
55 message.setField<0>(time_monotonic);
56 message.setField<1>(time_gps);
57 message.setField<2>(velocity_x);
58 message.setField<3>(velocity_y);
59 message.setField<4>(velocity_z);
60 message.setField<5>(speed_accuracy);
61}
62
64 GPSPositionMessage message;
65 set_gps_position_measurement(message, 123456789, 1, 37.7749, -122.4194, 10.0, 2.5, 3.0, 8, 0);
66 return message;
67}
68
70 GPSVelocityMessage message;
71 set_gps_velocity_measurement(message, 123456789, 1.0, 0.5, 0.0, 0.5, 0);
72 return message;
73}
74
75#endif // GPS_MESSAGE_HPP
static void set_gps_position_measurement(GPSPositionMessage &message, uint32_t time_gps, uint32_t status, double latitude, double longitude, double altitude, float horizontal_accuracy, float vertical_accuracy, uint8_t satellites_used, uint64_t time_monotonic)
static void set_gps_velocity_measurement(GPSVelocityMessage &message, uint32_t time_gps, float velocity_x, float velocity_y, float velocity_z, float speed_accuracy, uint64_t time_monotonic)
comms::CommsMessage< uint64_t, uint32_t, uint32_t, double, double, double, float, float, uint8_t > GPSPositionMessage
GPS Position message.
static GPSPositionMessage generateTestMessageGPSPosition()
comms::CommsMessage< uint64_t, uint32_t, float, float, float, float > GPSVelocityMessage
GPS Velocity message.
static GPSVelocityMessage generateTestMessageGPSVelocity()
CommsMessage - Template-based message serialization.