From 63ea136c2712b10b61fe7e2e1f9e45bf3bcc5911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20=C3=96ster?= Date: Thu, 19 Sep 2024 22:12:44 +0300 Subject: [PATCH] Add new Event for CAN-FD overflow --- Software/Software.ino | 6 +++++- Software/src/devboard/utils/events.cpp | 3 +++ Software/src/devboard/utils/events.h | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Software/Software.ino b/Software/Software.ino index e213b778..be717aff 100644 --- a/Software/Software.ino +++ b/Software/Software.ino @@ -48,6 +48,7 @@ unsigned long previousMillisUpdateVal = 0; // CAN parameters CAN_device_t CAN_cfg; // CAN Config const int rx_queue_size = 10; // Receive Queue size +volatile bool send_ok = 0; #ifdef DUAL_CAN #include "src/lib/pierremolinaro-acan2515/ACAN2515.h" @@ -942,7 +943,10 @@ void transmit_can(CAN_frame* tx_frame, int interface) { for (uint8_t i = 0; i < MCP2518Frame.len; i++) { MCP2518Frame.data[i] = tx_frame->data.u8[i]; } - canfd.tryToSend(MCP2518Frame); + send_ok = canfd.tryToSend(MCP2518Frame); + if (!send_ok) { + set_event(EVENT_CANFD_BUFFER_FULL, interface); + } #else // Interface not compiled, and settings try to use it set_event(EVENT_INTERFACE_MISSING, interface); #endif //CAN_FD diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index 7ed7b121..93a981cf 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -134,6 +134,7 @@ void init_events(void) { } events.entries[EVENT_CANFD_INIT_FAILURE].level = EVENT_LEVEL_WARNING; + events.entries[EVENT_CANFD_BUFFER_FULL].level = EVENT_LEVEL_WARNING; events.entries[EVENT_CAN_OVERRUN].level = EVENT_LEVEL_INFO; events.entries[EVENT_CAN_RX_FAILURE].level = EVENT_LEVEL_ERROR; events.entries[EVENT_CAN2_RX_FAILURE].level = EVENT_LEVEL_WARNING; @@ -234,6 +235,8 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) { switch (event) { case EVENT_CANFD_INIT_FAILURE: return "CAN-FD initialization failed. Check hardware or bitrate settings"; + case EVENT_CANFD_BUFFER_FULL: + return "CAN-FD buffer overflowed. Some CAN messages were not sent. Contact developers."; case EVENT_CAN_OVERRUN: return "CAN message failed to send within defined time. Contact developers, CPU load might be too high."; case EVENT_CAN_RX_FAILURE: diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index b536790f..d28c7d36 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -6,7 +6,7 @@ // #define INCLUDE_EVENTS_TEST // Enable to run an event test loop, see events_test_on_target.cpp -#define EE_MAGIC_HEADER_VALUE 0x0012 // 0x0000 to 0xFFFF +#define EE_MAGIC_HEADER_VALUE 0x0013 // 0x0000 to 0xFFFF #define GENERATE_ENUM(ENUM) ENUM, #define GENERATE_STRING(STRING) #STRING, @@ -27,6 +27,7 @@ #define EVENTS_ENUM_TYPE(XX) \ XX(EVENT_CANFD_INIT_FAILURE) \ + XX(EVENT_CANFD_BUFFER_FULL) \ XX(EVENT_CAN_OVERRUN) \ XX(EVENT_CAN_RX_FAILURE) \ XX(EVENT_CAN2_RX_FAILURE) \