diff --git a/include/serialization/publisher.hpp b/include/serialization/publisher.hpp index c4962c6..0ce9afd 100644 --- a/include/serialization/publisher.hpp +++ b/include/serialization/publisher.hpp @@ -76,7 +76,7 @@ class DronecanPeriodicPublisher : public DronecanPublisher { public: DronecanPeriodicPublisher(float frequency) : DronecanPublisher(), - PUB_PERIOD_MS(static_cast(1000.0f / std::clamp(frequency, 0.001f, 100.0f))) {}; + PUB_PERIOD_MS(static_cast(1000.0f / std::clamp(frequency, 0.001f, 1000.0f))) {}; inline void spinOnce() { auto crnt_time_ms = platformSpecificGetTimeMs(); diff --git a/include/serialization/subscriber.hpp b/include/serialization/subscriber.hpp index 6707b2a..9b053fa 100644 --- a/include/serialization/subscriber.hpp +++ b/include/serialization/subscriber.hpp @@ -19,7 +19,6 @@ #include "uavcan/equipment/safety/ArmingStatus.h" #include "uavcan/equipment/hardpoint/Command.h" - template struct DronecanSubscriberTraits; @@ -46,7 +45,7 @@ DEFINE_SUBSCRIBER_TRAITS(BeepCommand_t, DEFINE_SUBSCRIBER_TRAITS(LightsCommand_t, uavcanSubscribeIndicationLightsCommand, dronecan_equipment_indication_lights_command_deserialize) -DEFINE_SUBSCRIBER_TRAITS(ArmingStatus, +DEFINE_SUBSCRIBER_TRAITS(SafetyArmingStatus, uavcanSubscribeArmingStatus, dronecan_equipment_safety_arming_status_deserialize) DEFINE_SUBSCRIBER_TRAITS(HardpointCommand, diff --git a/include/serialization/uavcan/equipment/safety/ArmingStatus.h b/include/serialization/uavcan/equipment/safety/ArmingStatus.h index c35ae2a..ae2110f 100644 --- a/include/serialization/uavcan/equipment/safety/ArmingStatus.h +++ b/include/serialization/uavcan/equipment/safety/ArmingStatus.h @@ -18,7 +18,7 @@ #define UAVCAN_EQUIPMENT_SAFETY_ARMING_STATUS_MESSAGE_SIZE 1 #define UAVCAN_EQUIPMENT_SAFETY_ARMING_STATUS UAVCAN_EXPAND(UAVCAN_EQUIPMENT_SAFETY_ARMING_STATUS) -enum class ArmingStatus: uint8_t { +enum class SafetyArmingStatus: uint8_t { STATUS_DISARMED = 0, STATUS_FULLY_ARMED = 255, }; @@ -29,7 +29,7 @@ extern "C" { static inline int8_t dronecan_equipment_safety_arming_status_deserialize( - const CanardRxTransfer* transfer, ArmingStatus* obj) + const CanardRxTransfer* transfer, SafetyArmingStatus* obj) { canardDecodeScalar(transfer, 0, 8, false, obj); diff --git a/platform_specific/socketcan/can_driver.c b/platform_specific/socketcan/can_driver.c index fcda60d..fe5ca2c 100644 --- a/platform_specific/socketcan/can_driver.c +++ b/platform_specific/socketcan/can_driver.c @@ -24,12 +24,12 @@ int16_t canDriverInit(uint32_t can_speed, uint8_t can_driver_idx) { int16_t canDriverReceive(CanardCANFrame* const rx_frame, uint8_t can_driver_idx) { (void)can_driver_idx; rx_frame->iface_id = 0; - return socketcanReceive(&socket_can_instance, rx_frame, 10); + return socketcanReceive(&socket_can_instance, rx_frame, 0); } int16_t canDriverTransmit(const CanardCANFrame* const tx_frame, uint8_t can_driver_idx) { (void)can_driver_idx; - return socketcanTransmit(&socket_can_instance, tx_frame, 10); + return socketcanTransmit(&socket_can_instance, tx_frame, 0); } uint64_t canDriverGetErrorCount() { diff --git a/src/dronecan.c b/src/dronecan.c index 52c5be0..ef978d1 100644 --- a/src/dronecan.c +++ b/src/dronecan.c @@ -314,12 +314,16 @@ static uint8_t uavcanProcessSending() { static bool uavcanProcessReceiving(uint32_t crnt_time_ms) { CanardCANFrame rx_frame; - int16_t res = canDriverReceive(&rx_frame, CAN_DRIVER_FIRST); - if (res) { - uint64_t crnt_time_us = crnt_time_ms * 1000; - canardHandleRxFrame(&g_canard, &rx_frame, crnt_time_us); - return true; + for (size_t idx = 0; idx < 10; idx++) { + int16_t res = canDriverReceive(&rx_frame, CAN_DRIVER_FIRST); + if (res) { + uint64_t crnt_time_us = crnt_time_ms * 1000; + canardHandleRxFrame(&g_canard, &rx_frame, crnt_time_us); + } else { + break; + } } + return false; }