适配下位机STM32 unpack
This commit is contained in:
@ -19,37 +19,70 @@ int32_t IRIS_Protocol_Pack(uint8_t Command,uint16_t LenthofIn, uint8_t *BufferIn
|
||||
PackData[LenthofIn+5] = CRC & 0xFF;
|
||||
PackData[LenthofIn+6] = (CRC >> 8) & 0xFF;
|
||||
return LenthofIn+7;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
if(PackData[0] != 0x55 || PackData[1] != 0xAA)
|
||||
{
|
||||
return ERROR_HEADER;
|
||||
}
|
||||
|
||||
uint16_t LenthofOut = PackData[3] + (PackData[4] << 8);
|
||||
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)))
|
||||
{
|
||||
return ERROR_CRC;
|
||||
}
|
||||
if(LenthofOut == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
*Command=PackData[2] ;
|
||||
|
||||
memcpy(BufferOut,&PackData[5],LenthofOut);
|
||||
return LenthofOut;
|
||||
}
|
||||
|
||||
|
||||
int32_t IRIS_Protocol_Unpack(uint8_t *PackData, uint16_t LenthofIn, uint8_t Command, uint8_t *BufferOut)
|
||||
{
|
||||
if( PackData == NULL || BufferOut == NULL)
|
||||
{
|
||||
return -100;
|
||||
return ERROR_INPUT;
|
||||
}
|
||||
if(PackData[0] != 0x55 || PackData[1] != 0xAA)
|
||||
{
|
||||
return -200;
|
||||
return ERROR_HEADER
|
||||
}
|
||||
if(PackData[2] != Command)
|
||||
{
|
||||
return -300;
|
||||
return ERROR_COMMAND;
|
||||
}
|
||||
uint16_t LenthofOut = PackData[3] + (PackData[4] << 8);
|
||||
if(LenthofOut > LenthofIn - 7)
|
||||
{
|
||||
return -400;
|
||||
return ERROR_NOT_ENOUGH_DATA;
|
||||
}
|
||||
uint16_t CRC = IRIS_calcCRC(PackData, LenthofOut+5);
|
||||
if(CRC != (PackData[LenthofOut+5] + (PackData[LenthofOut+6] << 8)))
|
||||
{
|
||||
return -1;
|
||||
return ERROR_CRC;
|
||||
}
|
||||
if(LenthofOut == 0)
|
||||
{
|
||||
@ -65,7 +98,7 @@ int32_t IRIS_Cut_Befor_Header(uint8_t *PackData, uint16_t LenthofIn )
|
||||
{
|
||||
if( PackData == NULL )
|
||||
{
|
||||
return -1;
|
||||
return ERROR_INPUT
|
||||
}
|
||||
uint16_t i = 0;
|
||||
for(i = 0; i < LenthofIn; i++)
|
||||
@ -87,6 +120,36 @@ int32_t IRIS_Cut_Befor_Header(uint8_t *PackData, uint16_t LenthofIn )
|
||||
return LenthofOut;
|
||||
}
|
||||
|
||||
int32_t IRIS_Check_Data_Valid(uint8_t *PackData, uint16_t LenthofIn)
|
||||
{
|
||||
if( PackData == NULL)
|
||||
{
|
||||
return ERROR_INPUT;
|
||||
}
|
||||
if (LenthofIn < 7)
|
||||
{
|
||||
return ERROR_NOT_ENOUGH_DATA;
|
||||
/* code */
|
||||
}
|
||||
|
||||
if(PackData[0] != 0x55 || PackData[1] != 0xAA)
|
||||
{
|
||||
return ERROR_HEADER;
|
||||
}
|
||||
uint16_t LenthofOut = PackData[3] + (PackData[4] << 8);
|
||||
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)))
|
||||
{
|
||||
return ERROR_CRC;
|
||||
}
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user