ZlDataDefine.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #ifndef __HJDATADEFINE__
  2. #define __HJDATADEFINE__
  3. #include "WinDef.h"
  4. #include <vector>
  5. enum class E_ZL_PROTOCAL : uint8_t
  6. {
  7. ZL_KEEP, //心跳
  8. ZL_MO, //监测对象数据 //定时同步
  9. ZL_MP, //监测点数据
  10. ZL_RESIST_DATA, //阻力数据
  11. ZL_RESIST_REAL, //下发实时阻力数据开始
  12. ZL_TEMP_HUMI, //温湿度数据
  13. ZL_ALARM_SET, //报警设置
  14. ZL_ALARM_DATA, //报警数据
  15. ZL_ALARM_ACK, //报警受理
  16. ZL_ALARM_HANDLE, //报警处理
  17. ZL_SVG, //SVG同步
  18. ZL_REFER, //参考同步
  19. ZL_ALARM_UNACK, //未确认报警数据
  20. ZL_MOVE, //扳动数据
  21. DL_ALARM_ACK = 0x50, //下发报警受理
  22. DL_ALARM_HANDLE, //下发报警受理
  23. DL_SYNC, //下发同步
  24. DL_SUB_NOTIFY, //下发订阅实时
  25. ZL_UNREALIZED, //未实现
  26. };
  27. enum class OPT_TYPE
  28. {
  29. OPT_SYNC = 0x00, //同步帧
  30. OPT_ADD = 0x01, //增加帧
  31. OPT_DEL = 0x02, //删除帧
  32. OPT_UPDATE = 0x03, //修改帧
  33. OPT_SELECT = 0x04, //查询帧
  34. OPT_RECV = 0x05, //应答帧
  35. };
  36. #pragma pack(push, 1)
  37. typedef struct tagOrDataInfo
  38. {
  39. uint8_t readORset : 1; //0 read 1 set
  40. uint8_t requestORresponse : 1; //0 request 1 response
  41. uint8_t failORsucc : 1; // 0 fail 1 succ
  42. uint8_t source : 2; // 0 web 1 vaservice 2 dataservice 3 super
  43. OPT_TYPE opt : 3; // 1. 增加
  44. tagOrDataInfo() {};
  45. tagOrDataInfo(bool readORset1, bool requestORresponse1, bool failORsucc1, uint8_t source1, OPT_TYPE opt1)
  46. : readORset(readORset1), requestORresponse(requestORresponse1), failORsucc(failORsucc1), source(source1), opt(opt1){};
  47. }OR_DATA_INFO, * LPOR_DATA_INFO;
  48. typedef struct tagHjDataHead2{
  49. DWORD64 head; //头部标识
  50. DWORD len; //数据内容的长度,等于包长度 – 21 – 2,后面数据长度为9 + len + 2
  51. BYTE ver : 4; //协议版本
  52. BYTE res : 4;
  53. E_ZL_PROTOCAL protocol; //数据包的协议代码
  54. BYTE subno; //下级的编号 如果是数据中心发往数据服务,则为0
  55. BYTE subpacknum; //分包总数,0和1表示不分包
  56. bool subpackend : 1; //分包结束标记
  57. BYTE subpackno : 7; //分包编号
  58. DWORD packno; //数据包编号
  59. OR_DATA_INFO datainfo;
  60. }HJDATAHEAD2, *LPHJDATAHEAD2;
  61. typedef struct tagAllDISKSTATUS
  62. {
  63. char diskName; //磁盘数量
  64. int total; //所有磁盘总容量G
  65. int ofFree; //所有磁盘剩余容量G
  66. }AllDISKSTATUS, *LPAllDISKSTATUS;
  67. typedef struct tagGpuInfo
  68. {
  69. char name[20];
  70. WORD utilizationRate; //千分制 GPU使用率
  71. WORD memusage; //千分制 GPU显存使用率
  72. WORD temperature; //0.1度 GPU温度
  73. BYTE decUtilization; //解码使用率
  74. BYTE encUtilization; //编码使用率
  75. byte reser[4]; //预留
  76. }GPUINFO;
  77. #define MAX_GPU_NUM 4 // 监控的GPU个数(NVIDIA定义的最多GPU个数是64,这里最多只监控4个)
  78. typedef struct _DISPLAY_INFO
  79. {
  80. int nGpuCount; // Gpu个数
  81. int nGpuUsages[MAX_GPU_NUM]; // Gpu占用率
  82. DWORD dwTotalMemory; // 总显存大小(KB)
  83. DWORD dwFreeMemory; // 空闲显存大小(KB)
  84. }DISPLAY_INFO;
  85. #define MAX_DISK_NUM 10
  86. typedef struct SERVER_STATUS
  87. {
  88. DWORD64 osRunTime;
  89. DWORD backTime;
  90. WORD cpuUsage; //千分制
  91. GPUINFO gpuUsage[MAX_GPU_NUM];
  92. WORD memUsage; // 千分制
  93. AllDISKSTATUS diskUsage[MAX_DISK_NUM];
  94. WORD cputemp; //CPU温度 摄氏度
  95. char ipAddr[16];
  96. }SERVERSTATUS, *HJSERVERSTATUS;
  97. enum class eDEVICE_TYPE : uint8_t
  98. {
  99. DT_ALL = 0x00,
  100. DT_GT_EDGE = 0x01, //高瞳盒子
  101. DT_HJ_DOG = 0x02, //慧景软件狗
  102. DT_HJ_VA = 0x03, //慧景VA
  103. };
  104. typedef struct tagDeviceDiscover
  105. {
  106. eDEVICE_TYPE type = eDEVICE_TYPE::DT_ALL;
  107. uint8_t r[31] = { 0 };
  108. };
  109. #pragma pack(pop)
  110. class CHjDataConver{
  111. public:
  112. //新协议
  113. 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)
  114. {
  115. static DWORD64 headid = 0xABAAAAAAAAAAAAAA;
  116. HJDATAHEAD2 head;
  117. memset(&head, 0, sizeof(HJDATAHEAD2));
  118. memcpy(&head.head, &headid, sizeof(DWORD64));
  119. head.subno = subno;
  120. head.len = htonl(srclen);
  121. head.packno = htonl(packno);
  122. head.protocol = protocol;
  123. head.datainfo = datainfo;
  124. head.ver = ver;
  125. int j = 0;
  126. memcpy(dest, &head, sizeof(HJDATAHEAD2));
  127. j += sizeof(HJDATAHEAD2);
  128. memcpy(dest + j, src, srclen);
  129. j += srclen;
  130. //check
  131. dest[j++] = 0x00;
  132. //end
  133. dest[j++] = 0xab;
  134. return j;
  135. }
  136. //收到一个完整数据包后校验数据
  137. static bool conver_recvpack(LPBYTE pBuf, int& len)
  138. {
  139. if (pBuf == NULL) return false;
  140. if (len < sizeof(HJDATAHEAD2)) return false;
  141. static DWORD64 headid = 0xABAAAAAAAAAAAAAA;
  142. if ((*(DWORD64*)pBuf) != headid) return false;
  143. if (pBuf[len - 1] != 0xab) return false;
  144. BYTE check = 0;
  145. if (pBuf[len - 2] != check) return false;
  146. auto pHead = (HJDATAHEAD2*)pBuf;
  147. pHead->len = htonl(pHead->len);
  148. pHead->packno = htonl(pHead->packno);
  149. return true;
  150. }
  151. };
  152. #endif