73 #define REG_TO_SIGNED(_reg) ((int16_t)(_reg))
74 #define SIGNED_TO_REG(_signed) ((uint16_t)(_signed))
76 #define REG_TO_BOOL(_reg) ((bool)(_reg))
78 #define PX4IO_PROTOCOL_VERSION 5
81 #define PX4IO_PROTOCOL_MAX_CONTROL_COUNT 8
84 #define PX4IO_PAGE_CONFIG 0
85 #define PX4IO_P_CONFIG_PROTOCOL_VERSION 0
86 #define PX4IO_P_CONFIG_HARDWARE_VERSION 1
87 #define PX4IO_P_CONFIG_BOOTLOADER_VERSION 2
88 #define PX4IO_P_CONFIG_MAX_TRANSFER 3
89 #define PX4IO_P_CONFIG_CONTROL_COUNT 4
90 #define PX4IO_P_CONFIG_ACTUATOR_COUNT 5
91 #define PX4IO_P_CONFIG_RC_INPUT_COUNT 6
92 #define PX4IO_P_CONFIG_ADC_INPUT_COUNT 7
93 #define PX4IO_MAX_TRANSFER_LEN 64
96 #define PX4IO_PAGE_STATUS 1
97 #define PX4IO_P_STATUS_FREEMEM 0
98 #define PX4IO_P_STATUS_CPULOAD 1
100 #define PX4IO_P_STATUS_FLAGS 2
101 #define PX4IO_P_STATUS_FLAGS_OUTPUTS_ARMED (1 << 0)
102 #define PX4IO_P_STATUS_FLAGS_RC_OK (1 << 1)
103 #define PX4IO_P_STATUS_FLAGS_RC_PPM (1 << 2)
104 #define PX4IO_P_STATUS_FLAGS_RC_DSM (1 << 3)
105 #define PX4IO_P_STATUS_FLAGS_RC_SBUS (1 << 4)
106 #define PX4IO_P_STATUS_FLAGS_FMU_OK (1 << 5)
107 #define PX4IO_P_STATUS_FLAGS_RAW_PWM (1 << 6)
108 #define PX4IO_P_STATUS_FLAGS_ARM_SYNC (1 << 7)
109 #define PX4IO_P_STATUS_FLAGS_INIT_OK (1 << 8)
110 #define PX4IO_P_STATUS_FLAGS_FAILSAFE (1 << 9)
111 #define PX4IO_P_STATUS_FLAGS_SAFETY_OFF (1 << 10)
112 #define PX4IO_P_STATUS_FLAGS_FMU_INITIALIZED (1 << 11)
113 #define PX4IO_P_STATUS_FLAGS_RC_ST24 (1 << 12)
114 #define PX4IO_P_STATUS_FLAGS_RC_SUMD (1 << 13)
115 #define PX4IO_P_STATUS_FLAGS_SAFETY_BUTTON_EVENT (1 << 14)
117 #define PX4IO_P_STATUS_ALARMS 3
118 #define PX4IO_P_STATUS_ALARMS_RC_LOST (1 << 0)
119 #define PX4IO_P_STATUS_ALARMS_PWM_ERROR (1 << 1)
121 #define PX4IO_P_STATUS_VSERVO 6
122 #define PX4IO_P_STATUS_VRSSI 7
125 #define PX4IO_PAGE_SERVOS 3
128 #define PX4IO_PAGE_RAW_RC_INPUT 4
129 #define PX4IO_P_RAW_RC_COUNT 0
130 #define PX4IO_P_RAW_RC_FLAGS 1
131 #define PX4IO_P_RAW_RC_FLAGS_FRAME_DROP (1 << 0)
132 #define PX4IO_P_RAW_RC_FLAGS_FAILSAFE (1 << 1)
133 #define PX4IO_P_RAW_RC_FLAGS_RC_DSM11 (1 << 2)
134 #define PX4IO_P_RAW_RC_FLAGS_MAPPING_OK (1 << 3)
135 #define PX4IO_P_RAW_RC_FLAGS_RC_OK (1 << 4)
137 #define PX4IO_P_RAW_RC_NRSSI 2
138 #define PX4IO_P_RAW_RC_DATA 3
139 #define PX4IO_P_RAW_FRAME_COUNT 4
140 #define PX4IO_P_RAW_LOST_FRAME_COUNT 5
141 #define PX4IO_P_RAW_RC_BASE 6
144 #define PX4IO_PAGE_RAW_ADC_INPUT 6
147 #define PX4IO_PAGE_PWM_INFO 7
148 #define PX4IO_RATE_MAP_BASE 0
151 #define PX4IO_PAGE_SETUP 50
152 #define PX4IO_P_SETUP_FEATURES 0
153 #define PX4IO_P_SETUP_FEATURES_SBUS1_OUT (1 << 0)
154 #define PX4IO_P_SETUP_FEATURES_SBUS2_OUT (1 << 1)
155 #define PX4IO_P_SETUP_FEATURES_ADC_RSSI (1 << 2)
157 #define PX4IO_P_SETUP_ARMING 1
158 #define PX4IO_P_SETUP_ARMING_IO_ARM_OK (1 << 0)
159 #define PX4IO_P_SETUP_ARMING_FMU_ARMED (1 << 1)
160 #define PX4IO_P_SETUP_ARMING_FMU_PREARMED (1 << 2)
161 #define PX4IO_P_SETUP_ARMING_FAILSAFE_CUSTOM (1 << 3)
162 #define PX4IO_P_SETUP_ARMING_LOCKDOWN (1 << 4)
163 #define PX4IO_P_SETUP_ARMING_FORCE_FAILSAFE (1 << 5)
164 #define PX4IO_P_SETUP_ARMING_TERMINATION_FAILSAFE (1 << 6)
166 #define PX4IO_P_SETUP_PWM_RATES 2
167 #define PX4IO_P_SETUP_PWM_DEFAULTRATE 3
168 #define PX4IO_P_SETUP_PWM_ALTRATE 4
169 #define PX4IO_P_SETUP_VSERVO_SCALE 5
170 #define PX4IO_P_SETUP_DSM 6
179 #define PX4IO_P_SETUP_SET_DEBUG 9
181 #define PX4IO_P_SETUP_REBOOT_BL 10
182 #define PX4IO_REBOOT_BL_MAGIC 14662
184 #define PX4IO_P_SETUP_CRC 11
186 #define PX4IO_P_SETUP_SAFETY_BUTTON_ACK 14
187 #define PX4IO_P_SETUP_SAFETY_OFF 15
188 #define PX4IO_P_SETUP_SBUS_RATE 16
189 #define PX4IO_P_SETUP_THERMAL 17
190 #define PX4IO_P_SETUP_ENABLE_FLIGHTTERMINATION 18
191 #define PX4IO_P_SETUP_PWM_RATE_GROUP0 19
192 #define PX4IO_P_SETUP_PWM_RATE_GROUP1 20
193 #define PX4IO_P_SETUP_PWM_RATE_GROUP2 21
194 #define PX4IO_P_SETUP_PWM_RATE_GROUP3 22
196 #define PX4IO_THERMAL_IGNORE UINT16_MAX
197 #define PX4IO_THERMAL_OFF 0
198 #define PX4IO_THERMAL_FULL 10000
201 #define PX4IO_PAGE_DIRECT_PWM 54
204 #define PX4IO_PAGE_FAILSAFE_PWM 55
207 #define PX4IO_PAGE_TEST 127
208 #define PX4IO_P_TEST_LED 0
211 #define PX4IO_PAGE_DISARMED_PWM 109
216 #define PKT_MAX_REGS 32
218 #pragma pack(push, 1)
228 #if (PX4IO_MAX_TRANSFER_LEN > PKT_MAX_REGS * 2)
229 #error The max transfer length of the IO protocol must not be larger than the IO packet size
232 #define PKT_CODE_READ 0x00
233 #define PKT_CODE_WRITE 0x40
234 #define PKT_CODE_SUCCESS 0x00
235 #define PKT_CODE_CORRUPT 0x40
236 #define PKT_CODE_ERROR 0x80
238 #define PKT_CODE_MASK 0xc0
239 #define PKT_COUNT_MASK 0x3f
241 #define PKT_COUNT(_p) ((_p).count_code & PKT_COUNT_MASK)
242 #define PKT_CODE(_p) ((_p).count_code & PKT_CODE_MASK)
243 #define PKT_SIZE(_p) ((size_t)((uint8_t *)&((_p).regs[PKT_COUNT(_p)]) - ((uint8_t *)&(_p))))
246 0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
247 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
248 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,
249 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
250 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,
251 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
252 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,
253 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
254 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,
255 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
256 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,
257 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
258 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,
259 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
260 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,
261 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
262 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,
263 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
264 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,
265 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
266 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,
267 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
268 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,
269 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
270 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,
271 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
272 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,
273 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
274 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,
275 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
276 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,
277 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3
#define PKT_MAX_REGS
Serial protocol encapsulation.
static const uint8_t crc8_tab[256]
static uint8_t crc_packet(struct IOPacket *pkt)
uint16_t regs[PKT_MAX_REGS]
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.