123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #pragma once
- #include <iostream>
- #include "PIDSDataDefine.h"
- using namespace std;
- class PIDSServerResultMsg
- {
- private:
- // 当前站站号
- int CurrentSite;
- // 下一站站号
- int NextSite;
- // 起始站站号
- int StartSite;
- // 终点站站好
- int EndSite;
- // 时间是否有效
- bool TimeFlag;
- // 时间
- PIDSTime time;
- // 车门标志位
- uint8_t DoorFlag;
- // TC2、TC1激活情况
- uint8_t PIDSFlag;
- // 1号车厢的动态负荷
- int DynamicLoad_1;
- // 2号车厢的动态负荷
- int DynamicLoad_2;
- // 3号车厢的动态负荷
- int DynamicLoad_3;
- // 4号车厢的动态负荷
- int DynamicLoad_4;
- // 5号车厢的动态负荷
- int DynamicLoad_5;
- // 6号车厢的动态负荷
- int DynamicLoad_6;
- public:
- PIDSServerResultMsg(){};
- ~PIDSServerResultMsg(){};
-
- // 反序列化
- int32_t Deserialization(uint8_t *data, int length)
- {
- // 检查数据头尾
- if(data[0] != PIDS_DATA_HEAD || data[length] != PIDS_DATA_END) {
- ErrorL << "Incorrect data head and tail";
- return ERR;
- }
- // 获取数据长度
- uint16_t DataLength = ((uint16_t)data[8] << 8 | data[7]);
- // 检查数据校验位
- int16_t crc = Crc16::GetCRC16(data, 9, DataLength);
- if((data[length-2] != (crc & 0xFF00)) >> 8 || (data[length-1] != crc & 0x00FF)){
- ErrorL << "Incorrect data check digit";
- }
- // 数据校验通过提取数据
- this->CurrentSite = data[9];
- this->NextSite = data[10];
- this->StartSite = data[11];
- this->EndSite = data[12];
- this->TimeFlag = data[13] ? true:false;
- // 时间
- this->DoorFlag = data[21];
- this->PIDSFlag = data[22];
- // 提取动态负载
- this->DynamicLoad_1 = (uint16_t)data[24] << 8 | data[23];
- this->DynamicLoad_2 = (uint16_t)data[26] << 8 | data[25];
- this->DynamicLoad_3 = (uint16_t)data[28] << 8 | data[27];
- this->DynamicLoad_4 = (uint16_t)data[30] << 8 | data[29];
- this->DynamicLoad_5 = (uint16_t)data[32] << 8 | data[31];
- this->DynamicLoad_6 = (uint16_t)data[34] << 8 | data[33];
- return OK;
- }
- };
|