#pragma once #include #include #include #include #include #include #include #include #include #include #include "../AP_Bootloader/app_comms.h" #include "hwing_esc.h" #if defined(HAL_PERIPH_NEOPIXEL_COUNT) || defined(HAL_PERIPH_ENABLE_NCP5623_LED) #define AP_PERIPH_HAVE_LED #endif #include "Parameters.h" #if CONFIG_HAL_BOARD == HAL_BOARD_SITL void stm32_watchdog_init(); void stm32_watchdog_pat(); #endif /* app descriptor compatible with MissionPlanner */ extern const struct app_descriptor app_descriptor; class AP_Periph_FW { public: void init(); void update(); Parameters g; void can_start(); void can_update(); void can_mag_update(); void can_gps_update(); void can_baro_update(); void can_airspeed_update(); void can_rangefinder_update(); void can_battery_update(); void load_parameters(); AP_SerialManager serial_manager; #ifdef HAL_PERIPH_ENABLE_GPS AP_GPS gps; #endif #ifdef HAL_PERIPH_ENABLE_MAG Compass compass; #endif #ifdef HAL_PERIPH_ENABLE_BARO AP_Baro baro; #endif #ifdef HAL_PERIPH_ENABLE_BATTERY struct AP_Periph_Battery { void handle_battery_failsafe(const char* type_str, const int8_t action) { } AP_BattMonitor lib{0, FUNCTOR_BIND_MEMBER(&AP_Periph_FW::AP_Periph_Battery::handle_battery_failsafe, void, const char*, const int8_t), nullptr}; uint32_t last_read_ms; uint32_t last_can_send_ms; } battery; #endif #ifdef HAL_PERIPH_ENABLE_MSP struct { AP_MSP msp; MSP::msp_port_t port; uint32_t last_gps_ms; uint32_t last_baro_ms; uint32_t last_mag_ms; uint32_t last_airspeed_ms; } msp; void msp_init(AP_HAL::UARTDriver *_uart); void msp_sensor_update(void); void send_msp_packet(uint16_t cmd, void *p, uint16_t size); void send_msp_GPS(void); void send_msp_compass(void); void send_msp_baro(void); void send_msp_airspeed(void); #endif #ifdef HAL_PERIPH_ENABLE_ADSB void adsb_init(); void adsb_update(); void can_send_ADSB(struct __mavlink_adsb_vehicle_t &msg); struct { mavlink_message_t msg; mavlink_status_t status; } adsb; #endif #ifdef HAL_PERIPH_ENABLE_AIRSPEED AP_Airspeed airspeed; #endif #ifdef HAL_PERIPH_ENABLE_RANGEFINDER RangeFinder rangefinder; #endif #ifdef HAL_PERIPH_ENABLE_PWM_HARDPOINT void pwm_irq_handler(uint8_t pin, bool pin_state, uint32_t timestamp); void pwm_hardpoint_init(); void pwm_hardpoint_update(); struct { uint8_t last_state; uint32_t last_ts_us; uint32_t last_send_ms; uint16_t pwm_value; uint16_t highest_pwm; } pwm_hardpoint; #endif #ifdef HAL_PERIPH_ENABLE_HWESC HWESC_Telem hwesc_telem; void hwesc_telem_update(); #endif // setup the var_info table AP_Param param_loader{var_info}; static const AP_Param::Info var_info[]; uint32_t last_mag_update_ms; uint32_t last_gps_update_ms; uint32_t last_baro_update_ms; uint32_t last_airspeed_update_ms; // show stack as DEBUG msgs void show_stack_free(); }; extern AP_Periph_FW periph; extern "C" { void can_printf(const char *fmt, ...); }