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
	 Fancy code
						Fancy code