xuxiuxi
2017-05-11 109ffe9a777658936a38d0c146579a67c60a0d17
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)
   {
      //解除警报
      NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,0);
      //if (time(NULL) - last_alarmout >= 2)
      //{
         //解除警报
         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();
      }