14 #define IOMCU_MAX_CHANNELS 16 23 void write_channel(uint8_t
chan, uint16_t
pwm);
26 uint16_t read_channel(uint8_t
chan);
35 void set_freq(uint16_t chmask, uint16_t freq);
38 uint16_t get_freq(uint16_t
chan);
44 bool force_safety_on(
void);
47 void force_safety_off(
void);
50 void set_safety_pwm(uint16_t chmask, uint16_t period_us);
53 void set_safety_mask(uint16_t chmask);
58 bool enable_sbus_out(uint16_t rate_hz);
63 bool check_rcinput(uint32_t &last_frame_us, uint8_t &num_channels, uint16_t *
channels, uint8_t
max_channels);
68 float get_vservo(
void)
const {
return reg_status.vservo * 0.001; }
73 float get_vrssi(
void)
const {
return reg_status.vrssi * 0.001; }
76 void set_heater_duty_cycle(uint8_t duty_cycle);
79 void set_default_rate(uint16_t rate_hz);
82 void set_oneshot_mode(
void);
90 static void thread_start(
void *ctx);
91 void thread_main(
void);
94 bool read_registers(uint8_t page, uint8_t offset, uint8_t
count, uint16_t *regs);
97 bool write_registers(uint8_t page, uint8_t offset, uint8_t
count,
const uint16_t *regs);
100 bool write_register(uint8_t page, uint8_t offset, uint16_t
v) {
101 return write_registers(page, offset, 1, &v);
105 bool modify_register(uint8_t page, uint8_t offset, uint16_t clearbits, uint16_t setbits);
108 void trigger_event(uint8_t event);
111 thread_t *thread_ctx;
114 uint32_t last_status_read_ms;
115 uint32_t last_rc_read_ms;
116 uint32_t last_servo_read_ms;
117 uint32_t last_debug_ms;
118 uint32_t last_safety_option_check_ms;
121 uint16_t last_safety_options = 0xFFFF;
123 void send_servo_out(
void);
124 void read_rc_input(
void);
125 void read_servo(
void);
126 void read_status(
void);
127 void print_debug(
void);
128 void discard_input(
void);
129 void event_failed(uint8_t event);
130 void update_safety_options(
void);
138 uint16_t flag_outputs_armed:1;
139 uint16_t flag_override:1;
140 uint16_t flag_rc_ok:1;
141 uint16_t flag_rc_ppm:1;
142 uint16_t flag_rc_dsm:1;
143 uint16_t flag_rc_sbus:1;
144 uint16_t flag_fmu_ok:1;
145 uint16_t flag_raw_pwm:1;
146 uint16_t flag_mixer_ok:1;
147 uint16_t flag_arm_sync:1;
148 uint16_t flag_init_ok:1;
149 uint16_t flag_failsafe:1;
150 uint16_t flag_safety_off:1;
151 uint16_t flag_fmu_initialised:1;
152 uint16_t flag_rc_st24:1;
153 uint16_t flag_rc_sumd_srxl:1;
166 uint16_t flags_frame_drop:1;
167 uint16_t flags_failsafe:1;
168 uint16_t flags_dsm11:1;
169 uint16_t flags_mapping_ok:1;
170 uint16_t flags_rc_ok:1;
171 uint16_t flags_unused:11;
174 uint16_t frame_count;
175 uint16_t lost_frame_count;
176 uint16_t
pwm[IOMCU_MAX_CHANNELS];
177 uint16_t last_frame_count;
178 uint32_t last_input_us;
183 uint8_t num_channels;
184 uint16_t
pwm[IOMCU_MAX_CHANNELS];
185 uint8_t safety_pwm_set;
186 uint8_t safety_pwm_sent;
187 uint16_t safety_pwm[IOMCU_MAX_CHANNELS];
188 uint16_t safety_mask;
193 uint16_t
pwm[IOMCU_MAX_CHANNELS];
200 uint16_t default_freq = 50;
201 uint16_t sbus_rate_hz;
205 uint8_t heater_duty_cycle;
207 uint32_t last_servo_out_us;
214 const char *fw_name =
"io_firmware.bin";
217 bool upload_fw(
const char *filename);
218 bool recv_byte_with_timeout(uint8_t *c, uint32_t timeout_ms);
219 bool recv_bytes(uint8_t *p, uint32_t
count);
221 bool send(uint8_t c);
222 bool send(
const uint8_t *p, uint32_t
count);
223 bool get_sync(uint32_t timeout = 40);
225 bool get_info(uint8_t param, uint32_t &val);
227 bool program(uint32_t fw_size);
228 bool verify_rev2(uint32_t fw_size);
229 bool verify_rev3(uint32_t fw_size_local);
232 bool check_crc(
void);
239 PROTO_INVALID = 0x13,
240 PROTO_BAD_SILICON_REV = 0x14,
242 PROTO_GET_SYNC = 0x21,
243 PROTO_GET_DEVICE = 0x22,
244 PROTO_CHIP_ERASE = 0x23,
245 PROTO_CHIP_VERIFY = 0x24,
246 PROTO_PROG_MULTI = 0x27,
247 PROTO_READ_MULTI = 0x28,
248 PROTO_GET_CRC = 0x29,
249 PROTO_GET_OTP = 0x2a,
251 PROTO_GET_CHIP = 0x2c,
252 PROTO_SET_DELAY = 0x2d,
253 PROTO_GET_CHIP_DES = 0x2e,
262 PROG_MULTI_MAX = 248,
266 #endif // HAL_WITH_IO_MCU
static uint16_t channels[SRXL_MAX_CHANNELS]
void sync(void)
POSIX Sync all pending file changes and metadata on ALL files.
AP_HAL::AnalogSource * chan
void init()
Generic board initialization function.