#pragma once #include #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; } };