Message: LIN: Fix checksum

This commit is contained in:
Bryant Jones
2026-10-21 19:46:48 -04:00
committed by Kyle Schwarz
parent 6ac041cadc
commit fd8f7b328f
2 changed files with 14 additions and 0 deletions
@@ -152,6 +152,7 @@ static std::vector<uint8_t> EncodeFromMessageLIN(std::shared_ptr<Frame> frame, c
linmsg->linMsgType == LINMessage::Type::LIN_UPDATE_RESPONDER) && dataLen > 0; linmsg->linMsgType == LINMessage::Type::LIN_UPDATE_RESPONDER) && dataLen > 0;
if(hasData) { if(hasData) {
LINMessage::calcChecksum(*linmsg);
// len includes data bytes + 1 checksum byte // len includes data bytes + 1 checksum byte
linpacket->CoreMiniBitsLIN.len = static_cast<uint16_t>(dataLen + 1); linpacket->CoreMiniBitsLIN.len = static_cast<uint16_t>(dataLen + 1);
std::copy(linmsg->data.begin(), linmsg->data.begin() + dataLen, linpacket->data); std::copy(linmsg->data.begin(), linmsg->data.begin() + dataLen, linpacket->data);
+13
View File
@@ -174,6 +174,19 @@ TEST_F(LINEncoderDecoderTest, TransmitMessageBreakOnlySetsCommander) {
EXPECT_EQ(lin->CoreMiniBitsLIN.BreakOnly, 1); EXPECT_EQ(lin->CoreMiniBitsLIN.BreakOnly, 1);
} }
TEST_F(LINEncoderDecoderTest, TransmitMessageCalculatesChecksum) {
auto message = std::make_shared<icsneo::LINMessage>(static_cast<uint8_t>(0x22u));
message->network = icsneo::Network::NetID::LIN_02;
message->linMsgType = icsneo::LINMessage::Type::LIN_UPDATE_RESPONDER;
message->isEnhancedChecksum = true;
message->data = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
auto bytes = TransmitMessage::EncodeFromMessage(message, 1, report);
ASSERT_GE(bytes.size(), sizeof(TransmitMessage));
auto* tx = reinterpret_cast<TransmitMessage*>(bytes.data());
auto* lin = reinterpret_cast<HardwareLINPacket*>(tx->commonHeader);
EXPECT_EQ(lin->CoreMiniBitsLIN.LINByte9, 0xB6);
}
TEST_F(LINEncoderDecoderTest, PacketEncoderControllerWithDataTest) { TEST_F(LINEncoderDecoderTest, PacketEncoderControllerWithDataTest) {
std::vector<uint8_t> bytestream; std::vector<uint8_t> bytestream;
auto message = std::make_shared<icsneo::LINMessage>(static_cast<uint8_t>(0x11u)); auto message = std::make_shared<icsneo::LINMessage>(static_cast<uint8_t>(0x11u));