dispatch.h
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2018-2019, 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 _DBW_FCA_CAN_DISPATCH_H
36 #define _DBW_FCA_CAN_DISPATCH_H
37 #include <stdint.h>
38 
39 namespace dbw_fca_can
40 {
41 
42 typedef struct {
43  uint16_t PCMD;
44  uint8_t :4;
45  uint8_t CMD_TYPE :4;
46  uint8_t EN :1;
47  uint8_t CLEAR :1;
48  uint8_t IGNORE :1;
49  uint8_t :3;
50  uint8_t RES2 :1;
51  uint8_t RES1 :1;
52  uint8_t :8;
53  uint8_t :8;
54  uint8_t :8;
55  uint8_t COUNT;
56 } MsgBrakeCmd;
57 
58 typedef struct {
59  uint16_t PI;
60  uint16_t PC;
61  uint16_t PO;
62  uint8_t BTYPE :2;
63  uint8_t :1;
64  uint8_t WDCBRK :1;
65  uint8_t WDCSRC :4;
66  uint8_t ENABLED :1;
67  uint8_t OVERRIDE :1;
68  uint8_t DRIVER :1;
69  uint8_t FLTWDC :1;
70  uint8_t FLT1 :1;
71  uint8_t FLT2 :1;
72  uint8_t FLTPWR :1;
73  uint8_t TMOUT :1;
75 
76 typedef struct {
77  uint16_t PCMD;
78  uint8_t :4;
79  uint8_t CMD_TYPE :4;
80  uint8_t EN :1;
81  uint8_t CLEAR :1;
82  uint8_t IGNORE :1;
83  uint8_t :3;
84  uint8_t RES2 :1;
85  uint8_t RES1 :1;
86  uint8_t :8;
87  uint8_t :8;
88  uint8_t :8;
89  uint8_t COUNT;
91 
92 typedef struct {
93  uint16_t PI;
94  uint16_t PC;
95  uint16_t PO;
96  uint8_t :4;
97  uint8_t WDCSRC :4;
98  uint8_t ENABLED :1;
99  uint8_t OVERRIDE :1;
100  uint8_t DRIVER :1;
101  uint8_t FLTWDC :1;
102  uint8_t FLT1 :1;
103  uint8_t FLT2 :1;
104  uint8_t FLTPWR :1;
105  uint8_t TMOUT :1;
107 
108 typedef struct {
109  int16_t SCMD;
110  uint8_t EN :1;
111  uint8_t CLEAR :1;
112  uint8_t IGNORE :1;
113  uint8_t :1;
114  uint8_t QUIET :1;
115  uint8_t RES1 :1;
116  uint8_t ALERT :1;
117  uint8_t CMD_TYPE :1;
118  uint8_t SVEL;
119  uint8_t RES2 :1;
120  uint8_t :7;
121  uint8_t :8;
122  uint8_t :8;
123  uint8_t COUNT;
125 
126 typedef struct {
127  int16_t ANGLE;
128  int16_t CMD :15;
129  uint8_t TMODE :1; // Torque mode
130  int16_t VEH_VEL;
131  int8_t TORQUE;
132  uint8_t ENABLED :1;
133  uint8_t OVERRIDE :1;
134  uint8_t FLTPWR :1;
135  uint8_t FLTWDC :1;
136  uint8_t FLTBUS1 :1;
137  uint8_t FLTBUS2 :1;
138  uint8_t FLTCAL :1;
139  uint8_t TMOUT :1;
141 
142 typedef struct {
143  uint8_t GCMD :3;
144  uint8_t :2;
145  uint8_t RES2 :1;
146  uint8_t RES1 :1;
147  uint8_t CLEAR :1;
148 } MsgGearCmd;
149 
150 typedef struct {
151  uint8_t STATE :3;
152  uint8_t OVERRIDE :1;
153  uint8_t CMD :3;
154  uint8_t FLTBUS :1;
155  uint8_t REJECT :3;
156  uint8_t :4;
157  uint8_t READY :1;
158 } MsgGearReport;
159 
160 typedef struct {
161  uint8_t TRNCMD :2;
162  uint8_t :2;
163  uint8_t DOORSEL :2;
164  uint8_t DOORCMD :2;
165  uint8_t ft_drv_temp_cmd :7;
166  uint8_t :1;
167  uint8_t ft_psg_temp_cmd :7;
168  uint8_t :1;
169  uint8_t ft_fn_sp_cmd :3;
170  uint8_t :5;
171  uint8_t max_ac :2;
172  uint8_t ac :2;
173  uint8_t ft_hvac :2;
174  uint8_t auto_md :2;
175  uint8_t recirc :2;
176  uint8_t sync :2;
177  uint8_t r_defr :2;
178  uint8_t f_defr :2;
179  uint8_t vent_md_cmd :4;
180  uint8_t :2;
181  uint8_t hsw_cmd :2;
182  uint8_t fl_hs_cmd :2;
183  uint8_t fl_vs_cmd :2;
184  uint8_t fr_hs_cmd :2;
185  uint8_t fr_vs_cmd :2;
186 } MsgMiscCmd;
187 
188 typedef struct {
189  uint8_t turn_signal :2;
190  uint8_t head_light_hi :2;
191  uint8_t wiper_front :4;
192  uint8_t :3;
193  uint8_t :1;
194  uint8_t :1;
195  uint8_t btn_cc_res :1;
196  uint8_t btn_cc_cncl :1;
197  uint8_t :1;
198  uint8_t btn_cc_on_off :1;
199  uint8_t :1;
200  uint8_t btn_cc_set_inc :1;
201  uint8_t btn_cc_set_dec :1;
202  uint8_t btn_cc_gap_inc :1;
203  uint8_t btn_cc_gap_dec :1;
204  uint8_t :1;
205  uint8_t FLTBUS :1;
206  uint8_t :1;
207  uint8_t :1;
208  uint8_t door_rear_left :1;
209  uint8_t door_rear_right :1;
210  uint8_t :1;
211  uint8_t door_trunk :1;
212  uint8_t :1;
213  uint8_t :1;
214  uint8_t :2;
215  uint8_t btn_ld_ok :1;
216  uint8_t btn_ld_up :1;
217  uint8_t btn_ld_down :1;
218  uint8_t btn_ld_left :1;
219  uint8_t btn_ld_right :1;
220  uint8_t :1;
221  uint8_t btn_cc_mode :1;
222  uint8_t :7;
223 } MsgMiscReport;
224 
225 typedef struct {
226  uint8_t ft_drv_temp_stat :7;
227  uint8_t :1;
228  uint8_t ft_psg_temp_stat :7;
229  uint8_t :1;
230  uint8_t ft_fn_sp_stat :3;
231  uint8_t :5;
232  uint8_t max_ac :1;
233  uint8_t ac :1;
234  uint8_t ft_hvac :1;
235  uint8_t auto_md :1;
236  uint8_t recirc :1;
237  uint8_t sync :1;
238  uint8_t r_defr :1;
239  uint8_t f_defr :1;
240  uint8_t vent_md_stat: 4;
241  uint8_t :3;
242  uint8_t hsw_stat :1;
243  uint8_t fl_hs_stat :2;
244  uint8_t fl_vs_stat :2;
245  uint8_t fr_hs_stat :2;
246  uint8_t fr_vs_stat :2;
248 
249 typedef struct {
250  int16_t front_left;
251  int16_t front_right;
252  int16_t rear_left;
253  int16_t rear_right;
255 
256 typedef struct {
257  int16_t accel_lat;
258  int16_t accel_long;
259  int16_t accel_vert;
261 
262 typedef struct {
263  int16_t gyro_roll;
264  int16_t gyro_yaw;
265 } MsgReportGyro;
266 
267 typedef struct {
268  int32_t latitude :31;
269  int32_t lat_valid :1;
270  int32_t longitude :31;
271  int32_t long_valid :1;
272 } MsgReportGps1;
273 
274 typedef struct {
275  uint8_t utc_year :7;
276  uint8_t :1;
277  uint8_t utc_month :4;
278  uint8_t :4;
279  uint8_t utc_day :5;
280  uint8_t :3;
281  uint8_t utc_hours :5;
282  uint8_t :3;
283  uint8_t utc_minutes :6;
284  uint8_t :2;
285  uint8_t utc_seconds :6;
286  uint8_t :2;
287  uint8_t compass_dir :4;
288  uint8_t :4;
289  uint8_t :5;
290  uint8_t :1;
291  uint8_t :1;
292  uint8_t :1;
293 } MsgReportGps2;
294 
295 typedef struct {
296  int32_t dr_latitude :31;
297  int32_t dr_lat_valid :1;
298  int32_t dr_longitude :31;
299  int32_t dr_long_valid :1;
300 } MsgReportGps3;
301 
302 typedef struct {
303  int16_t front_left;
304  int16_t front_right;
305  int16_t rear_left;
306  int16_t rear_right;
308 
309 typedef struct {
310  int16_t fuel_level :11; // 0.18696 %
311  uint8_t :5;
312  uint8_t :8;
313  uint8_t battery_12v :8; // 0.0625 V
314  uint32_t odometer :24; // 0.1 km
315  uint8_t :8;
317 
318 typedef struct {
319  uint16_t front_left;
320  uint16_t front_right;
321  uint16_t rear_left;
322  uint16_t rear_right;
324 
325 typedef struct {
326  uint32_t brake_torque_request :12;
327  uint32_t brake_torque_actual :12;
328  uint32_t brake_pc :8;
329  uint32_t brake_pressure :11;
330  uint32_t stationary :1;
331  uint32_t :4;
332  uint32_t :16;
334 
335 typedef struct {
336  int16_t axle_torque :15;
337  int16_t :1;
338  uint8_t throttle_pc :8;
339  uint8_t gear_num :5;
340  uint8_t ign_stat :2;
341  uint8_t :1;
342  uint8_t :8;
343  uint8_t :8;
344  uint8_t :8;
345  uint8_t :8;
347 
348 typedef enum {
349  LIC_MUX_F0 = 0x00, // Feature 0 (BASE)
350  LIC_MUX_F1 = 0x01, // Feature 1 (CONTROL)
351  LIC_MUX_F2 = 0x02, // Feature 2 (SENSORS)
352  LIC_MUX_F3 = 0x03, // Feature 3 (unused)
353  LIC_MUX_F4 = 0x04, // Feature 4 (unused)
354  LIC_MUX_F5 = 0x05, // Feature 5 (unused)
355  LIC_MUX_F6 = 0x06, // Feature 6 (unused)
356  LIC_MUX_F7 = 0x07, // Feature 7 (unused)
359  LIC_MUX_MAC = 0x80,
362  LIC_MUX_VIN0 = 0x83,
363  LIC_MUX_VIN1 = 0x84,
364  LIC_MUX_VIN2 = 0x85,
365 } LicenseMux;
366 typedef struct {
367  uint8_t mux;
368  uint8_t ready :1;
369  uint8_t trial :1;
370  uint8_t expired :1;
371  uint8_t :1;
372  uint8_t module :4;
373  union {
374  struct {
375  uint8_t enabled :1;
376  uint8_t trial :1;
377  uint8_t :6;
378  uint8_t :8;
379  uint16_t trials_used;
380  uint16_t trials_left;
381  } license;
382  struct {
383  uint8_t ldate0;
384  uint8_t ldate1;
385  uint8_t ldate2;
386  uint8_t ldate3;
387  uint8_t ldate4;
388  uint8_t ldate5;
389  } ldate0;
390  struct {
391  uint8_t ldate6;
392  uint8_t ldate7;
393  uint8_t ldate8;
394  uint8_t ldate9;
395  uint8_t :8;
396  uint8_t :8;
397  } ldate1;
398  struct {
399  uint8_t addr0;
400  uint8_t addr1;
401  uint8_t addr2;
402  uint8_t addr3;
403  uint8_t addr4;
404  uint8_t addr5;
405  } mac;
406  struct {
407  uint8_t date0;
408  uint8_t date1;
409  uint8_t date2;
410  uint8_t date3;
411  uint8_t date4;
412  uint8_t date5;
413  } bdate0;
414  struct {
415  uint8_t date6;
416  uint8_t date7;
417  uint8_t date8;
418  uint8_t date9;
419  uint8_t :8;
420  uint8_t :8;
421  } bdate1;
422  struct {
423  uint8_t vin00;
424  uint8_t vin01;
425  uint8_t vin02;
426  uint8_t vin03;
427  uint8_t vin04;
428  uint8_t vin05;
429  } vin0;
430  struct {
431  uint8_t vin06;
432  uint8_t vin07;
433  uint8_t vin08;
434  uint8_t vin09;
435  uint8_t vin10;
436  uint8_t vin11;
437  } vin1;
438  struct {
439  uint8_t vin12;
440  uint8_t vin13;
441  uint8_t vin14;
442  uint8_t vin15;
443  uint8_t vin16;
444  uint8_t :8;
445  } vin2;
446  };
447 } MsgLicense;
448 
449 typedef struct {
450  uint8_t module;
451  uint8_t platform;
452  uint16_t major;
453  uint16_t minor;
454  uint16_t build;
455 } MsgVersion;
456 
457 #define BUILD_ASSERT(cond) do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
458 static void dispatchAssertSizes() {
459  BUILD_ASSERT(8 == sizeof(MsgBrakeCmd));
460  BUILD_ASSERT(8 == sizeof(MsgBrakeReport));
461  BUILD_ASSERT(8 == sizeof(MsgThrottleCmd));
462  BUILD_ASSERT(8 == sizeof(MsgThrottleReport));
463  BUILD_ASSERT(8 == sizeof(MsgSteeringCmd));
464  BUILD_ASSERT(8 == sizeof(MsgSteeringReport));
465  BUILD_ASSERT(1 == sizeof(MsgGearCmd));
466  BUILD_ASSERT(2 == sizeof(MsgGearReport));
467  BUILD_ASSERT(8 == sizeof(MsgMiscCmd));
468  BUILD_ASSERT(6 == sizeof(MsgMiscReport));
469  BUILD_ASSERT(6 == sizeof(MsgMisc2Report));
470  BUILD_ASSERT(8 == sizeof(MsgReportWheelSpeed));
471  BUILD_ASSERT(6 == sizeof(MsgReportAccel));
472  BUILD_ASSERT(4 == sizeof(MsgReportGyro));
473  BUILD_ASSERT(8 == sizeof(MsgReportGps1));
474  BUILD_ASSERT(8 == sizeof(MsgReportGps2));
475  BUILD_ASSERT(8 == sizeof(MsgReportGps3));
476  BUILD_ASSERT(8 == sizeof(MsgReportWheelPosition));
477  BUILD_ASSERT(8 == sizeof(MsgReportTirePressure));
478  BUILD_ASSERT(8 == sizeof(MsgReportFuelLevel));
479  BUILD_ASSERT(8 == sizeof(MsgReportBrakeInfo));
480  BUILD_ASSERT(8 == sizeof(MsgReportThrottleInfo));
481  BUILD_ASSERT(8 == sizeof(MsgLicense));
482  BUILD_ASSERT(8 == sizeof(MsgVersion));
483 }
484 #undef BUILD_ASSERT
485 
486 enum {
487  ID_BRAKE_CMD = 0x060,
493  ID_GEAR_CMD = 0x066,
494  ID_GEAR_REPORT = 0x067,
495  ID_MISC_CMD = 0x068,
496  ID_MISC_REPORT = 0x069,
499  ID_REPORT_GYRO = 0x06C,
500  ID_REPORT_GPS1 = 0x06D,
501  ID_REPORT_GPS2 = 0x06E,
502  ID_REPORT_GPS3 = 0x06F,
509  ID_LICENSE = 0x07E,
510  ID_VERSION = 0x07F,
511 };
512 
513 } // namespace dbw_fca_can
514 
515 #endif // _DBW_FCA_CAN_DISPATCH_H
516 
#define BUILD_ASSERT(cond)
Definition: dispatch.h:457
static void dispatchAssertSizes()
Definition: dispatch.h:458


dbw_fca_can
Author(s): Kevin Hallenbeck
autogenerated on Fri Jun 16 2023 02:36:28