| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #ifndef __HJDATADEFINE__
- #define __HJDATADEFINE__
- #include "WinDef.h"
- #include <vector>
- enum class E_ZL_PROTOCAL : uint8_t
- {
- ZL_KEEP, //心跳
- ZL_MO, //监测对象数据 //定时同步
- ZL_MP, //监测点数据
- ZL_RESIST_DATA, //阻力数据
- ZL_RESIST_REAL, //下发实时阻力数据开始
- ZL_TEMP_HUMI, //温湿度数据
- ZL_ALARM_SET, //报警设置
- ZL_ALARM_DATA, //报警数据
- ZL_ALARM_ACK, //报警受理
- ZL_ALARM_HANDLE, //报警处理
- ZL_SVG, //SVG同步
- ZL_REFER, //参考同步
- ZL_ALARM_UNACK, //未确认报警数据
- ZL_MOVE, //扳动数据
- DL_ALARM_ACK = 0x50, //下发报警受理
- DL_ALARM_HANDLE, //下发报警受理
- DL_SYNC, //下发同步
- DL_SUB_NOTIFY, //下发订阅实时
- ZL_UNREALIZED, //未实现
- };
- enum class OPT_TYPE
- {
- OPT_SYNC = 0x00, //同步帧
- OPT_ADD = 0x01, //增加帧
- OPT_DEL = 0x02, //删除帧
- OPT_UPDATE = 0x03, //修改帧
- OPT_SELECT = 0x04, //查询帧
- OPT_RECV = 0x05, //应答帧
- };
- #pragma pack(push, 1)
- typedef struct tagOrDataInfo
- {
- uint8_t readORset : 1; //0 read 1 set
- uint8_t requestORresponse : 1; //0 request 1 response
- uint8_t failORsucc : 1; // 0 fail 1 succ
- uint8_t source : 2; // 0 web 1 vaservice 2 dataservice 3 super
- OPT_TYPE opt : 3; // 1. 增加
- tagOrDataInfo() {};
- tagOrDataInfo(bool readORset1, bool requestORresponse1, bool failORsucc1, uint8_t source1, OPT_TYPE opt1)
- : readORset(readORset1), requestORresponse(requestORresponse1), failORsucc(failORsucc1), source(source1), opt(opt1){};
- }OR_DATA_INFO, * LPOR_DATA_INFO;
- typedef struct tagHjDataHead2{
- DWORD64 head; //头部标识
- DWORD len; //数据内容的长度,等于包长度 – 21 – 2,后面数据长度为9 + len + 2
- BYTE ver : 4; //协议版本
- BYTE res : 4;
- E_ZL_PROTOCAL protocol; //数据包的协议代码
- BYTE subno; //下级的编号 如果是数据中心发往数据服务,则为0
- BYTE subpacknum; //分包总数,0和1表示不分包
- bool subpackend : 1; //分包结束标记
- BYTE subpackno : 7; //分包编号
- DWORD packno; //数据包编号
- OR_DATA_INFO datainfo;
- }HJDATAHEAD2, *LPHJDATAHEAD2;
- typedef struct tagAllDISKSTATUS
- {
- char diskName; //磁盘数量
- int total; //所有磁盘总容量G
- int ofFree; //所有磁盘剩余容量G
- }AllDISKSTATUS, *LPAllDISKSTATUS;
- typedef struct tagGpuInfo
- {
- char name[20];
- WORD utilizationRate; //千分制 GPU使用率
- WORD memusage; //千分制 GPU显存使用率
- WORD temperature; //0.1度 GPU温度
- BYTE decUtilization; //解码使用率
- BYTE encUtilization; //编码使用率
- byte reser[4]; //预留
- }GPUINFO;
- #define MAX_GPU_NUM 4 // 监控的GPU个数(NVIDIA定义的最多GPU个数是64,这里最多只监控4个)
- typedef struct _DISPLAY_INFO
- {
- int nGpuCount; // Gpu个数
- int nGpuUsages[MAX_GPU_NUM]; // Gpu占用率
- DWORD dwTotalMemory; // 总显存大小(KB)
- DWORD dwFreeMemory; // 空闲显存大小(KB)
- }DISPLAY_INFO;
- #define MAX_DISK_NUM 10
- typedef struct SERVER_STATUS
- {
- DWORD64 osRunTime;
- DWORD backTime;
- WORD cpuUsage; //千分制
- GPUINFO gpuUsage[MAX_GPU_NUM];
- WORD memUsage; // 千分制
- AllDISKSTATUS diskUsage[MAX_DISK_NUM];
- WORD cputemp; //CPU温度 摄氏度
- char ipAddr[16];
- }SERVERSTATUS, *HJSERVERSTATUS;
- enum class eDEVICE_TYPE : uint8_t
- {
- DT_ALL = 0x00,
- DT_GT_EDGE = 0x01, //高瞳盒子
- DT_HJ_DOG = 0x02, //慧景软件狗
- DT_HJ_VA = 0x03, //慧景VA
- };
- typedef struct tagDeviceDiscover
- {
- eDEVICE_TYPE type = eDEVICE_TYPE::DT_ALL;
- uint8_t r[31] = { 0 };
- };
- #pragma pack(pop)
- class CHjDataConver{
- public:
- //新协议
- static int conver_sendpack(LPBYTE dest, LPBYTE src, DWORD srclen, BYTE subno, DWORD packno, E_ZL_PROTOCAL protocol, OR_DATA_INFO datainfo, BYTE ver = 0x01)
- {
- static DWORD64 headid = 0xABAAAAAAAAAAAAAA;
- HJDATAHEAD2 head;
- memset(&head, 0, sizeof(HJDATAHEAD2));
- memcpy(&head.head, &headid, sizeof(DWORD64));
- head.subno = subno;
- head.len = htonl(srclen);
- head.packno = htonl(packno);
- head.protocol = protocol;
- head.datainfo = datainfo;
- head.ver = ver;
- int j = 0;
- memcpy(dest, &head, sizeof(HJDATAHEAD2));
- j += sizeof(HJDATAHEAD2);
- memcpy(dest + j, src, srclen);
- j += srclen;
- //check
- dest[j++] = 0x00;
- //end
- dest[j++] = 0xab;
- return j;
- }
-
- //收到一个完整数据包后校验数据
- static bool conver_recvpack(LPBYTE pBuf, int& len)
- {
- if (pBuf == NULL) return false;
- if (len < sizeof(HJDATAHEAD2)) return false;
- static DWORD64 headid = 0xABAAAAAAAAAAAAAA;
- if ((*(DWORD64*)pBuf) != headid) return false;
- if (pBuf[len - 1] != 0xab) return false;
- BYTE check = 0;
- if (pBuf[len - 2] != check) return false;
- auto pHead = (HJDATAHEAD2*)pBuf;
- pHead->len = htonl(pHead->len);
- pHead->packno = htonl(pHead->packno);
- return true;
- }
- };
- //阻力零值补偿
- template<typename T>
- bool OffsetPowerCurve(T& mapData, int offset)
- {
- if (!offset || mapData.empty())
- return false;
- auto tFirst = mapData.begin()->first;
- int count = mapData.size();
- int avr = 0, sum = 0;
- int cnt = 0;
- //计算前1秒内的平均值
- for (auto i = mapData.begin(); i != mapData.end() && i->first < tFirst + 1000; ++i, ++cnt)
- {
- sum += i->second;
- avr = sum / (cnt + 1);
- }
- if (avr == 0) return false;
- int zero = avr;
- for (auto i = mapData.begin(); i != mapData.end(); ++i)
- {
- i->second = (WORD)(short)((short)i->second - zero + offset);
- }
- return true;
- }
- #endif
|