From de85012877ec0dcc9054096bff918403629fca8c Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 30 Mar 2024 09:30:17 +0300 Subject: [PATCH] send hungs fix (adding timeout) --- src/CAN.h | 4 ++++ src/CANController.h | 4 ++++ src/ESP32SJA1000.cpp | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/CAN.h b/src/CAN.h index d8edc06..1e7ad45 100644 --- a/src/CAN.h +++ b/src/CAN.h @@ -4,6 +4,10 @@ #ifndef CAN_H #define CAN_H +#ifndef CAN_MAXTRANSMIT_MS +#define CAN_MAXTRANSMIT_MS 100 +#endif + #ifdef ARDUINO_ARCH_ESP32 #include "ESP32SJA1000.h" #else diff --git a/src/CANController.h b/src/CANController.h index cdaeb94..5c75564 100644 --- a/src/CANController.h +++ b/src/CANController.h @@ -6,6 +6,10 @@ #include +#ifndef CAN_MAXTRANSMIT_MS +#define CAN_MAXTRANSMIT_MS 100 +#endif + class CANControllerClass : public Stream { public: diff --git a/src/ESP32SJA1000.cpp b/src/ESP32SJA1000.cpp index 309e030..4bcff07 100644 --- a/src/ESP32SJA1000.cpp +++ b/src/ESP32SJA1000.cpp @@ -168,8 +168,10 @@ int ESP32SJA1000Class::endPacket() return 0; } + uint32_t tmr1 = millis(); // wait for TX buffer to free while ((readRegister(REG_SR) & 0x04) != 0x04) { + if (millis() - tmr1 >= CAN_MAXTRANSMIT_MS) return 0; yield(); } @@ -202,7 +204,8 @@ int ESP32SJA1000Class::endPacket() // transmit request modifyRegister(REG_CMR, 0x1f, 0x01); } - + + tmr1 = millis(); // wait for TX complete while ((readRegister(REG_SR) & 0x08) != 0x08) { if (readRegister(REG_ECC) == 0xd9) { @@ -210,6 +213,7 @@ int ESP32SJA1000Class::endPacket() return 0; } yield(); + if (millis() - tmr1 >= CAN_MAXTRANSMIT_MS) return 0; } return 1;