Support CAN FD Error State Indicator

pull/13/head
Paul Hollinsky 2019-04-17 17:03:38 -04:00
parent 4588024ed0
commit 5a6a1c990a
3 changed files with 6 additions and 1 deletions

View File

@ -30,6 +30,7 @@ neomessage_t icsneo::CreateNeoMessage(const std::shared_ptr<Message> message) {
can.status.canfdRTR = canmsg->isRemote; can.status.canfdRTR = canmsg->isRemote;
can.status.canfdFDF = canmsg->isCANFD; can.status.canfdFDF = canmsg->isCANFD;
can.status.canfdBRS = canmsg->baudrateSwitch; can.status.canfdBRS = canmsg->baudrateSwitch;
can.status.canfdESI = canmsg->errorStateIndicator;
break; break;
} }
case Network::Type::Ethernet: { case Network::Type::Ethernet: {
@ -66,6 +67,7 @@ std::shared_ptr<Message> icsneo::CreateMessageFromNeoMessage(const neomessage_t*
canmsg->isRemote = can.status.remoteFrame | can.status.canfdRTR; canmsg->isRemote = can.status.remoteFrame | can.status.canfdRTR;
canmsg->isCANFD = can.status.canfdFDF; canmsg->isCANFD = can.status.canfdFDF;
canmsg->baudrateSwitch = can.status.canfdBRS; canmsg->baudrateSwitch = can.status.canfdBRS;
canmsg->errorStateIndicator = can.status.canfdESI;
return canmsg; return canmsg;
} }
default: default:

View File

@ -27,6 +27,7 @@ std::shared_ptr<CANMessage> HardwareCANPacket::DecodeToMessage(const std::vector
if(data->header.EDL && data->timestamp.IsExtended) { // CAN FD if(data->header.EDL && data->timestamp.IsExtended) { // CAN FD
msg->isCANFD = true; msg->isCANFD = true;
msg->baudrateSwitch = data->header.BRS; // CAN FD Baudrate Switch msg->baudrateSwitch = data->header.BRS; // CAN FD Baudrate Switch
msg->errorStateIndicator = data->header.ESI;
if(length > 8) { if(length > 8) {
switch(length) { // CAN FD Length Decoding switch(length) { // CAN FD Length Decoding
case 0x9: case 0x9:
@ -200,6 +201,7 @@ bool HardwareCANPacket::EncodeFromMessage(const CANMessage& message, std::vector
uint8_t fdStatusByte = lengthNibble; uint8_t fdStatusByte = lengthNibble;
if(message.baudrateSwitch) if(message.baudrateSwitch)
fdStatusByte |= 0x80; // BRS status bit fdStatusByte |= 0x80; // BRS status bit
// The firmware does not yet support transmitting ESI
result.push_back(fdStatusByte); result.push_back(fdStatusByte);
} else { } else {
// TODO Support high voltage wakeup, bitwise-or in 0x8 here to enable // TODO Support high voltage wakeup, bitwise-or in 0x8 here to enable

View File

@ -9,10 +9,11 @@ class CANMessage : public Message {
public: public:
uint32_t arbid; uint32_t arbid;
uint8_t dlcOnWire; uint8_t dlcOnWire;
bool isRemote = false; bool isRemote = false; // Not allowed if CAN FD
bool isExtended = false; bool isExtended = false;
bool isCANFD = false; bool isCANFD = false;
bool baudrateSwitch = false; // CAN FD only bool baudrateSwitch = false; // CAN FD only
bool errorStateIndicator = false; // CAN FD only
}; };
} }