dispatch.h
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2015-2020, Dataspeed Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of Dataspeed Inc. nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 #ifndef _DISPATCH_H
36 #define _DISPATCH_H
37 #include <stdint.h>
38 
39 #pragma pack(push, 1)
40 typedef union {
41  uint8_t bytes[8];
42  struct {
43  uint32_t gps_minutes;
44  uint8_t num_sats;
45  uint8_t position_mode;
46  uint8_t velocity_mode;
47  uint8_t orientation_mode;
48  } chan0;
49  struct {
50  uint16_t acc_position_north; // 1e-3 m
51  uint16_t acc_position_east;
52  uint16_t acc_position_down;
53  uint8_t age;
54  } chan3;
55  struct {
56  uint16_t acc_velocity_north; // 1e-3 m/s
57  uint16_t acc_velocity_east;
58  uint16_t acc_velocity_down;
59  uint8_t age;
60  } chan4;
61  struct {
62  uint16_t acc_heading; // 1e-5 rad
63  uint16_t acc_pitch;
64  uint16_t acc_roll;
65  uint8_t age;
66  } chan5;
67  struct {
68  int16_t base_station_age;
69  int8_t base_station_id[4];
70  } chan20;
71  struct {
72  uint16_t delay_ms;
73  } chan23;
74  struct {
75  uint8_t heading_quality; // 0:None 1:Poor 2:RTK Float 3:RTK Integer
76  } chan27;
77  struct {
78  int16_t heading_misalignment_angle; // 1e-4 rad
79  uint16_t heading_misalignment_accuracy; // 1e-4 rad
80  uint16_t :16;
81  uint8_t valid;
82  } chan37;
83  struct {
84  int16_t undulation; // 5e-3 m
85  uint8_t HDOP; // 1e-1
86  uint8_t PDOP; // 1e-1
87  } chan48;
89 typedef struct {
90  uint8_t sync;
91  uint16_t time;
92  int32_t accel_x :24; // 1e-4 m/s^2
93  int32_t accel_y :24; // 1e-4 m/s^2
94  int32_t accel_z :24; // 1e-4 m/s^2
95  int32_t gyro_x :24; // 1e-5 rad/s
96  int32_t gyro_y :24; // 1e-5 rad/s
97  int32_t gyro_z :24; // 1e-5 rad/s
98  uint8_t nav_status;
99  uint8_t chksum1;
100  double latitude;
101  double longitude;
102  float altitude;
103  int32_t vel_north :24; // 1e-4 m/s
104  int32_t vel_east :24; // 1e-4 m/s
105  int32_t vel_down :24; // 1e-4 m/s
106  int32_t heading :24; // 1e-6 rad
107  int32_t pitch :24; // 1e-6 rad
108  int32_t roll :24; // 1e-6 rad
109  uint8_t chksum2;
110  uint8_t channel;
111  Channel chan;
112  uint8_t chksum3;
114 enum {
118  MODE_SPS = 3,
146  MODE_PPP = 31,
148 };
149 #pragma pack(pop)
150 
151 static bool validatePacket(const Packet *packet) {
152  if (packet->sync == 0xE7) {
153  const uint8_t *ptr = (uint8_t*)packet;
154  uint8_t chksum = 0;
155  for (unsigned int i = 1; i < sizeof(Packet) - 1; i++) {
156  chksum += ptr[i];
157  }
158  return chksum == packet->chksum3;
159  }
160  return false;
161 }
162 
163 static_assert(8 == sizeof(Channel), "");
164 static_assert(72 == sizeof(Packet), "");
165 
166 #endif // _DISPATCH_H
MODE_SPS_PP
@ MODE_SPS_PP
Definition: dispatch.h:128
MODE_SPS_IX
@ MODE_SPS_IX
Definition: dispatch.h:141
Packet::gyro_y
int32_t gyro_y
Definition: dispatch.h:96
MODE_PPP_CONVERGING
@ MODE_PPP_CONVERGING
Definition: dispatch.h:145
MODE_DIFFERENTIAL
@ MODE_DIFFERENTIAL
Definition: dispatch.h:119
MODE_NOT_RECOGNISED
@ MODE_NOT_RECOGNISED
Definition: dispatch.h:134
MODE_BLANKED
@ MODE_BLANKED
Definition: dispatch.h:126
MODE_RTK_FLOAT
@ MODE_RTK_FLOAT
Definition: dispatch.h:120
Packet::nav_status
uint8_t nav_status
Definition: dispatch.h:98
Packet::chksum1
uint8_t chksum1
Definition: dispatch.h:99
Packet::gyro_x
int32_t gyro_x
Definition: dispatch.h:95
MODE_NO_DATA
@ MODE_NO_DATA
Definition: dispatch.h:125
MODE_SEARCH
@ MODE_SEARCH
Definition: dispatch.h:116
validatePacket
static bool validatePacket(const Packet *packet)
Definition: dispatch.h:151
MODE_RTK_INTEGER
@ MODE_RTK_INTEGER
Definition: dispatch.h:121
MODE_DOPPLER_GX
@ MODE_DOPPLER_GX
Definition: dispatch.h:135
Packet::altitude
float altitude
Definition: dispatch.h:102
MODE_NONE
@ MODE_NONE
Definition: dispatch.h:115
MODE_RTK_FLOAT_PP
@ MODE_RTK_FLOAT_PP
Definition: dispatch.h:130
Packet::latitude
double latitude
Definition: dispatch.h:100
Packet::vel_down
int32_t vel_down
Definition: dispatch.h:105
MODE_RTK_FLOAT_GX
@ MODE_RTK_FLOAT_GX
Definition: dispatch.h:138
MODE_OMNISTAR_XP
@ MODE_OMNISTAR_XP
Definition: dispatch.h:132
MODE_RTK_INTEGER_PP
@ MODE_RTK_INTEGER_PP
Definition: dispatch.h:131
Packet::vel_east
int32_t vel_east
Definition: dispatch.h:104
MODE_DOPPLER_IX
@ MODE_DOPPLER_IX
Definition: dispatch.h:140
Packet::sync
uint8_t sync
Definition: dispatch.h:90
Packet::gyro_z
int32_t gyro_z
Definition: dispatch.h:97
MODE_UNKNOWN
@ MODE_UNKNOWN
Definition: dispatch.h:147
MODE_PPP
@ MODE_PPP
Definition: dispatch.h:146
MODE_WAAS
@ MODE_WAAS
Definition: dispatch.h:122
MODE_RTK_INTEGER_GX
@ MODE_RTK_INTEGER_GX
Definition: dispatch.h:139
Packet
Definition: dispatch.h:89
Packet::heading
int32_t heading
Definition: dispatch.h:106
Packet::chksum2
uint8_t chksum2
Definition: dispatch.h:109
Packet::accel_y
int32_t accel_y
Definition: dispatch.h:93
Packet::accel_z
int32_t accel_z
Definition: dispatch.h:94
Packet::pitch
int32_t pitch
Definition: dispatch.h:107
MODE_RTK_FLOAT_IX
@ MODE_RTK_FLOAT_IX
Definition: dispatch.h:143
MODE_DOPPLER
@ MODE_DOPPLER
Definition: dispatch.h:117
MODE_OMNISTAR_HP
@ MODE_OMNISTAR_HP
Definition: dispatch.h:124
Packet::chksum3
uint8_t chksum3
Definition: dispatch.h:112
MODE_DIFFERENTIAL_IX
@ MODE_DIFFERENTIAL_IX
Definition: dispatch.h:142
MODE_CDGPS
@ MODE_CDGPS
Definition: dispatch.h:133
MODE_DIFFERENTIAL_PP
@ MODE_DIFFERENTIAL_PP
Definition: dispatch.h:129
Packet::vel_north
int32_t vel_north
Definition: dispatch.h:103
MODE_DOPPLER_PP
@ MODE_DOPPLER_PP
Definition: dispatch.h:127
Packet::longitude
double longitude
Definition: dispatch.h:101
Packet::time
uint16_t time
Definition: dispatch.h:91
MODE_RTK_INTEGER_IX
@ MODE_RTK_INTEGER_IX
Definition: dispatch.h:144
MODE_SPS
@ MODE_SPS
Definition: dispatch.h:118
Packet::roll
int32_t roll
Definition: dispatch.h:108
MODE_OMNISTAR_VBS
@ MODE_OMNISTAR_VBS
Definition: dispatch.h:123
MODE_DIFFERENTIAL_GX
@ MODE_DIFFERENTIAL_GX
Definition: dispatch.h:137
Channel
Definition: dispatch.h:40
Packet::accel_x
int32_t accel_x
Definition: dispatch.h:92
MODE_SPS_GX
@ MODE_SPS_GX
Definition: dispatch.h:136


oxford_gps_eth
Author(s): Kevin Hallenbeck
autogenerated on Wed Mar 2 2022 00:40:52