PIDSServerResultMsg.h 2.2 KB

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