From 5a6a1c990a0df1854e6b0c0e46dc967ef8b86b00 Mon Sep 17 00:00:00 2001 From: Paul Hollinsky Date: Wed, 17 Apr 2019 17:03:38 -0400 Subject: [PATCH] Support CAN FD Error State Indicator --- communication/message/neomessage.cpp | 2 ++ communication/packet/canpacket.cpp | 2 ++ include/icsneo/communication/message/canmessage.h | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/communication/message/neomessage.cpp b/communication/message/neomessage.cpp index 1774997..191eb7c 100644 --- a/communication/message/neomessage.cpp +++ b/communication/message/neomessage.cpp @@ -30,6 +30,7 @@ neomessage_t icsneo::CreateNeoMessage(const std::shared_ptr message) { can.status.canfdRTR = canmsg->isRemote; can.status.canfdFDF = canmsg->isCANFD; can.status.canfdBRS = canmsg->baudrateSwitch; + can.status.canfdESI = canmsg->errorStateIndicator; break; } case Network::Type::Ethernet: { @@ -66,6 +67,7 @@ std::shared_ptr icsneo::CreateMessageFromNeoMessage(const neomessage_t* canmsg->isRemote = can.status.remoteFrame | can.status.canfdRTR; canmsg->isCANFD = can.status.canfdFDF; canmsg->baudrateSwitch = can.status.canfdBRS; + canmsg->errorStateIndicator = can.status.canfdESI; return canmsg; } default: diff --git a/communication/packet/canpacket.cpp b/communication/packet/canpacket.cpp index 5c61699..2bb57c8 100644 --- a/communication/packet/canpacket.cpp +++ b/communication/packet/canpacket.cpp @@ -27,6 +27,7 @@ std::shared_ptr HardwareCANPacket::DecodeToMessage(const std::vector if(data->header.EDL && data->timestamp.IsExtended) { // CAN FD msg->isCANFD = true; msg->baudrateSwitch = data->header.BRS; // CAN FD Baudrate Switch + msg->errorStateIndicator = data->header.ESI; if(length > 8) { switch(length) { // CAN FD Length Decoding case 0x9: @@ -200,6 +201,7 @@ bool HardwareCANPacket::EncodeFromMessage(const CANMessage& message, std::vector uint8_t fdStatusByte = lengthNibble; if(message.baudrateSwitch) fdStatusByte |= 0x80; // BRS status bit + // The firmware does not yet support transmitting ESI result.push_back(fdStatusByte); } else { // TODO Support high voltage wakeup, bitwise-or in 0x8 here to enable diff --git a/include/icsneo/communication/message/canmessage.h b/include/icsneo/communication/message/canmessage.h index 7c1dc80..a41cb8f 100644 --- a/include/icsneo/communication/message/canmessage.h +++ b/include/icsneo/communication/message/canmessage.h @@ -9,10 +9,11 @@ class CANMessage : public Message { public: uint32_t arbid; uint8_t dlcOnWire; - bool isRemote = false; + bool isRemote = false; // Not allowed if CAN FD bool isExtended = false; bool isCANFD = false; bool baudrateSwitch = false; // CAN FD only + bool errorStateIndicator = false; // CAN FD only }; }