diff --git a/core/driver/socketcan/socket_can.cpp b/core/driver/socketcan/socket_can.cpp index 454469e..4543a7d 100644 --- a/core/driver/socketcan/socket_can.cpp +++ b/core/driver/socketcan/socket_can.cpp @@ -90,6 +90,15 @@ void SocketCan::initialize(shared_ptr socketCanConfig) { // socketcanInitialize(); } +SocketCan::~SocketCan() { + if (m_thread) { + endListenThread(); + } + if (m_socketCanFd > 0) { + close(m_socketCanFd); + m_socketCanFd = -1; + } +} void SocketCan::startListen() { startListenThread(); } @@ -375,7 +384,9 @@ void SocketCan::socketCanReadThreadLoop() { if (canframe.can_id & CAN_ERR_FLAG) { // /usr/include/linux/can/error.h - logger->error("rx can-bus error event {:x},{}", canframe.can_id, StringUtils().bytesToString(canframe.data, canframe.len)); + // logger->error("rx can-bus error event {:x},{}", canframe.can_id, StringUtils().bytesToString(canframe.data, canframe.len)); + m_canTriggerError = true; + break; } else { // logger->info("TX:{} {} {}", canframe.can_id, canframe.__res0, canframe.__res1); if (!tryUpdateTxState(canframe)) { diff --git a/core/driver/socketcan/socket_can.hpp b/core/driver/socketcan/socket_can.hpp index ddf2c43..53b1dda 100644 --- a/core/driver/socketcan/socket_can.hpp +++ b/core/driver/socketcan/socket_can.hpp @@ -75,7 +75,6 @@ class SocketCan : public enable_shared_from_this { private: unique_ptr m_thread; - unique_ptr m_monitorThread; int m_socketCanFd = -1; bool m_startListen = false; SocketCanUtils m_socketCanUtils; @@ -83,6 +82,7 @@ class SocketCan : public enable_shared_from_this { shared_ptr m_socketCanConfig; TxState m_txState; + bool m_canTriggerError; public: typedef enum { @@ -122,8 +122,10 @@ class SocketCan : public enable_shared_from_this { nod::signal)> onSocketCanFrame; SocketCan(){}; + ~SocketCan(); void initialize(shared_ptr socketCanConfig); + bool isError() { return m_canTriggerError; } void startListen();