bb8636ccc17f419a06d6808f7eadef112475face.svn-base 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * @File: PackData.c
  3. * @Author: Kinve JQ
  4. * @Version: V0.1
  5. * @Date: 2018.09.29
  6. * @Brief: 封包与校验
  7. * @Modify:
  8. 2018.09.29.Kinve:1.创建文件
  9. **/
  10. #include "PackData.h"
  11. u8 CrcData ( u8 *Data, u8 Len )
  12. {
  13. u8 i, crc = 0;
  14. for ( i = 0; i < Len; i++ )
  15. {
  16. crc ^= Data[i];
  17. }
  18. return crc;
  19. }
  20. #define DATA_LEN 4
  21. //AA 长度1[类型 .....] 校验码 BB
  22. u8 CheckData ( u8 *Data, u8 Len, pDataBuff *Out )
  23. {
  24. //u8 tail_pos = 0; //尾位
  25. //u8 head_pos = 0; //0xF0 头位置
  26. u8 i, size;
  27. for ( i = 0; i < Len - 1; i++ )
  28. {
  29. if ( Data[i + 0] == 0xAA ) //检查头尾"@" .. "#"
  30. {
  31. //head_pos = i;
  32. if ( Len - i >= DATA_LEN ) //剩余数据>=5
  33. {
  34. size = Data[i + 1];
  35. if ( Data[i + size + 3] == 0xBB )
  36. {
  37. Out->Data = &Data[i];
  38. Out->Len = DATA_LEN + size;
  39. if ( CrcData ( &(Out->Data[2]), Out->Len-DATA_LEN ) == Data[i + size + 2] ) //校验码
  40. {
  41. return 1;
  42. }
  43. }
  44. }
  45. }
  46. }
  47. return 0;
  48. }
  49. static u8 PackBuff[50];
  50. u8 PackData ( u8 *Data, u8 Len, u8 *Out )
  51. {
  52. u8 i;
  53. if ( Len < sizeof ( PackBuff ) - DATA_LEN )
  54. {
  55. PackBuff[0] = 0xAA;
  56. PackBuff[1] = Len;
  57. for ( i = 0; i < Len; i++ )
  58. {
  59. PackBuff[i + 2] = Data[i];
  60. }
  61. PackBuff[i + 2] = CrcData ( Data, Len );
  62. PackBuff[i + 3] = 0xBB;
  63. //拷贝到Out
  64. for ( i = 0; i < Len + DATA_LEN; i++ )
  65. {
  66. *(Out+i) = PackBuff[i];
  67. }
  68. return Len + DATA_LEN;
  69. }
  70. return 0;
  71. }
  72. /********************* (C) COPYRIGHT Kinve JQ *******END OF FILE ********/