From 1c0f255b682a3ff33804f177f5936eb0624555c8 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 23 三月 2017 13:56:55 +0800
Subject: [PATCH]
---
ProxyConsole/proxyconsole-hc.cpp | 318 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 248 insertions(+), 70 deletions(-)
diff --git a/ProxyConsole/proxyconsole-hc.cpp b/ProxyConsole/proxyconsole-hc.cpp
index c798765..00f9506 100644
--- a/ProxyConsole/proxyconsole-hc.cpp
+++ b/ProxyConsole/proxyconsole-hc.cpp
@@ -25,18 +25,23 @@
#include <vector>
#include <stdint.h>
#include <iostream>
+#include <fstream>
#include <unistd.h>
+#include <json/json.h>
+
#include "MD5Linux.h"
-#include "HCNetSDK/incCn/HCNetSDK.h"
+#include "HCNetSDK64/incCn/HCNetSDK.h"
#define HPR_OK 0
#define HPR_ERROR -1
#define MAX_NUM 16
#define MAX 1024
#define fileread_buf 128
+
+volatile time_t last_alarmout;
typedef std::map<std::string, int> hcnetsdk_user_t; // decoder_ip, userid
hcnetsdk_user_t g_hcnetsdk_user;
@@ -46,12 +51,22 @@
ET__FIRST,
ET_PC_SERVER,
ET_HCNET_DECODER__FIRST,
- ET_HCNET_DECODER_POPWIN,
- ET_HCNET_DECODER_LOGO,
- ET_HCNET_DECODER_ALARMOUT,
+ ET_HCNET_DECODER_POPWIN, // 3
+ ET_HCNET_DECODER_LOGO, // 4
+ ET_HCNET_DECODER_ALARMOUT, // 5
ET_HCNET_DECODER__LAST,
ET__LAST
};
+
+struct HCNetSDKConfig
+{
+ std::string serverIP;
+ int serverport;
+ std::string username;
+ std::string passwd;
+};
+
+HCNetSDKConfig g_hcnetsdkconfig;
struct HCNetCameraConfig
{
@@ -216,7 +231,7 @@
}
SupperConnectedflag[i]=1;
SupperConnectedIP[i] = equipments[i].serverIP;
- printf("server connect Success=:%s:%s\n",equipments[i].serverIP,equipments[i].serverport);
+ //printf("server connect Success=:%s:%s\n",equipments[i].serverIP,equipments[i].serverport);
pthread_create(&thread_no[i],NULL,&createServerthread,(void*)i);//super
}
}
@@ -308,11 +323,15 @@
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);
- //瑙i櫎璀︽姤
- NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,0);
+ if (time(NULL) - last_alarmout >= 3)
+ {
+ //瑙i櫎璀︽姤
+ NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,0);
+ }
}
int hcnetsdk_alarm_popwin(LONG lUserID, const HCNetCameraConfig& camConfig)
@@ -403,14 +422,51 @@
std::cout << "hcnetsdk_alarm_popwin" << std::endl;
}
-int hcnetsdk_alarm_logo()
-{
-}
-
void hcnetsdk_finial()
{
//NET_DVR_Logout(lUserID); //#todo
NET_DVR_Cleanup();
+}
+
+int hcnetsdk_init_logo(LONG lUserID)
+{
+ //logo淇℃伅
+ NET_DVR_MATRIX_LOGO_INFO net_dvr_matrix_logocfg1;
+ net_dvr_matrix_logocfg1.byRes[32]=0;
+ net_dvr_matrix_logocfg1.dwSize=0;
+ net_dvr_matrix_logocfg1.dwLogoSize=0;
+
+ char logobuf[5000];
+ {
+ FILE * pFile;
+ pFile = fopen("./ico.bmp","rb");
+ if (pFile!=NULL)
+ {
+ net_dvr_matrix_logocfg1.dwLogoSize = fread(logobuf, 1, sizeof(logobuf), pFile);
+ fclose (pFile);
+ }
+ else
+ {
+ perror ("Error opening file");
+ return -1;
+ }
+ }
+
+ net_dvr_matrix_logocfg1.dwSize= sizeof(net_dvr_matrix_logocfg1);
+
+ //涓婁紶logo
+ if (TRUE != NET_DVR_UploadLogo_NEW(lUserID, 1, &net_dvr_matrix_logocfg1 , logobuf))
+ {
+ printf("NET_DVR_UploadLogo_NEW error, err: %d\n", NET_DVR_GetLastError());
+ return -1;
+ }
+ else
+ {
+ printf("NET_DVR_UploadLogo_NEW done.\n");
+ return 0;
+ }
+
+ return -1;
}
int hcnetsdk_init()
@@ -423,14 +479,17 @@
LONG lUserID;
NET_DVR_DEVICEINFO_V30 struDeviceInfo;
- lUserID = NET_DVR_Login_V30("192.168.1.101", 8000, "admin", "a1234567", &struDeviceInfo);
+ 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());
NET_DVR_Cleanup();
return -1;
}
- g_hcnetsdk_user.insert(std::make_pair("192.168.1.101", int(lUserID)));
+ g_hcnetsdk_user.insert(std::make_pair(g_hcnetsdkconfig.serverIP, int(lUserID)));
+
+ hcnetsdk_init_logo(lUserID);
return lUserID;
}
@@ -449,6 +508,84 @@
}
return NULL;
+}
+
+sockinfo* hcnetsdk_find_equip(const std::string& decoder_ip)
+{
+ for (size_t i = 0; i < NUM; i++)
+ {
+ sockinfo* equip = &(equipments[i]);
+ if (equip->m_type > ET_HCNET_DECODER__FIRST || equip->m_type < ET_HCNET_DECODER__LAST)
+ {
+ if (equip->serverIP == decoder_ip)
+ return equip;
+ }
+ }
+
+ return NULL;
+}
+
+sockinfo* hcnetsdk_find_equip(const std::string& decoder_ip, int channel)
+{
+ for (size_t i = 0; i < NUM; i++)
+ {
+ sockinfo* equip = &(equipments[i]);
+ if (equip->m_type > ET_HCNET_DECODER__FIRST || equip->m_type < ET_HCNET_DECODER__LAST)
+ {
+ HCNetCameraConfig* camConfig = (HCNetCameraConfig*)equip->user_config;
+ if (camConfig != NULL && camConfig->channel == channel && equip->serverIP == decoder_ip)
+ return equip;
+ }
+ }
+
+ return NULL;
+}
+
+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);
+ }
+
+ 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;
+ 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))
+ {
+ printf("NET_DVR_SetDVRConfig2 error, err: %d\n", NET_DVR_GetLastError());
+ return -1;
+ }
+ else
+ {
+ printf("NET_DVR_SetDVRConfig2 done.\n");
+ //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)
@@ -493,12 +630,16 @@
timer.it_interval.tv_usec=250000;
/*Start a virtual timer.It counts down whenever this process is executing.*/
- setitimer(ITIMER_VIRTUAL,&timer,NULL);
+ //setitimer(ITIMER_VIRTUAL,&timer,NULL);
- while(1);
+ while ( 1 )
+ {
+ zclock_sleep(250);
+ timer_handler(0);
+ }
}
void* createServerthread_hcnetsdk(void* arg)
@@ -512,7 +653,7 @@
int length=0;
char buff[102400];
- puts("Step.1 ========>Server Thread is strarted......");
+ //puts("Step.1 ========>Server Thread is strarted......");
unsigned char data[4096];
//=======================================equipment data================================
int idx=0;
@@ -531,16 +672,16 @@
}
data[idx++]=0x16;
write(sock_upper[sidx],&data,idx);//send to equipment;
- printf("Send equipment's info to Server OK! len=:%d\n",idx);
+ //printf("Send equipment's info to Server OK! len=:%d\n",idx);
//=======================================data================================================
while(1)
{
int j;
length=read(sock_upper[sidx],&buff,sizeof(buff)-1);
- printf("from Server received data===============:%d\n",length);
+ //printf("from Server received data===============:%d\n",length);
if(length<=0)
{
- printf(" Upper Socket closed \n");
+ //printf(" Upper Socket closed \n");
break;
}
else {
@@ -612,7 +753,7 @@
continue;
}
}
- puts("Server Thread is stoped..");
+ //puts("Server Thread is stoped..");
close(sock_upper[sidx]);
sock_upper[sidx] = -1;
SupperConnectedflag[sidx]=0;//?//#todo
@@ -668,7 +809,7 @@
void* MyEquipmentthread(void* arg)
{
int eidx = (int)arg;
- printf("Step.3 ===%d=====>RealTimeEvent Thread is strarted......\n",eidx);
+ //printf("Step.3 ===%d=====>RealTimeEvent Thread is strarted......\n",eidx);
int length=0;
char buff[102400];
@@ -683,11 +824,22 @@
}
else if(length>0)
{
- if (strstr(buff, "ViqEventNotificationAlert") == NULL) // <urn
+ bool isDisalarm = false;
+ if (strstr(buff, "ViqEventNotificationAlert") == NULL) // <urn
continue;
if (strstr(buff, "startTime") == NULL) // <urn
- continue;
- std::cout << buff<<std::endl;
+ isDisalarm = true;
+ //std::cout << buff<<std::endl;
+
+ int channel = -1;
+ {
+ const char* strChannel = strstr(buff, "<urn:channelId>");
+ if (strChannel != NULL)
+ {
+ channel = strtol(strChannel + strlen("<urn:channelId>"), NULL, 10);
+ }
+ }
+
if(gCapturing[eidx]==1)
{
int k;
@@ -729,12 +881,16 @@
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 && lUserData >= 0)
+ if (camConfig != NULL && equipConfig != NULL && lUserData >= 0)
{
std::cout << "alarm begin k=" << k << std::endl;
- hcnetsdk_alarm_alarmout(lUserData, *camConfig);
+ 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
@@ -757,49 +913,68 @@
int Read_MysqlData()
{
- static sockinfo equipments_config[1] = {
- //{
- // .m_id = 1,
- // .ip = "192.168.1.5", // equipmentip (analizer)
- // .port = "80", // equipmentport
- // .user = "supervisor", // equipment username
- // .pass = "supervisor", // equipment password
- // .serverIP = "192.168.1.2", // serverip (accept alarm)
- // .serverport = "5015", // serverport
- // .reboot = 0
- //},
-
- //{ .m_id = 1, .ip = "192.168.1.5", .port = "80", .user = "supervisor", .pass = "supervisor", .serverIP = "192.168.1.2", .serverport = "5015", .reboot = 0 },
- };
+ if (NUM > 0)
+ return 1;
+ std::vector<sockinfo> equipments_config;
+
+ std::ifstream ifs;
+ ifs.open("config.json");
+
+ Json::Reader reader;
+ Json::Value root;
+ if (!reader.parse(ifs, root, false))
{
- equipments_config[0].m_id = 1;
- equipments_config[0].m_type = ET_HCNET_DECODER_ALARMOUT;
- strcpy(equipments_config[0].ip, "192.168.1.5");
- strcpy(equipments_config[0].port, "80");
- strcpy(equipments_config[0].user, "supervisor");
- strcpy(equipments_config[0].pass, "supervisor");
- strcpy(equipments_config[0].serverIP, "192.168.1.101");
- strcpy(equipments_config[0].serverport, "8000");
- //strcpy(equipments_config[0].serverIP, "192.168.1.10");
- //strcpy(equipments_config[0].serverport, "5015");
- equipments_config[0].reboot = 0;
- HCNetCameraConfig* camConfig = new HCNetCameraConfig; // #todo delete when exit
- equipments_config[0].user_config = camConfig;
-
- camConfig->ip = "192.168.1.63";
- camConfig->port = 8000;
- camConfig->username = "admin";
- camConfig->passwd = "admin12345";
- camConfig->channel = 1;
- camConfig->byWallNo = 1;
- camConfig->dwSubWinNo = 1;
- camConfig->dwWinNo = 0;
- camConfig->lAlarmOutPort = 0x0001;
+ std::cout << "open config.json error" << std::endl;
+ exit(EXIT_FAILURE);
}
+
+ //HCNetSDKConfig
+ Json::Value jsonHcsdk = root["hcsdk"];
+ g_hcnetsdkconfig.serverIP = jsonHcsdk["serverIP"].asString();
+ g_hcnetsdkconfig.serverport = jsonHcsdk["serverport"].asInt();
+ g_hcnetsdkconfig.username = jsonHcsdk["username"].asString();
+ g_hcnetsdkconfig.passwd = jsonHcsdk["passwd"].asString();
- memcpy(equipments, equipments_config, sizeof(equipments_config));
- NUM = sizeof(equipments_config) / sizeof(sockinfo);
+ Json::Value jsonEquipments = root["equipments"];
+ for (int i = 0; i < jsonEquipments.size() && i < sizeof(equipments) / sizeof(sockinfo); i++)
+ {
+ Json::Value jsonEquip = jsonEquipments[i];
+
+ sockinfo equip;
+ equip.m_id = jsonEquip["id"].asInt();;
+ equip.m_type = (EquipmentType)jsonEquip["type"].asInt();;
+ strcpy(equip.ip, jsonEquip["ip"].asString().c_str());
+ strcpy(equip.port, jsonEquip["port"].asString().c_str());
+ strcpy(equip.serverIP, jsonEquip["serverIP"].asString().c_str());
+ strcpy(equip.serverport, jsonEquip["serverport"].asString().c_str());
+ strcpy(equip.user, jsonEquip["user"].asString().c_str());
+ strcpy(equip.pass, jsonEquip["pass"].asString().c_str());
+ equip.reboot = jsonEquip["reboot"].asInt();
+ equip.user_config = NULL;
+
+ if (equip.m_type > ET_HCNET_DECODER__FIRST || equip.m_type < ET_HCNET_DECODER__LAST)
+ {
+ Json::Value jsonUserConfig = jsonEquip["user_config"];
+
+ HCNetCameraConfig* camConfig = new HCNetCameraConfig; // #todo delete when exit
+ equip.user_config = camConfig;
+
+ camConfig->ip = jsonUserConfig["ip"].asString();
+ camConfig->port = jsonUserConfig["port"].asInt();
+ camConfig->username = jsonUserConfig["username"].asString();
+ camConfig->passwd = jsonUserConfig["passwd"].asString();
+ camConfig->channel = jsonUserConfig["channel"].asInt();
+ camConfig->byWallNo = jsonUserConfig["byWallNo"].asInt();
+ camConfig->dwSubWinNo = jsonUserConfig["dwSubWinNo"].asInt();
+ camConfig->dwWinNo = jsonUserConfig["dwWinNo"].asInt();
+ camConfig->lAlarmOutPort = jsonUserConfig["lAlarmOutPort"].asInt();
+ }
+
+ memcpy(&(equipments[NUM]), &equip, sizeof(equip));
+ NUM++;
+
+ }
return 1;
}
@@ -1017,16 +1192,16 @@
int i;
int retVal;
int result;
- printf("Step.3 ========>GPIO manupulation===> AnalyEquipmentNum=%d \n",equip_num);
+ //printf("Step.3 ========>GPIO manupulation===> AnalyEquipmentNum=%d \n",equip_num);
for(i=0;i<equip_num;i++)
{
retVal = -1;
result=-1;
- printf("=============================:%d \n",equipments[i].reboot);
+ //printf("=============================:%d \n",equipments[i].reboot);
result=net_test(equipments[i].ip,equipments[i].port);
if(result<0)
{
- printf("Equipment(%d) check=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
+ //printf("Equipment(%d) check=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
retVal = GPIO_OPEN(PortNum);
if(retVal == 0)
{
@@ -1036,7 +1211,10 @@
}
else printf("GPIO OPEN FAIL! \n");
}
- else printf("Equipment(%d) Check Success!=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
+ else
+ {
+ //printf("Equipment(%d) Check Success!=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
+ }
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1284,7 +1462,7 @@
length=read(rsock_down[Idx],&buff,sizeof(buff));
alarm(0);
sigrelse(SIGALRM);
- printf("Myequipment connect ==================length =%d:\n",length);
+ //printf("Myequipment connect ==================length =%d:\n",length);
if(length<=0)
{
close(rsock_down[Idx]);
--
Gitblit v1.8.0