From 109ffe9a777658936a38d0c146579a67c60a0d17 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 11 五月 2017 17:48:48 +0800
Subject: [PATCH] 

---
 ProxyConsole/proxyconsole-hc.cpp |  269 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 197 insertions(+), 72 deletions(-)

diff --git a/ProxyConsole/proxyconsole-hc.cpp b/ProxyConsole/proxyconsole-hc.cpp
index 57907dd..b29f2b0 100644
--- a/ProxyConsole/proxyconsole-hc.cpp
+++ b/ProxyConsole/proxyconsole-hc.cpp
@@ -37,7 +37,7 @@
 #define  HPR_OK 0
 #define  HPR_ERROR -1
 
-#define MAX_NUM 16
+#define MAX_NUM 32
 #define MAX 1024
 #define fileread_buf 128
 
@@ -54,6 +54,7 @@
 	ET_HCNET_DECODER_POPWIN, // 3
 	ET_HCNET_DECODER_LOGO, // 4
 	ET_HCNET_DECODER_ALARMOUT, // 5
+	ET_HCNET_DECODER_LOGO_ALARMOUT, // 6
 	ET_HCNET_DECODER__LAST,
 	ET__LAST
 };
@@ -78,7 +79,7 @@
 	int channel;
 	uint16_t byWallNo;
 	uint16_t dwSubWinNo;
-	uint16_t dwWinNo;
+	std::vector<uint16_t> dwWinNo;
 	uint16_t lAlarmOutPort;
 };
 
@@ -97,14 +98,14 @@
 pthread_t thread_no[MAX_NUM];
 pthread_t thread_noEQ[MAX_NUM];
 pthread_t thread_Real[MAX_NUM];
-sockinfo equipments[16];
-int sock_upper[16],sock_down[16];
-int rsock_down[16];
+sockinfo equipments[MAX_NUM];
+int sock_upper[MAX_NUM],sock_down[MAX_NUM];
+int rsock_down[MAX_NUM];
 char byte_array[2600];
 int bbbbb=0;
 int CommandEquipIdx=0;
-int CommandKind[16];
-char sessionIDs[16][5];
+int CommandKind[MAX_NUM];
+char sessionIDs[MAX_NUM][5];
 
 char linkequip_ip[32];
 char linkequip_port[10];
@@ -113,8 +114,8 @@
 
 int NUM=0,equip_num=0;
 
-int SupperConnectedflag[16]={0,},EquipConnectedflag[16]={0,},serverflag=0,GPIO_flag=0;
-int EquipRealAlarmConnectedflag[16];
+int SupperConnectedflag[MAX_NUM]={0,},EquipConnectedflag[MAX_NUM]={0,},serverflag=0,GPIO_flag=0;
+int EquipRealAlarmConnectedflag[MAX_NUM];
 timer_t* timerID;
 
 std::vector<std::string> SupperConnectedIP;
@@ -139,12 +140,12 @@
 int GPIO_READ(int PortNum);
 void GPIO_WRITE(int PortNum,unsigned char DATA);
 int RealEventStart(int Idx);
-int gCapturing[16];
-char sessions[16][10];
+int gCapturing[MAX_NUM];
+char sessions[MAX_NUM][10];
 
 int n=0,m=0,k=0;
-unsigned char DownBuffer[16][614000];
-int DownCount[16];
+unsigned char DownBuffer[MAX_NUM][614000];
+int DownCount[MAX_NUM];
 int gCount=0;
 int gCount30s=0;
 int gCount2s=0;
@@ -170,10 +171,10 @@
 	gCount2s++;
 	if(gCount2s>=8){
 		gCount2s=0;
-		for(;CommandEquipIdx<16;CommandEquipIdx++){//connected
+		for(;CommandEquipIdx<MAX_NUM;CommandEquipIdx++){//connected
 			if(EquipConnectedflag[CommandEquipIdx]>0) break;
 		}
-		if(CommandEquipIdx>=16){
+		if(CommandEquipIdx>=MAX_NUM){
 			CommandEquipIdx = 0;
 		}
 	}
@@ -287,11 +288,12 @@
 
 int hcnetsdk_get_userid(const std::string& decode_ip)
 {
-	hcnetsdk_user_t::const_iterator iter = g_hcnetsdk_user.find(decode_ip);
-	if(iter == g_hcnetsdk_user.end())
-		return -1;
-	else
-		return iter->second;
+	return hcnetsdk_user;
+	//hcnetsdk_user_t::const_iterator iter = g_hcnetsdk_user.find(decode_ip);
+	//if(iter == g_hcnetsdk_user.end())
+	//	return -1;
+	//else
+	//	return iter->second;
 }
 
 void CALLBACK hcnetsdk_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
@@ -299,7 +301,7 @@
 	printf("hcnetsdk_ExceptionCallBack: %d\n", int(dwType));
 }
 
-int hcnetsdk_alarm_alarmout(LONG lUserID, const HCNetCameraConfig& camConfig)
+int hcnetsdk_alarm_alarmout(LONG lUserID, const HCNetCameraConfig& camConfig, bool isDisalarm)
 {
 	//鎶ヨ鏃堕棿娈�
 	NET_DVR_SCHEDTIME net_dvr_schedtime = {0};
@@ -320,17 +322,28 @@
 	}
 		
 	//寮�鍚鎶�
-	if(NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,1) == FALSE){
-		printf("NET_DVR_SetAlarmOut failed, err: %d\n", NET_DVR_GetLastError());
-	}
+	//if(NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,1) == FALSE){
+	//	printf("NET_DVR_SetAlarmOut failed, err: %d\n", NET_DVR_GetLastError());
+	//}
 	last_alarmout = time(NULL);
 	
-	sleep(3);
+	//sleep(2);
 	
-	if (time(NULL) - last_alarmout >= 3)
+	if (isDisalarm)
 	{
-		//瑙i櫎璀︽姤
-		NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,0);
+		//if (time(NULL) - last_alarmout >= 2)
+		//{
+			//瑙i櫎璀︽姤
+			NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,0);
+		//}
+	}
+	else
+	{
+		//寮�鍚鎶�
+		if(NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,1) == FALSE){
+			printf("NET_DVR_SetAlarmOut failed, err: %d\n", NET_DVR_GetLastError());
+		}
+		last_alarmout = time(NULL);
 	}
 }
 
@@ -479,7 +492,7 @@
 	LONG lUserID;
 
 	NET_DVR_DEVICEINFO_V30 struDeviceInfo;
-	lUserID = NET_DVR_Login_V30((char*)g_hcnetsdkconfig.serverIP.c_str(), g_hcnetsdkconfig.serverport, 
+	hcnetsdk_user = lUserID = NET_DVR_Login_V30((char*)g_hcnetsdkconfig.serverIP.c_str(), g_hcnetsdkconfig.serverport, 
 		(char*)g_hcnetsdkconfig.username.c_str(), (char*)g_hcnetsdkconfig.passwd.c_str(), &struDeviceInfo);
 	if (lUserID < 0) {
 		printf("NET_DVR_Login_V30 failed, err: %d\n", NET_DVR_GetLastError());
@@ -494,7 +507,7 @@
 	return lUserID;
 }
 
-HCNetCameraConfig* hcnetsdk_find_config(const std::string& decoder_ip)
+HCNetCameraConfig* hcnetsdk_find_config(const sockinfo& oldEquipConfig, int newChannel)
 {
 	for (size_t i = 0; i < NUM; i++)
 	{
@@ -502,8 +515,11 @@
 		if (equip->m_type > ET_HCNET_DECODER__FIRST || equip->m_type < ET_HCNET_DECODER__LAST)
 		{
 			HCNetCameraConfig* camConfig = (HCNetCameraConfig*)equip->user_config;
-			if (camConfig != NULL && equip->serverIP == decoder_ip)
-				return camConfig;
+			if (camConfig != NULL && strcmp(equip->ip, oldEquipConfig.ip) == 0)
+			{
+				if (camConfig->channel == newChannel)
+					return camConfig;
+			}
 		}
 	}
 	
@@ -544,13 +560,13 @@
 int hcnetsdk_alarm_logo(LONG lUserID, const HCNetCameraConfig& _camConfig, const std::string& ip, int channel, bool disalarm)
 {
 	HCNetCameraConfig camConfig(_camConfig);
-	if (camConfig.channel != channel)
-	{
-		camConfig.channel = -1;
-		sockinfo* equipConfig = hcnetsdk_find_equip(ip, channel);
-		if (equipConfig != NULL)
-			camConfig = *(HCNetCameraConfig*)(equipConfig->user_config);
-	}
+	//if (camConfig.channel != channel)
+	//{
+	//	camConfig.channel = -1;
+	//	sockinfo* equipConfig = hcnetsdk_find_equip(ip, channel);
+	//	if (equipConfig != NULL)
+	//		camConfig = *(HCNetCameraConfig*)(equipConfig->user_config);
+	//}
 	
 	printf("hcnetsdk_alarm_logo, channel=%d, matchc=%d\n", channel, camConfig.channel);
 	
@@ -571,22 +587,89 @@
 	net_dvr_win_logo_cfg.dwSize = sizeof(net_dvr_win_logo_cfg);
 	//璁剧疆绐楀彛杈撳嚭logo
 	int byWallNo=1,dwSubWinNo=2,dwWinNo=1;
-	DWORD dwDecChanNum=(camConfig.byWallNo << 24) | (camConfig.dwSubWinNo << 16) | camConfig.dwWinNo;
-	if(!NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize))
+	
+	for (int i= 0; i < camConfig.dwWinNo.size(); i++)
 	{
-		printf("NET_DVR_SetDVRConfig2 error, err: %d\n", NET_DVR_GetLastError());
-		return -1;
+		DWORD dwDecChanNum=(camConfig.byWallNo << 24) | (camConfig.dwSubWinNo << 16) | camConfig.dwWinNo[i];
+		if(!NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize))
+		{
+			printf("NET_DVR_SetDVRConfig2 error, err: %d\n", NET_DVR_GetLastError());
+			//return -1;
+		}
+		else
+		{
+			printf("NET_DVR_SetDVRConfig2 done.\n");
+			//return 0;
+		}
 	}
-	else
-	{
-		printf("NET_DVR_SetDVRConfig2 done.\n");
-		//return 0;
-	}
+	
+	return 0;
 	
 	//sleep(3);
 	//net_dvr_win_logo_cfg.byEnable = 0;
 	//NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize);
 }
+
+
+int hcnetsdk_alarm_logo_alarmout(LONG lUserID, const HCNetCameraConfig& _camConfig, const std::string& ip, int channel, bool disalarm)
+{
+	HCNetCameraConfig camConfig(_camConfig);
+	//if (camConfig.channel != channel)
+	//{
+	//	camConfig.channel = -1;
+	//	sockinfo* equipConfig = hcnetsdk_find_equip(ip, channel);
+	//	if (equipConfig != NULL)
+	//		camConfig = *(HCNetCameraConfig*)(equipConfig->user_config);
+	//}
+	
+	printf("hcnetsdk_alarm_logo, channel=%d, matchc=%d\n", channel, camConfig.channel);
+	
+	if (camConfig.channel < 0)
+		return -1;
+	
+	//绐楀彛閰嶇疆淇℃伅
+	NET_DVR_WIN_LOGO_CFG net_dvr_win_logo_cfg;
+	net_dvr_win_logo_cfg.dwLogoNo = 1;
+	net_dvr_win_logo_cfg.byEnable = (disalarm ? 0 : 1);//0:hidden,1:visible
+	net_dvr_win_logo_cfg.byRes1[3] =0;
+	net_dvr_win_logo_cfg.dwCoordinateX = 5;
+	net_dvr_win_logo_cfg.dwCoordinateY =5;
+	net_dvr_win_logo_cfg.byFlash = 1;
+	net_dvr_win_logo_cfg.byTranslucent = 0;
+	net_dvr_win_logo_cfg.byRes2[34] = 0;
+
+	net_dvr_win_logo_cfg.dwSize = sizeof(net_dvr_win_logo_cfg);
+	//璁剧疆绐楀彛杈撳嚭logo
+	int byWallNo=1,dwSubWinNo=2,dwWinNo=1;
+	
+	for (int i= 0; i < camConfig.dwWinNo.size(); i++)
+	{
+		DWORD dwDecChanNum=(camConfig.byWallNo << 24) | (camConfig.dwSubWinNo << 16) | camConfig.dwWinNo[i];
+		if(!NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize))
+		{
+			printf("NET_DVR_SetDVRConfig2 error, err: %d\n", NET_DVR_GetLastError());
+			//return -1;
+		}
+		else
+		{
+			printf("NET_DVR_SetDVRConfig2 done.\n");
+			//return 0;
+		}
+	}
+	
+	//if (!disalarm)
+	//{
+		//int hcnetsdk_alarm_alarmout(LONG lUserID, const HCNetCameraConfig& camConfig)
+		hcnetsdk_alarm_alarmout(lUserID, camConfig, disalarm);
+	//}
+	
+	return 0;
+	
+	//sleep(3);
+	//net_dvr_win_logo_cfg.byEnable = 0;
+	//NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize);
+}
+
 
 int main(int argc,char **argv)
 {
@@ -809,6 +892,7 @@
 void* MyEquipmentthread(void* arg)
  {
    int eidx = (int)arg;   
+   const sockinfo& equipConfig(equipments[eidx]);
    printf("Step.3 ===%d=====>RealTimeEvent Thread is strarted......\n",eidx);
 
    int length=0;
@@ -841,10 +925,37 @@
 				}
 			}
 			
+			if (channel==1)
+			{
+				int aa=1;//#todo break
+			}
+			
             if(gCapturing[eidx]==1)
 			{
+				//add 20170327
+				const std::string& ip(equipConfig.ip);
+				const HCNetCameraConfig* camConfig =  (HCNetCameraConfig*)equipConfig.user_config;
+				camConfig = hcnetsdk_find_config(equipConfig, channel);
+				int lUserData = hcnetsdk_get_userid(ip);
+				if (camConfig != NULL && hcnetsdk_user >= 0)
+				{
+					std::cout << "......alarm begin k=" << k << std::endl;
+					if (equipConfig.m_type == ET_HCNET_DECODER_ALARMOUT && !isDisalarm)
+						hcnetsdk_alarm_alarmout(lUserData, *camConfig, isDisalarm);
+					else if (equipConfig.m_type == ET_HCNET_DECODER_LOGO)
+						hcnetsdk_alarm_logo(lUserData, *camConfig, ip, channel, isDisalarm);
+					else if (equipConfig.m_type == ET_HCNET_DECODER_LOGO_ALARMOUT)
+						hcnetsdk_alarm_logo_alarmout(lUserData, *camConfig, ip, channel, isDisalarm);
+					std::cout << "......alarm end k=" << k << std::endl;
+				}
+				else
+				{
+					std::cout << "alarm lost k=" << k << std::endl;
+				}
+
+				
 				int k;
-				for(k=0;k<16;k++)
+				for(k=0;k<MAX_NUM;k++)
 				{
 					//if(SupperConnectedflag[k]==1)
 					//{
@@ -878,28 +989,28 @@
 						//printf("%s",buff);
 					//}
 					//else
-					{
-						if(SupperConnectedIP.size() > k)
-						{
-							const std::string& ip(SupperConnectedIP[k]);
-							sockinfo* equipConfig = hcnetsdk_find_equip(ip);
-							HCNetCameraConfig* camConfig =  hcnetsdk_find_config(ip);
-							int lUserData = hcnetsdk_get_userid(ip);
-							if (camConfig != NULL && equipConfig != NULL && lUserData >= 0)
-							{
-								std::cout << "......alarm begin k=" << k << std::endl;
-								if (equipConfig->m_type == ET_HCNET_DECODER_ALARMOUT && !isDisalarm)
-									hcnetsdk_alarm_alarmout(lUserData, *camConfig);
-								else if (equipConfig->m_type == ET_HCNET_DECODER_LOGO)
-									hcnetsdk_alarm_logo(lUserData, *camConfig, ip, channel, isDisalarm);
-								std::cout << "......alarm end k=" << k << std::endl;
-							}
-							else
-							{
-								std::cout << "alarm lost k=" << k << std::endl;
-							}
-						}
-					}
+					//{
+					//	if(SupperConnectedIP.size() > k)
+					//	{
+					//		const std::string& ip(SupperConnectedIP[k]);
+					//		sockinfo* equipConfig = hcnetsdk_find_equip(ip);
+					//		HCNetCameraConfig* camConfig =  hcnetsdk_find_config(ip);
+					//		int lUserData = hcnetsdk_get_userid(ip);
+					//		if (camConfig != NULL && equipConfig != NULL && lUserData >= 0)
+					//		{
+					//			std::cout << "......alarm begin k=" << k << std::endl;
+					//			if (equipConfig->m_type == ET_HCNET_DECODER_ALARMOUT && !isDisalarm)
+					//				hcnetsdk_alarm_alarmout(lUserData, *camConfig);
+					//			else if (equipConfig->m_type == ET_HCNET_DECODER_LOGO)
+					//				hcnetsdk_alarm_logo(lUserData, *camConfig, ip, channel, isDisalarm);
+					//			std::cout << "......alarm end k=" << k << std::endl;
+					//		}
+					//		else
+					//		{
+					//			std::cout << "alarm lost k=" << k << std::endl;
+					//		}
+					//	}
+					//}
 				}
 				continue;	
 			}
@@ -968,7 +1079,21 @@
 			camConfig->channel = jsonUserConfig["channel"].asInt();
 			camConfig->byWallNo = jsonUserConfig["byWallNo"].asInt();
 			camConfig->dwSubWinNo = jsonUserConfig["dwSubWinNo"].asInt();
-			camConfig->dwWinNo = jsonUserConfig["dwWinNo"].asInt();
+			
+			Json::Value dwWinNoArrays = jsonUserConfig["dwWinNo"];
+			if (dwWinNoArrays.isArray())
+			{
+				const int s = (int)(dwWinNoArrays.size());
+				for(int i = 0; i < s; i++)
+				{
+					camConfig->dwWinNo.push_back(dwWinNoArrays[i].asInt());
+				}
+			}
+			else
+			{
+				camConfig->dwWinNo.push_back(dwWinNoArrays.asInt());
+			}
+			
 			camConfig->lAlarmOutPort = jsonUserConfig["lAlarmOutPort"].asInt();
 		}
 		

--
Gitblit v1.8.0