Fix:CRC16 code check bug.
This commit is contained in:
parent
859a4b8ce2
commit
524fb9db30
|
@ -30,6 +30,7 @@ public:
|
|||
|
||||
private:
|
||||
void CheckSerialNumber(const void *buf, const size_t &count);
|
||||
void ChecCRC16Code(const void *buf, const size_t &count);
|
||||
void ResetCheckCode(const void *buf, const size_t &count);
|
||||
void ReplySelectSucceed(std::shared_ptr<LinuxTest> &mock, const int &uartFd);
|
||||
void IpcMissionProtocolHandle(std::shared_ptr<LinuxTest> &mock, const int &uartFd, const void *buf, size_t count);
|
||||
|
|
|
@ -29,7 +29,7 @@ unsigned char ASK_FEED_WATCH_DOG[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x81,
|
|||
unsigned char ASK_SET_FEEDING_CYCLE[] = {
|
||||
0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x81, 0x04, 0x00, 0x0F, 0x01, 0x01, 0x01, 0xA7, 0x9A};
|
||||
unsigned char REPLY_SET_FEEDING_CYCLE[] = {
|
||||
0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x0F, 0x01, 0x01, 0x01, 0x52, 0x26};
|
||||
0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x0D, 0x01, 0x52, 0x26};
|
||||
McuProtocolTestTool::McuProtocolTestTool()
|
||||
{
|
||||
mSerialNumberCheck = 0;
|
||||
|
@ -42,6 +42,7 @@ void McuProtocolTestTool::Init(std::shared_ptr<LinuxTest> &mock, const UartInfo
|
|||
auto api_write = [=, &mock](int fd, const void *buf, size_t count) {
|
||||
McuProtocolTestTool::PrintHexadecimalData(buf, count, WRITE_PRINT);
|
||||
CheckSerialNumber(buf, count);
|
||||
ChecCRC16Code(buf, count);
|
||||
IpcMissionProtocolHandle(mock, uartFd, buf, count);
|
||||
CutOffPowerSupplyProtocolHandle(mock, uartFd, buf, count);
|
||||
FeedWatchDogProtocolHandle(mock, uartFd, buf, count);
|
||||
|
@ -70,10 +71,15 @@ void McuProtocolTestTool::CheckSerialNumber(const void *buf, const size_t &count
|
|||
mSerialNumberCheck++;
|
||||
}
|
||||
}
|
||||
void McuProtocolTestTool::ChecCRC16Code(const void *buf, const size_t &count)
|
||||
{
|
||||
short code = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH);
|
||||
EXPECT_EQ(memcmp((unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &code, 2), 0);
|
||||
}
|
||||
void McuProtocolTestTool::ResetCheckCode(const void *buf, const size_t &count)
|
||||
{
|
||||
short checkCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH);
|
||||
checkCode = htons(checkCode);
|
||||
// checkCode = htons(checkCode);
|
||||
memcpy((unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &checkCode, PROTOCOL_CHECK_CODE_LENGTH);
|
||||
}
|
||||
void McuProtocolTestTool::ReplySelectSucceed(std::shared_ptr<LinuxTest> &mock, const int &uartFd)
|
||||
|
@ -193,6 +199,7 @@ void McuProtocolTestTool::FeedingCycleProtocolInit(std::shared_ptr<LinuxTest> &m
|
|||
{
|
||||
LockProtocolHandle();
|
||||
memcpy(REPLY_SET_FEEDING_CYCLE + 2, (unsigned char *)buf + 2, PROTOCOL_SERIAL_NUMBER_LENGTH);
|
||||
ResetCheckCode(REPLY_SET_FEEDING_CYCLE, sizeof(REPLY_SET_FEEDING_CYCLE));
|
||||
ReplySelectSucceed(mock, uartFd);
|
||||
constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_SET_FEEDING_CYCLE) - PROTOCOL_DATA_KEY_HEAD_LENGTH;
|
||||
auto apiReadKeyHead = [=](int fd, void *buf, size_t count) {
|
||||
|
|
|
@ -39,17 +39,13 @@ void LittleEndianHandle::HostByteOrderConversion(ProtocolPacket &packet)
|
|||
packet.mHead = ntohs(packet.mHead);
|
||||
packet.mCommand = ntohs(packet.mCommand);
|
||||
packet.mLength = ntohs(packet.mLength);
|
||||
LogInfo("========2====== packet.mCheckCode = 0x%x\n", packet.mCheckCode);
|
||||
packet.mCheckCode = ntohs(packet.mCheckCode);
|
||||
LogInfo("=========2===== packet.mCheckCode = 0x%x\n", packet.mCheckCode);
|
||||
packet.mSerialNumber = ntohl(packet.mSerialNumber);
|
||||
}
|
||||
bool LittleEndianHandle::CheckoutTheCheckCode(const ProtocolPacket &packet)
|
||||
{
|
||||
short code = calculate_check_sum(mProtocolData, mProtocolDataLength - sizeof(short));
|
||||
LogInfo("============== packet.mCheckCode = 0x%x\n", packet.mCheckCode);
|
||||
code = ntohs(code);
|
||||
LogInfo("============== code = 0x%x\n", code);
|
||||
code = ntohs(code); // TODO:
|
||||
if (code == packet.mCheckCode) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -117,7 +117,7 @@ void McuProtocol::PushMcuData(const void *buf, const size_t &length)
|
|||
}
|
||||
LogInfo("PushMcuData\n");
|
||||
memcpy(data, buf, length);
|
||||
ProtocolHandle::PrintHexadecimalData(data, length);
|
||||
ProtocolHandle::PrintHexadecimalData(data, length, "PushMcuData=");
|
||||
std::lock_guard<std::mutex> locker(mMutex);
|
||||
SingleMcuPacket packet(data, length);
|
||||
mMcuDataList.push_back(packet);
|
||||
|
|
|
@ -94,7 +94,7 @@ void ProtocolHandle::MakeNoUserDataPacket(const std::shared_ptr<VProtocolParam>
|
|||
BigEndianConversion(packet);
|
||||
memcpy(mProtocolData, &packet, KEY_HEAD_LENGTH);
|
||||
packet.mCheckCode = calculate_check_sum(mProtocolData, dataLength - sizeof(short));
|
||||
packet.mCheckCode = BigEndianConversion(packet.mCheckCode);
|
||||
// packet.mCheckCode = BigEndianConversion(packet.mCheckCode);
|
||||
memcpy(mProtocolData + KEY_HEAD_LENGTH, &packet.mCheckCode, sizeof(short));
|
||||
mProtocolDataLength = dataLength;
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ void ProtocolHandle::MakeAskSetFeedingCyclePacket(const std::shared_ptr<VProtoco
|
|||
memcpy(mProtocolData, &packet, KEY_HEAD_LENGTH);
|
||||
memcpy(mProtocolData + KEY_HEAD_LENGTH, feedingCycle, PARAM_DATA_LENGTH);
|
||||
packet.mCheckCode = calculate_check_sum(mProtocolData, dataLength - sizeof(short));
|
||||
packet.mCheckCode = BigEndianConversion(packet.mCheckCode);
|
||||
// packet.mCheckCode = BigEndianConversion(packet.mCheckCode);
|
||||
memcpy(mProtocolData + dataLength - sizeof(short), &packet.mCheckCode, sizeof(short));
|
||||
mProtocolDataLength = dataLength;
|
||||
}
|
||||
|
@ -149,6 +149,7 @@ void ProtocolHandle::AnalyzeProtocolPacket(void)
|
|||
(unsigned char *)mProtocolData + mProtocolDataLength - sizeof(unsigned short),
|
||||
sizeof(unsigned short));
|
||||
HostByteOrderConversion(packet);
|
||||
PrintHexadecimalData(&packet, sizeof(ProtocolPacket), "HostByteOrderConversion=");
|
||||
if (CheckoutTheCheckCode(packet) == false) {
|
||||
LogError("CheckoutTheCheckCode failed.\n");
|
||||
return;
|
||||
|
|
|
@ -28,7 +28,7 @@ typedef struct protocol_packet
|
|||
unsigned int mSerialNumber;
|
||||
short mCommand;
|
||||
short mLength;
|
||||
char *mData;
|
||||
// char *mData;
|
||||
short mCheckCode;
|
||||
} ProtocolPacket;
|
||||
#pragma pack()
|
||||
|
|
Loading…
Reference in New Issue
Block a user