| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /**
- * @File: PackData.c
- * @Author: Kinve JQ
- * @Version: V0.1
- * @Date: 2018.09.29
- * @Brief: 封包与校验
- * @Modify:
- 2018.09.29.Kinve:1.创建文件
- **/
- #include "PackData.h"
- u8 CrcData ( u8 *Data, u8 Len )
- {
- u8 i, crc = 0;
- for ( i = 0; i < Len; i++ )
- {
- crc ^= Data[i];
- }
- return crc;
- }
- #define DATA_LEN 4
- //AA 长度1[类型 .....] 校验码 BB
- u8 CheckData ( u8 *Data, u8 Len, pDataBuff *Out )
- {
- //u8 tail_pos = 0; //尾位
- //u8 head_pos = 0; //0xF0 头位置
- u8 i, size;
- for ( i = 0; i < Len - 1; i++ )
- {
- if ( Data[i + 0] == 0xAA ) //检查头尾"@" .. "#"
- {
- //head_pos = i;
- if ( Len - i >= DATA_LEN ) //剩余数据>=5
- {
- size = Data[i + 1];
- if ( Data[i + size + 3] == 0xBB )
- {
- Out->Data = &Data[i];
- Out->Len = DATA_LEN + size;
- if ( CrcData ( &(Out->Data[2]), Out->Len-DATA_LEN ) == Data[i + size + 2] ) //校验码
- {
- return 1;
- }
- }
- }
- }
- }
- return 0;
- }
- static u8 PackBuff[50];
- u8 PackData ( u8 *Data, u8 Len, u8 *Out )
- {
- u8 i;
- if ( Len < sizeof ( PackBuff ) - DATA_LEN )
- {
- PackBuff[0] = 0xAA;
- PackBuff[1] = Len;
- for ( i = 0; i < Len; i++ )
- {
- PackBuff[i + 2] = Data[i];
- }
- PackBuff[i + 2] = CrcData ( Data, Len );
- PackBuff[i + 3] = 0xBB;
- //拷贝到Out
- for ( i = 0; i < Len + DATA_LEN; i++ )
- {
- *(Out+i) = PackBuff[i];
- }
- return Len + DATA_LEN;
- }
- return 0;
- }
- /********************* (C) COPYRIGHT Kinve JQ *******END OF FILE ********/
|