PIDSServerResultMsg.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #pragma once
  2. #include <iostream>
  3. #include "PIDSDataDefine.h"
  4. #include <map>
  5. using namespace std;
  6. class PIDSServerResultMsg
  7. {
  8. public:
  9. // 当前站站号
  10. int CurrentSite;
  11. // 下一站站号
  12. int NextSite;
  13. // 起始站站号
  14. int StartSite;
  15. // 终点站站好
  16. int EndSite;
  17. // 时间是否有效
  18. bool TimeFlag;
  19. // 车门标志位
  20. uint8_t DoorFlag;
  21. // TC2、TC1激活情况
  22. uint8_t PIDSFlag;
  23. std::map<int,int> DynamicLoad;
  24. public:
  25. PIDSServerResultMsg(){};
  26. ~PIDSServerResultMsg(){};
  27. // 反序列化
  28. int32_t Deserialization(uint8_t *data, int length)
  29. {
  30. // 检查数据头尾
  31. if(data[0] != PIDS_DATA_HEAD || data[length-1] != PIDS_DATA_END) {
  32. ErrorL << "Incorrect data head and tail";
  33. return ERR;
  34. }
  35. // 获取数据长度
  36. uint16_t DataLength = ((uint16_t)data[8] << 8 | data[7]);
  37. // 检查数据校验位
  38. int16_t crc = Crc16::GetCRC16(data, 9, DataLength);
  39. // if(data[length-3] != ((crc & 0xFF00) >> 8) || data[length-2] != (crc & 0x00FF)){
  40. // ErrorL << "Incorrect data check digit";
  41. // }
  42. // 数据校验通过提取数据
  43. this->CurrentSite = data[9];
  44. this->NextSite = data[10];
  45. this->StartSite = data[11];
  46. this->EndSite = data[12];
  47. this->TimeFlag = data[13] ? true:false;
  48. // 时间
  49. // 标志
  50. this->DoorFlag = data[21];
  51. this->PIDSFlag = data[22];
  52. // 提取动态负载
  53. int id = 1;
  54. for(int i = 0; i < 12; i+=2){
  55. this->DynamicLoad[id] = (uint16_t)data[24 + i] << 8 | data[23 + i];
  56. id++;
  57. }
  58. return OK;
  59. }
  60. };