| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | 
							- #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;
 
- 	}
 
- };
 
- #endif
 
 
  |