|
|
|
@ -12,7 +12,7 @@
|
|
|
|
|
// Created by xin on 2024/2/1.
|
|
|
|
|
//
|
|
|
|
|
#include "IRIS_Method.h"
|
|
|
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
int32_t IRIS_Protocol_Pack(uint8_t Command, uint16_t LenthofIn, uint8_t *BufferIn, uint8_t *PackData) {
|
|
|
|
|
if (PackData == NULL || (LenthofIn != 0 && BufferIn == NULL)) {
|
|
|
|
|
return -1;
|
|
|
|
@ -29,12 +29,10 @@ int32_t IRIS_Protocol_Pack(uint8_t Command, uint16_t LenthofIn, uint8_t *BufferI
|
|
|
|
|
memcpy(&PackData[5], BufferIn, LenthofIn);
|
|
|
|
|
}
|
|
|
|
|
uint16_t crcbytelenth = LenthofIn;
|
|
|
|
|
uint16_t CRC = IRIS_calcCRC(PackData + 5, crcbytelenth);
|
|
|
|
|
PackData[LenthofIn + 5] = (CRC >> 8) & 0xFF;
|
|
|
|
|
PackData[LenthofIn + 6] = CRC & 0xFF;
|
|
|
|
|
uint16_t CRC_CRC = IRIS_calcCRC(PackData + 5, crcbytelenth);
|
|
|
|
|
PackData[LenthofIn + 5] = (CRC_CRC >> 8) & 0xFF;
|
|
|
|
|
PackData[LenthofIn + 6] = CRC_CRC & 0xFF;
|
|
|
|
|
return LenthofIn + 7;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32_t IRIS_STM32_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t *Command, uint8_t *BufferOut) {
|
|
|
|
@ -54,8 +52,8 @@ int32_t IRIS_STM32_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_
|
|
|
|
|
if (PackData[LenthofOut + 6] == 0xEE && PackData[LenthofOut + 5] == 0xEE) {
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
uint16_t CRC = IRIS_calcCRC(PackData + 5, LenthofOut);
|
|
|
|
|
if (CRC != (PackData[LenthofOut + 6] + (PackData[LenthofOut + 5] << 8))) {
|
|
|
|
|
uint16_t CRC_CRC = IRIS_calcCRC(PackData + 5, LenthofOut);
|
|
|
|
|
if (CRC_CRC != (PackData[LenthofOut + 6] + (PackData[LenthofOut + 5] << 8))) {
|
|
|
|
|
return ERROR_CRC;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -88,8 +86,8 @@ int32_t IRIS_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t Comm
|
|
|
|
|
if (PackData[LenthofOut + 6] == 0xEE && PackData[LenthofOut + 5] == 0xEE) {
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
uint16_t CRC = IRIS_calcCRC(PackData + 5, LenthofOut);
|
|
|
|
|
if (CRC != (PackData[LenthofOut + 6] + (PackData[LenthofOut + 5] << 8))) {
|
|
|
|
|
uint16_t CRC_CRC = IRIS_calcCRC(PackData + 5, LenthofOut);
|
|
|
|
|
if (CRC_CRC != (PackData[LenthofOut + 6] + (PackData[LenthofOut + 5] << 8))) {
|
|
|
|
|
return ERROR_CRC;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -106,6 +104,9 @@ int32_t IRIS_Cut_Befor_Header(uint8_t *PackData, uint16_t LenthofIn) {
|
|
|
|
|
if (PackData == NULL) {
|
|
|
|
|
return ERROR_INPUT;
|
|
|
|
|
}
|
|
|
|
|
if (LenthofIn <2) {
|
|
|
|
|
return LenthofIn;
|
|
|
|
|
}
|
|
|
|
|
uint16_t i = 0;
|
|
|
|
|
for (i = 0; i < LenthofIn; i++) {
|
|
|
|
|
if (PackData[i] == 0x55 && PackData[i + 1] == 0xAA) {
|
|
|
|
@ -142,8 +143,8 @@ int32_t IRIS_Check_Data_Valid(uint8_t *PackData, uint16_t LenthofIn) {
|
|
|
|
|
if (PackData[LenthofOut + 6] == 0xEE && PackData[LenthofOut + 5] == 0xEE) {
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
uint16_t CRC = IRIS_calcCRC(PackData + 5, LenthofOut);
|
|
|
|
|
if (CRC != (PackData[LenthofOut + 6] + (PackData[LenthofOut + 5] << 8))) {
|
|
|
|
|
uint16_t CRC_CRC = IRIS_calcCRC(PackData + 5, LenthofOut);
|
|
|
|
|
if (CRC_CRC != (PackData[LenthofOut + 6] + (PackData[LenthofOut + 5] << 8))) {
|
|
|
|
|
return ERROR_CRC;
|
|
|
|
|
}
|
|
|
|
|
}
|