diff --git a/libraries/AP_DroneCAN/AP_DroneCAN.cpp b/libraries/AP_DroneCAN/AP_DroneCAN.cpp index 131cc07a47..d55a0b1c5d 100644 --- a/libraries/AP_DroneCAN/AP_DroneCAN.cpp +++ b/libraries/AP_DroneCAN/AP_DroneCAN.cpp @@ -284,9 +284,11 @@ void AP_DroneCAN::init(uint8_t driver_index, bool enable_filters) esc_hobbywing_raw.set_timeout_ms(2); esc_hobbywing_raw.set_priority(CANARD_TRANSFER_PRIORITY_HIGH); #endif - + +#if AP_DRONECAN_HIMARK_SERVO_SUPPORT himark_out.set_timeout_ms(2); himark_out.set_priority(CANARD_TRANSFER_PRIORITY_HIGH); +#endif rgb_led.set_timeout_ms(20); rgb_led.set_priority(CANARD_TRANSFER_PRIORITY_LOW); @@ -406,9 +408,12 @@ void AP_DroneCAN::loop(void) const uint32_t servo_period_us = 1000000UL / unsigned(_servo_rate_hz.get()); if (now - _SRV_last_send_us >= servo_period_us) { _SRV_last_send_us = now; +#if AP_DRONECAN_HIMARK_SERVO_SUPPORT if (option_is_set(Options::USE_HIMARK_SERVO)) { SRV_send_himark(); - } else { + } else +#endif + { SRV_send_actuator(); } for (uint8_t i = 0; i < DRONECAN_SRV_NUMBER; i++) { @@ -622,6 +627,7 @@ void AP_DroneCAN::SRV_send_actuator(void) } while (repeat_send); } +#if AP_DRONECAN_HIMARK_SERVO_SUPPORT /* Himark servo output. This uses com.himark.servo.ServoCmd packets */ @@ -653,6 +659,7 @@ void AP_DroneCAN::SRV_send_himark(void) himark_out.broadcast(msg); } +#endif // AP_DRONECAN_HIMARK_SERVO_SUPPORT void AP_DroneCAN::SRV_send_esc(void) { @@ -1192,6 +1199,7 @@ void AP_DroneCAN::handle_actuator_status(const CanardRxTransfer& transfer, const 0, 0, 0, 0, 0, 0); } +#if AP_DRONECAN_HIMARK_SERVO_SUPPORT /* handle himark ServoInfo message */ @@ -1211,6 +1219,7 @@ void AP_DroneCAN::handle_himark_servoinfo(const CanardRxTransfer& transfer, cons msg.pcb_temp*0.2-40, msg.error_status); } +#endif // AP_DRONECAN_HIMARK_SERVO_SUPPORT #if AP_DRONECAN_VOLZ_FEEDBACK_ENABLED void AP_DroneCAN::handle_actuator_status_Volz(const CanardRxTransfer& transfer, const com_volz_servo_ActuatorStatus& msg) diff --git a/libraries/AP_DroneCAN/AP_DroneCAN.h b/libraries/AP_DroneCAN/AP_DroneCAN.h index eb3b26a824..ed1d79e70b 100644 --- a/libraries/AP_DroneCAN/AP_DroneCAN.h +++ b/libraries/AP_DroneCAN/AP_DroneCAN.h @@ -54,6 +54,10 @@ #define AP_DRONECAN_HOBBYWING_ESC_SUPPORT (BOARD_FLASH_SIZE>1024) #endif +#ifndef AP_DRONECAN_HIMARK_SERVO_SUPPORT +#define AP_DRONECAN_HIMARK_SERVO_SUPPORT (BOARD_FLASH_SIZE>1024) +#endif + // fwd-declare callback classes class AP_DroneCAN_DNA_Server; @@ -145,7 +149,9 @@ private: ///// SRV output ///// void SRV_send_actuator(); void SRV_send_esc(); +#if AP_DRONECAN_HIMARK_SERVO_SUPPORT void SRV_send_himark(); +#endif //scale servo output appropriately before sending int16_t scale_esc_output(uint8_t idx); @@ -253,7 +259,10 @@ private: Canard::Publisher safety_state{canard_iface}; Canard::Publisher arming_status{canard_iface}; Canard::Publisher notify_state{canard_iface}; + +#if AP_DRONECAN_HIMARK_SERVO_SUPPORT Canard::Publisher himark_out{canard_iface}; +#endif #if AP_DRONECAN_SEND_GPS Canard::Publisher gnss_fix2{canard_iface}; @@ -324,6 +333,10 @@ private: void handle_hobbywing_StatusMsg1(const CanardRxTransfer& transfer, const com_hobbywing_esc_StatusMsg1& msg); void handle_hobbywing_StatusMsg2(const CanardRxTransfer& transfer, const com_hobbywing_esc_StatusMsg2& msg); #endif // AP_DRONECAN_HOBBYWING_ESC_SUPPORT + +#if AP_DRONECAN_HIMARK_SERVO_SUPPORT + void handle_himark_servoinfo(const CanardRxTransfer& transfer, const com_himark_servo_ServoInfo &msg); +#endif // incoming button handling void handle_button(const CanardRxTransfer& transfer, const ardupilot_indication_Button& msg); @@ -331,7 +344,6 @@ private: void handle_actuator_status(const CanardRxTransfer& transfer, const uavcan_equipment_actuator_Status& msg); void handle_actuator_status_Volz(const CanardRxTransfer& transfer, const com_volz_servo_ActuatorStatus& msg); void handle_ESC_status(const CanardRxTransfer& transfer, const uavcan_equipment_esc_Status& msg); - void handle_himark_servoinfo(const CanardRxTransfer& transfer, const com_himark_servo_ServoInfo &msg); static bool is_esc_data_index_valid(const uint8_t index); void handle_debug(const CanardRxTransfer& transfer, const uavcan_protocol_debug_LogMessage& msg); void handle_param_get_set_response(const CanardRxTransfer& transfer, const uavcan_protocol_param_GetSetResponse& rsp);