diff --git a/src/Communication_Protocol.h b/src/Communication_Protocol.h index 23426ba..6803fa2 100644 --- a/src/Communication_Protocol.h +++ b/src/Communication_Protocol.h @@ -4,6 +4,7 @@ #include +#include "IRIS_Method.h" #include // DEFINE The protocol Here //Forexample @@ -29,46 +30,6 @@ */ -#define ERROR_NOT_ENOUGH_DATA -200 -#define ERROR_HEADER -300 -#define ERROR_COMMAND -400 -#define ERROR_INPUT -500 -#define ERROR_CRC -600 - - -// 成功返回打包后的数据长度 -// -1: Error -// 成功返回打包后的数据长度 -int32_t IRIS_Protocol_Pack(uint8_t Command,uint16_t LenthofIn, uint8_t *BufferIn, uint8_t *PackData); - -// 解包函数 PackData 是接收到的数据 LenthofIn 是数据长度 Command 是命令 BufferOut 是输出 -// 下位机使用的打包函数 Command 是输出 -// 成功返回解包后的数据长度 -// 0: 该命令返回无参数 -// 错误返回ERRor -// 成功返回解包后的数据长度 -int32_t IRIS_STM32_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t *Command, uint8_t *BufferOut); - -// 解包函数 PackData 是接收到的数据 LenthofIn 是数据长度 Command 是命令输入 BufferOut 是输出 上位机使用 -// 成功返回解包后的数据长度 -// 0: 该命令返回无参数 -// 错误返回ERRor -// 成功返回解包后的数据长度 -int32_t IRIS_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t Command, uint8_t *BufferOut); - -// 定义裁切命令 -// 成功返回裁切后的数据长度 -// -1: Error -int32_t IRIS_Cut_Befor_Header(uint8_t *PackData, uint16_t LenthofIn ); - -// 检查数据是否有效 -// 有效返回值1 -// 错误返回ERRor -int32_t IRIS_Check_Data_Valid(uint8_t *PackData, uint16_t LenthofIn ); - - -// 返回CRC校验值 -uint16_t IRIS_calcCRC(const void *pBuffer, uint16_t bufferSize); #endif diff --git a/src/Communication_Protocol.c b/src/IRIS_Method.c similarity index 80% rename from src/Communication_Protocol.c rename to src/IRIS_Method.c index 7f583e8..518f514 100644 --- a/src/Communication_Protocol.c +++ b/src/IRIS_Method.c @@ -1,4 +1,17 @@ -#include "Communication_Protocol.h" +/** + ****************************************************************************** + * @file : IRIS_Method.c + * @author : xin + * @brief : None + * @attention : None + * @date : 2024/2/1 + ****************************************************************************** + */ + +// +// Created by xin on 2024/2/1. +// +#include "IRIS_Method.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)) @@ -29,7 +42,7 @@ int32_t IRIS_Protocol_Pack(uint8_t Command,uint16_t LenthofIn, uint8_t *BufferIn int32_t IRIS_STM32_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t *Command, uint8_t *BufferOut) { - + if( PackData == NULL || BufferOut == NULL) { return ERROR_INPUT; @@ -39,13 +52,13 @@ int32_t IRIS_STM32_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_ return ERROR_HEADER; } - uint16_t LenthofOut = PackData[3] + (PackData[4] << 8); + uint16_t LenthofOut = PackData[4] + (PackData[3] << 8)-2; if(LenthofOut > LenthofIn - 7) { return ERROR_NOT_ENOUGH_DATA; } uint16_t CRC = IRIS_calcCRC(PackData, LenthofOut+5); - if(CRC != (PackData[LenthofOut+5] + (PackData[LenthofOut+6] << 8))) + if(CRC != (PackData[LenthofOut+6] + (PackData[LenthofOut+5] << 8))) { return ERROR_CRC; } @@ -74,13 +87,13 @@ int32_t IRIS_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t Comm { return ERROR_COMMAND; } - uint16_t LenthofOut = PackData[3] + (PackData[4] << 8); + uint16_t LenthofOut = PackData[4] + (PackData[3] << 8)-2; if(LenthofOut > LenthofIn - 7) { return ERROR_NOT_ENOUGH_DATA; } uint16_t CRC = IRIS_calcCRC(PackData, LenthofOut+5); - if(CRC != (PackData[LenthofOut+5] + (PackData[LenthofOut+6] << 8))) + if(CRC != (PackData[LenthofOut+6] + (PackData[LenthofOut+5] << 8))) { return ERROR_CRC; } @@ -110,8 +123,8 @@ int32_t IRIS_Cut_Befor_Header(uint8_t *PackData, uint16_t LenthofIn ) } if(i == LenthofIn) { - //清空数据 - memset(PackData,0,LenthofIn); + //清空数据 + memset(PackData,0,LenthofIn); return 0; } @@ -131,23 +144,23 @@ int32_t IRIS_Check_Data_Valid(uint8_t *PackData, uint16_t LenthofIn) return ERROR_NOT_ENOUGH_DATA; /* code */ } - + if(PackData[0] != 0x55 || PackData[1] != 0xAA) { return ERROR_HEADER; } - uint16_t LenthofOut = PackData[3] + (PackData[4] << 8); + uint16_t LenthofOut = PackData[4] + (PackData[3] << 8)-2; if(LenthofOut > LenthofIn - 7) { return ERROR_NOT_ENOUGH_DATA; } uint16_t CRC = IRIS_calcCRC(PackData, LenthofOut+5); - if(CRC != (PackData[LenthofOut+5] + (PackData[LenthofOut+6] << 8))) + if(CRC != (PackData[LenthofOut+6] + (PackData[LenthofOut+5] << 8))) { return ERROR_CRC; } return 1; - + } diff --git a/src/IRIS_Method.h b/src/IRIS_Method.h new file mode 100644 index 0000000..cfbf7c9 --- /dev/null +++ b/src/IRIS_Method.h @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * @file : IRIS_Method.h + * @author : xin + * @brief : None + * @attention : None + * @date : 2024/2/1 + ****************************************************************************** + */ + +// +// Created by xin on 2024/2/1. +// + +#ifndef IRIS_COMMUNICATION_PROTOCOL_IRIS_METHOD_H +#define IRIS_COMMUNICATION_PROTOCOL_IRIS_METHOD_H + +#define ERROR_NOT_ENOUGH_DATA -200 +#define ERROR_HEADER -300 +#define ERROR_COMMAND -400 +#define ERROR_INPUT -500 +#define ERROR_CRC -600 + + +// 成功返回打包后的数据长度 +// -1: Error +// 成功返回打包后的数据长度 +int32_t IRIS_Protocol_Pack(uint8_t Command,uint16_t LenthofIn, uint8_t *BufferIn, uint8_t *PackData); + +// 解包函数 PackData 是接收到的数据 LenthofIn 是数据长度 Command 是命令 BufferOut 是输出 +// 下位机使用的打包函数 Command 是输出 +// 成功返回解包后的数据长度 +// 0: 该命令返回无参数 +// 错误返回ERRor +// 成功返回解包后的数据长度 +int32_t IRIS_STM32_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t *Command, uint8_t *BufferOut); + +// 解包函数 PackData 是接收到的数据 LenthofIn 是数据长度 Command 是命令输入 BufferOut 是输出 上位机使用 +// 成功返回解包后的数据长度 +// 0: 该命令返回无参数 +// 错误返回ERRor +// 成功返回解包后的数据长度 +int32_t IRIS_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t Command, uint8_t *BufferOut); + +// 定义裁切命令 +// 成功返回裁切后的数据长度 +// -1: Error +int32_t IRIS_Cut_Befor_Header(uint8_t *PackData, uint16_t LenthofIn ); + +// 检查数据是否有效 +// 有效返回值1 +// 错误返回ERRor +int32_t IRIS_Check_Data_Valid(uint8_t *PackData, uint16_t LenthofIn ); + + +// 返回CRC校验值 +uint16_t IRIS_calcCRC(const void *pBuffer, uint16_t bufferSize); + +#endif //IRIS_COMMUNICATION_PROTOCOL_IRIS_METHOD_H