rm_control
Loading...
Searching...
No Matches
protocol.h
Go to the documentation of this file.
1//
2// Created by ch on 24-11-23.
3//
4#pragma once
5#define __packed __attribute__((packed))
6
7#include <cstdint>
8namespace rm_vt
9{
19
20typedef struct
21{
22 uint8_t sof;
23 uint16_t data_length;
24 uint8_t seq;
25 uint8_t crc_8;
26} __packed FrameHeader;
27
28typedef struct
29{
30 uint8_t encoder1_data[2];
31 uint8_t encoder2_data[2];
32 uint8_t encoder3_data[2];
33 uint8_t encoder4_data[2];
34 uint8_t encoder5_data[2];
35 uint8_t encoder6_data[2];
36 uint8_t joystick_l_y_data[2];
37 uint8_t joystick_l_x_data[2];
38 uint8_t joystick_r_y_data[2];
39 uint8_t joystick_r_x_data[2];
40 uint8_t button1_data : 1;
41 uint8_t button2_data : 1;
42 uint8_t button3_data : 1;
43 uint8_t button4_data : 1;
44 uint8_t unused_button_data : 4;
54} __packed CustomControllerData;
55
56typedef struct
57{
58 uint8_t data[30];
59} __packed RobotToCustomData;
60
61typedef struct
62{
63 uint8_t data[300];
64} __packed RobotToCustomData2;
65
66typedef struct
67{
68 uint8_t data[30];
69} __packed CustomClientCmdData;
70
71typedef struct
72{
73 uint16_t key_value;
74 uint16_t x_position : 12;
75 uint16_t mouse_left : 4;
76 uint16_t y_position : 12;
77 uint16_t mouse_right : 4;
78 uint16_t reserved;
79} __packed CustomClientData;
80
81typedef struct
82{
83 int16_t mouse_x;
84 int16_t mouse_y;
85 int16_t mouse_z;
88 uint16_t key_w : 1;
89 uint16_t key_s : 1;
90 uint16_t key_a : 1;
91 uint16_t key_d : 1;
92 uint16_t key_shift : 1;
93 uint16_t key_ctrl : 1;
94 uint16_t key_q : 1;
95 uint16_t key_e : 1;
96 uint16_t key_r : 1;
97 uint16_t key_f : 1;
98 uint16_t key_g : 1;
99 uint16_t key_z : 1;
100 uint16_t key_x : 1;
101 uint16_t key_c : 1;
102 uint16_t key_v : 1;
103 uint16_t key_b : 1;
104 uint16_t reserved;
105} __packed LegacyKeyboardMouseData;
106
107typedef struct
108{
109 uint16_t joystick_r_x : 11;
110 uint16_t joystick_r_y : 11;
111 uint16_t joystick_l_y : 11;
112 uint16_t joystick_l_x : 11;
113 uint8_t mode_switch : 2;
114 uint8_t pause_button : 1;
115 uint8_t custom_button_l : 1;
116 uint8_t custom_button_r : 1;
117 uint16_t wheel : 11;
118 uint8_t trigger : 1;
119 uint8_t unused_1 : 3;
120 // mouse
121 int16_t mouse_x;
122 int16_t mouse_y;
123 int16_t mouse_wheel;
124 uint8_t mouse_left_down : 2;
125 uint8_t mouse_right_down : 2;
126 uint8_t mouse_mid_down : 2;
127 uint8_t unused_2 : 2;
128 // keyboard
129 uint16_t key_w : 1;
130 uint16_t key_s : 1;
131 uint16_t key_a : 1;
132 uint16_t key_d : 1;
133 uint16_t key_shift : 1;
134 uint16_t key_ctrl : 1;
135 uint16_t key_q : 1;
136 uint16_t key_e : 1;
137 uint16_t key_r : 1;
138 uint16_t key_f : 1;
139 uint16_t key_g : 1;
140 uint16_t key_z : 1;
141 uint16_t key_x : 1;
142 uint16_t key_c : 1;
143 uint16_t key_v : 1;
144 uint16_t key_b : 1;
145} __packed ControlData;
146/***********************Frame tail(CRC8_CRC16)********************************************/
147const uint8_t kCrc8Init = 0xff;
148const uint8_t kCrc8Table[256] = {
149 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, 0x9d, 0xc3, 0x21,
150 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c,
151 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c,
152 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66,
153 0xe5, 0xbb, 0x59, 0x07, 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4,
154 0x9a, 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, 0xf8, 0xa6,
155 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, 0x8c, 0xd2, 0x30, 0x6e, 0xed,
156 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
157 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1,
158 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf,
159 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, 0x57,
160 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, 0xe9, 0xb7, 0x55, 0x0b,
161 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9,
162 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35,
163};
164const uint16_t kCrc16Init = 0xffff;
165const uint16_t wCRC_table[256] = {
166 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5,
167 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52,
168 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3,
169 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
170 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9,
171 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e,
172 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f,
173 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
174 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862,
175 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb,
176 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948,
177 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
178 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226,
179 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497,
180 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704,
181 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
182 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb,
183 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c,
184 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
185};
186} // namespace rm_vt
Definition data.h:29
const uint16_t wCRC_table[256]
Definition protocol.h:165
const uint16_t kCrc16Init
Definition protocol.h:164
const uint8_t kCrc8Init
Definition protocol.h:147
const uint8_t kCrc8Table[256]
Definition protocol.h:148
VideoTransmissionCmdId
Definition protocol.h:11
@ ROBOT_TO_CUSTOM_CLIENT_CMD
Definition protocol.h:15
@ ROBOT_TO_CUSTOM_CMD
Definition protocol.h:17
@ ROBOT_TO_CUSTOM_CONTROLLER_CMD
Definition protocol.h:14
@ KEYBOARD_MOUSE_CMD
Definition protocol.h:13
@ CUSTOM_CONTROLLER_CMD
Definition protocol.h:12
@ CUSTOM_CLIENT_TO_ROBOT_CMD
Definition protocol.h:16
#define __packed
Definition protocol.h:39
Definition protocol.h:108
uint16_t x_position
Definition protocol.h:74
uint16_t key_shift
Definition protocol.h:92
uint16_t key_e
Definition protocol.h:95
uint8_t unused_button_data
Definition protocol.h:44
uint16_t key_w
Definition protocol.h:88
int16_t mouse_y
Definition protocol.h:84
uint16_t wheel
Definition protocol.h:117
uint8_t seq
Definition protocol.h:24
uint16_t key_b
Definition protocol.h:103
uint16_t key_f
Definition protocol.h:97
uint8_t button3_data
Definition protocol.h:42
uint8_t custom_button_l
Definition protocol.h:115
uint16_t key_d
Definition protocol.h:91
uint8_t unused_data_4
Definition protocol.h:48
uint16_t key_g
Definition protocol.h:98
uint16_t y_position
Definition protocol.h:76
uint16_t key_c
Definition protocol.h:101
uint16_t reserved
Definition protocol.h:78
uint8_t trigger
Definition protocol.h:118
int8_t left_button_down
Definition protocol.h:86
uint16_t mouse_left
Definition protocol.h:75
uint8_t unused_data_7
Definition protocol.h:51
uint8_t button4_data
Definition protocol.h:43
uint16_t key_r
Definition protocol.h:96
uint8_t unused_data_5
Definition protocol.h:49
uint8_t unused_data_6
Definition protocol.h:50
uint8_t unused_1
Definition protocol.h:119
uint8_t mode_switch
Definition protocol.h:113
uint16_t key_z
Definition protocol.h:99
uint8_t button1_data
Definition protocol.h:40
uint8_t unused_data_9
Definition protocol.h:53
uint16_t mouse_right
Definition protocol.h:77
uint8_t crc_8
Definition protocol.h:25
uint16_t joystick_l_x
Definition protocol.h:112
uint8_t mouse_right_down
Definition protocol.h:125
uint16_t key_q
Definition protocol.h:94
uint8_t unused_data_1
Definition protocol.h:45
int16_t mouse_x
Definition protocol.h:83
uint8_t unused_data_3
Definition protocol.h:47
uint8_t mouse_mid_down
Definition protocol.h:126
uint16_t key_s
Definition protocol.h:89
uint16_t joystick_r_y
Definition protocol.h:110
int16_t mouse_wheel
Definition protocol.h:123
int16_t mouse_z
Definition protocol.h:85
uint8_t sof
Definition protocol.h:22
uint8_t button2_data
Definition protocol.h:41
uint16_t joystick_l_y
Definition protocol.h:111
uint8_t unused_data_2
Definition protocol.h:46
uint16_t key_ctrl
Definition protocol.h:93
uint16_t joystick_r_x
Definition protocol.h:109
uint16_t key_v
Definition protocol.h:102
uint8_t unused_2
Definition protocol.h:127
uint8_t pause_button
Definition protocol.h:114
int8_t right_button_down
Definition protocol.h:87
uint16_t key_a
Definition protocol.h:90
uint8_t custom_button_r
Definition protocol.h:116
uint16_t key_value
Definition protocol.h:73
uint8_t unused_data_8
Definition protocol.h:52
uint8_t mouse_left_down
Definition protocol.h:124
uint16_t key_x
Definition protocol.h:100
uint16_t data_length
Definition protocol.h:23