fbb92a07a121f7d5ad164eedfa4b8fcece46b3df.svn-base 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /************************************************************************
  2. * ---- 居加居 ----
  3. * 文件名: PackData.c
  4. * 编写人员: Kinve JQ
  5. * 说明:
  6. * 版本: V0.1
  7. * 编写日期: 2018-09-30
  8. * 程序维护:
  9. * 维护记录:
  10. * 2018-09-30.Kinve:1.创建文件
  11. * 免责声明:
  12. * (c) Author Kinve JQ. All rights reserved.
  13. **************************************************************************/
  14. #include "PackData.h"
  15. u8 CrcData ( u8 *Data, u8 Len )
  16. {
  17. u8 i, crc = 0;
  18. for ( i = 0; i < Len; i++ )
  19. {
  20. crc ^= Data[i];
  21. }
  22. return crc;
  23. }
  24. #define DATA_LEN 4
  25. //AA 长度1[类型 .....] 校验码 BB
  26. u8 CheckData ( u8 *Data, u8 Len, pDataBuff *Out )
  27. {
  28. //u8 tail_pos = 0; //尾位
  29. //u8 head_pos = 0; //0xF0 头位置
  30. u8 i, size;
  31. for ( i = 0; i < Len - 1; i++ )
  32. {
  33. if ( Data[i + 0] == 0xAA ) //检查头尾"@" .. "#"
  34. {
  35. //head_pos = i;
  36. if ( Len - i >= DATA_LEN ) //剩余数据>=5
  37. {
  38. size = Data[i + 1];
  39. if ( Data[i + size + 3] == 0xBB )
  40. {
  41. Out->Data = &Data[i];
  42. Out->Len = DATA_LEN + size;
  43. if ( CrcData ( &(Out->Data[2]), Out->Len-DATA_LEN ) == Data[i + size + 2] ) //校验码
  44. {
  45. return 1;
  46. }
  47. }
  48. }
  49. }
  50. }
  51. return 0;
  52. }
  53. static u8 PackBuff[50];
  54. u8 PackData ( u8 *Data, u8 Len, u8 *Out )
  55. {
  56. u8 i;
  57. if ( Len < sizeof ( PackBuff ) - DATA_LEN )
  58. {
  59. PackBuff[0] = 0xAA;
  60. PackBuff[1] = Len;
  61. for ( i = 0; i < Len; i++ )
  62. {
  63. PackBuff[i + 2] = Data[i];
  64. }
  65. PackBuff[i + 2] = CrcData ( Data, Len );
  66. PackBuff[i + 3] = 0xBB;
  67. //拷贝到Out
  68. for ( i = 0; i < Len + DATA_LEN; i++ )
  69. {
  70. *(Out+i) = PackBuff[i];
  71. }
  72. return Len + DATA_LEN;
  73. }
  74. return 0;
  75. }
  76. /********************* (C) COPYRIGHT Kinve JQ *******END OF FILE ********/