From 2a2f6b1229a0eaf18a0eee67fd3d17d1f9e8420b Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@454eff88-639b-444f-9e54-f578c98de674> Date: 星期二, 07 三月 2017 12:08:49 +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