Support CAN FD Error State Indicator
parent
4588024ed0
commit
5a6a1c990a
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue