diff --git a/core/driver/socketcan/socket_can.cpp b/core/driver/socketcan/socket_can.cpp index 70cd350..c1e96a7 100644 --- a/core/driver/socketcan/socket_can.cpp +++ b/core/driver/socketcan/socket_can.cpp @@ -250,8 +250,6 @@ int SocketCan::dumpCanDriverInfo(string canDevice, int baudrate) { can_filter_t zerofilter = {0}; int recv_own_msgs = 0; /* 0 = disabled (default), 1 = enabled */ int localloop = 0; - size_t optlen; - can_err_mask_t err_mask = 0; int ret = 0; fd_set readfds, readFileDescriptors; timeval waitTime; diff --git a/core/driver/socketcan/socket_can.hpp b/core/driver/socketcan/socket_can.hpp index 8d9587a..ddf2c43 100644 --- a/core/driver/socketcan/socket_can.hpp +++ b/core/driver/socketcan/socket_can.hpp @@ -97,6 +97,27 @@ class SocketCan : public enable_shared_from_this { kOvertime, } SocketCanError_t; + static string SocketCanError_t2Str(SocketCanError_t error) { + switch (error) { + case kSuccess: + return "kSuccess"; + case kErrorFrameFormat: + return "kErrorFrameFormat"; + case kCANFDNotSupported: + return "kCANFDNotSupported"; + case kWriteError: + return "kWriteError"; + case kParamError: + return "kParamError"; + case kDeviceBusy: + return "kDeviceBusy"; + case kOvertime: + return "kOvertime"; + default: + return "Unknown"; + } + } + public: nod::signal)> onSocketCanFrame; diff --git a/core/driver/socketcan/socket_can_frame.cpp b/core/driver/socketcan/socket_can_frame.cpp index 339698a..bd31634 100644 --- a/core/driver/socketcan/socket_can_frame.cpp +++ b/core/driver/socketcan/socket_can_frame.cpp @@ -7,8 +7,8 @@ shared_ptr SocketCanFrame::createExtDataFrame(uint32_t id, uint8 shared_ptr canframe = make_shared(); if (len > 8) len = 8; canframe->m_id = id; - canframe->m_canIdentifier = kextFrame; - canframe->m_canFrameType = kdataframe; + canframe->m_canIdentifier = socketcan::kextFrame; + canframe->m_canFrameType = socketcan::kdataframe; canframe->m_dlc = len; memcpy(canframe->m_data, data, len); return canframe; @@ -18,8 +18,8 @@ shared_ptr SocketCanFrame::createStdDataFrame(uint32_t id, uint8 shared_ptr canframe = make_shared(); if (len > 8) len = 8; canframe->m_id = id; - canframe->m_canIdentifier = kstdFrame; - canframe->m_canFrameType = kdataframe; + canframe->m_canIdentifier = socketcan::kstdFrame; + canframe->m_canFrameType = socketcan::kdataframe; canframe->m_dlc = len; memcpy(canframe->m_data, data, len); return canframe; @@ -28,56 +28,59 @@ shared_ptr SocketCanFrame::createStdDataFrame(uint32_t id, uint8 shared_ptr SocketCanFrame::createExtRemoteFrame(uint32_t id) { shared_ptr canframe = make_shared(); canframe->m_id = id; - canframe->m_canIdentifier = kextFrame; - canframe->m_canFrameType = kremoteframe; + canframe->m_canIdentifier = socketcan::kextFrame; + canframe->m_canFrameType = socketcan::kremoteframe; canframe->m_dlc = 0; return canframe; } shared_ptr SocketCanFrame::createStdRemoteFrame(uint32_t id) { shared_ptr canframe = make_shared(); canframe->m_id = id; - canframe->m_canIdentifier = kstdFrame; - canframe->m_canFrameType = kremoteframe; + canframe->m_canIdentifier = socketcan::kstdFrame; + canframe->m_canFrameType = socketcan::kremoteframe; canframe->m_dlc = 0; return canframe; } shared_ptr SocketCanFrame::createFrame(canfd_frame_t frame) { shared_ptr canframe = make_shared(); canframe->m_id = frame.can_id & ~CAN_EFF_FLAG & ~CAN_RTR_FLAG & ~CAN_ERR_FLAG; - canframe->m_canIdentifier = frame.can_id & CAN_EFF_FLAG ? kextFrame : kstdFrame; - canframe->m_canFrameType = frame.can_id & CAN_RTR_FLAG ? kremoteframe : kdataframe; + canframe->m_canIdentifier = frame.can_id & CAN_EFF_FLAG ? socketcan::kextFrame : socketcan::kstdFrame; + canframe->m_canFrameType = frame.can_id & CAN_RTR_FLAG ? socketcan::kremoteframe : socketcan::kdataframe; canframe->m_dlc = frame.len; memcpy(canframe->m_data, frame.data, frame.len); return canframe; } -void SocketCanFrame::setCanIdentifier(can_identifier_t canIdentifier) { this->m_canIdentifier = canIdentifier; } -void SocketCanFrame::setFanFrameType(can_frame_type_t fanFrameType) { this->m_canFrameType = fanFrameType; } +void SocketCanFrame::setCanIdentifier(socketcan::can_identifier_t canIdentifier) { this->m_canIdentifier = canIdentifier; } +void SocketCanFrame::setFanFrameType(socketcan::can_frame_type_t fanFrameType) { this->m_canFrameType = fanFrameType; } void SocketCanFrame::setId(uint32_t id) { this->m_id = id; } -uint32_t SocketCanFrame::getId() { return m_id; } -can_identifier_t SocketCanFrame::getCanIdentifier() { return m_canIdentifier; } -can_frame_type_t SocketCanFrame::getFanFrameType() { return m_canFrameType; } +uint32_t SocketCanFrame::getId() { return m_id; } +socketcan::can_identifier_t SocketCanFrame::getCanIdentifier() { return m_canIdentifier; } +socketcan::can_frame_type_t SocketCanFrame::getFanFrameType() { return m_canFrameType; } -string SocketCanFrame::toString() { // - return fmt::format("|{:0>8x}|{:>6}|{}|{}({})|", getId(), // - getFanFrameType() == kdataframe ? "data" : "remote", // - getCanIdentifier() == kextFrame ? "ext" : "std", // +string SocketCanFrame::toString() { // + return fmt::format("|{:0>8x}|{:>6}|{}|{}({})|", getId(), // + getFanFrameType() == socketcan::kdataframe ? "data" : "remote", // + getCanIdentifier() == socketcan::kextFrame ? "ext" : "std", // StringUtils().bytesToString(m_data, m_dlc), m_dlc); } +uint8_t *SocketCanFrame::getData() { return m_data; } +uint8_t SocketCanFrame::getDlc() { return m_dlc; } + canfd_frame_t SocketCanFrame::getCanFrame() { canfd_frame_t frame; memset(&frame, 0, sizeof(frame)); - if (m_canIdentifier == kstdFrame) { + if (m_canIdentifier == socketcan::kstdFrame) { frame.can_id = (m_id & CAN_SFF_MASK); } else { frame.can_id = (m_id & CAN_EFF_MASK) | CAN_EFF_FLAG; } - if (m_canFrameType == kremoteframe) { + if (m_canFrameType == socketcan::kremoteframe) { frame.can_id |= CAN_RTR_FLAG; frame.len = m_dlc; } else { diff --git a/core/driver/socketcan/socket_can_frame.hpp b/core/driver/socketcan/socket_can_frame.hpp index b475506..6c7ef0c 100644 --- a/core/driver/socketcan/socket_can_frame.hpp +++ b/core/driver/socketcan/socket_can_frame.hpp @@ -34,6 +34,7 @@ using namespace core; typedef struct can_filter can_filter_t; typedef struct canfd_frame canfd_frame_t; +namespace socketcan { typedef enum { kstdFrame, kextFrame, @@ -43,14 +44,15 @@ typedef enum { kdataframe, kremoteframe, } can_frame_type_t; +} // namespace socketcan class SocketCanFrame { private: - uint32_t m_id = 0; - can_identifier_t m_canIdentifier = kstdFrame; - can_frame_type_t m_canFrameType = kdataframe; - uint8_t m_data[8] = {0}; - uint8_t m_dlc = 0; + uint32_t m_id = 0; + socketcan::can_identifier_t m_canIdentifier = socketcan::kstdFrame; + socketcan::can_frame_type_t m_canFrameType = socketcan::kdataframe; + uint8_t m_data[8] = {0}; + uint8_t m_dlc = 0; public: static shared_ptr createExtDataFrame(uint32_t id, uint8_t *data, size_t len); @@ -59,12 +61,15 @@ class SocketCanFrame { static shared_ptr createStdRemoteFrame(uint32_t id); static shared_ptr createFrame(canfd_frame_t frame); - void setId(uint32_t id); - uint32_t getId(); - can_frame_type_t getFanFrameType(); - void setFanFrameType(can_frame_type_t fanFrameType); - can_identifier_t getCanIdentifier(); - void setCanIdentifier(can_identifier_t canIdentifier); + void setId(uint32_t id); + uint32_t getId(); + socketcan::can_frame_type_t getFanFrameType(); + void setFanFrameType(socketcan::can_frame_type_t fanFrameType); + socketcan::can_identifier_t getCanIdentifier(); + void setCanIdentifier(socketcan::can_identifier_t canIdentifier); + + uint8_t *getData(); + uint8_t getDlc(); canfd_frame_t getCanFrame();