From a47453b5ae9cbda1f0669e1052a016a2bb373378 Mon Sep 17 00:00:00 2001 From: pans <pans@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 14 十二月 2016 15:29:54 +0800 Subject: [PATCH] --- pans/ico.png | 0 pans/proxyconsole-hc.cpp | 1148 +++++++++++++++++++++++++++++++++++++++++++++ pans/ico.bmp | 0 pans/test.cpp | 255 ++++++++++ pans/a.xml | 88 +++ 5 files changed, 1,491 insertions(+), 0 deletions(-) diff --git a/pans/a.xml b/pans/a.xml new file mode 100644 index 0000000..2ef2d06 --- /dev/null +++ b/pans/a.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<WallAbility version ="2.0"> +<winNum min="1" max="80" /> +<senceNum min="1" max="8" /> +<maxScreenNum>15</maxScreenNum> +<windowMode opt="1,4,6,8,9,12,16,25,36" /> + +<WindowBase> +<windowBaseX>1920</windowBaseX> +<windowBaseY>1920</windowBaseY> +</WindowBase> + +<VoutResource> +<videoOutNum>15</videoOutNum> +<audioOutNum>0</audioOutNum> + +<VoutResourceEntry> +<id>1</id> +<voutType>bnc</voutType> +<voutNo min="17" max="21" /> +<videoFormat opt="NULL,NTSC,PAL" /> +<outputWindowMode opt="1,4,9,16" /> +<Audio> +<enabled>false</enabled> +</Audio> +<VoutResolutionEntry> +<resolutionName>NOT_AVAILABLE</resolutionName> +<index>0</index> +</VoutResolutionEntry> +</VoutResourceEntry> + +<VoutResourceEntry> +<id>3</id> +<voutType>hdmi</voutType> +<voutNo min="49" max="58" /> +<videoFormat opt="NULL,NTSC,PAL" /> +<outputWindowMode opt="1,4,9,16" /> +<Audio><enabled>false</enabled></Audio> +<VoutResolutionEntry> +<resolutionName>NOT_AVAILABLE</resolutionName> +<index>0</index></VoutResolutionEntry> +<VoutResolutionEntry><resolutionName>XGA_60HZ(1024*768)</resolutionName> +<index>67207228</index></VoutResolutionEntry> + +<VoutResolutionEntry> +<resolutionName>SXGA_60HZ(1280*1024)</resolutionName> +<index>84017212</index></VoutResolutionEntry> +<VoutResolutionEntry><resolutionName>720P_60HZ(1280*720)</resolutionName> +<index>83978300</index></VoutResolutionEntry><VoutResolutionEntry> +<resolutionName>720P_50HZ(1280*720)</resolutionName> +<index>83978290</index></VoutResolutionEntry><VoutResolutionEntry> +<resolutionName>1080P_60HZ(1920*1080)</resolutionName> +<index>125967420</index> +</VoutResolutionEntry><VoutResolutionEntry><resolutionName>1080P_50HZ(1920*1080)</resolutionName> +<index>125967410</index></VoutResolutionEntry><VoutResolutionEntry><resolutionName>UXGA_60HZ(1600*1200)</resolutionName> +<index>105011260</index></VoutResolutionEntry><VoutResolutionEntry><resolutionName>WSXGA_60HZ(1680*1050)</resolutionName> +<index>110234940</index></VoutResolutionEntry><VoutResolutionEntry><resolutionName>4K_30HZ(3840*2160)</resolutionName> +<index>251934750</index></VoutResolutionEntry></VoutResourceEntry></VoutResource> + +<StreamMedia><enabled>true</enabled></StreamMedia> + +<maxLocalOutputDeviceNum>8</maxLocalOutputDeviceNum><wallNo min="1" max="1" /> +<PlatformPassiveDecode><enabled>true</enabled></PlatformPassiveDecode> + +<WallLogo><logoNo min="1" max="128" /> +<logoSize min="3126" max="98358" /> +<logoWidth min="32" max="256" /> +<logoHeight min="32" max="128" /> +<logoNameLen min="1" max="32" /> +<logoStatus opt="show,hide" /> +<logoCorordinateX min="1" max="65535" /> +<logoCorordinateY min="1" max="65535" /> +<LogoFlash> +<enabled>true</enabled> +</LogoFlash> +<LogoTranslucent> +<enabled>false</enabled> +</LogoTranslucent> +<LogoDelete> +<enabled>true</enabled> +</LogoDelete> +<AllLogoCfgGet> +<enabled>true</enabled> +</AllLogoCfgGet> +</WallLogo> + +<WindowLoop><maxLoopNum>12</maxLoopNum><maxMonitorNum>64</maxMonitorNum></WindowLoop><CloseAllWin><enabled>true</enabled></CloseAllWin><windowStaticMode opt="black,lastframe" /><AllWinDecSwitch><enabled>true</enabled></AllWinDecSwitch><PicViewParam><picResolution opt="1080P" /><picFrameRate min="1" max="25" /></PicViewParam><AudioMatrix><audioChanNameLen min="0" max="255" /><audioSwitchType opt="switchbyip,switchbywin" /> +</AudioMatrix></WallAbility> \ No newline at end of file diff --git a/pans/ico.bmp b/pans/ico.bmp new file mode 100644 index 0000000..c7dd7a3 --- /dev/null +++ b/pans/ico.bmp Binary files differ diff --git a/pans/ico.png b/pans/ico.png new file mode 100644 index 0000000..e63256f --- /dev/null +++ b/pans/ico.png Binary files differ diff --git a/pans/proxyconsole-hc.cpp b/pans/proxyconsole-hc.cpp new file mode 100644 index 0000000..c93035d --- /dev/null +++ b/pans/proxyconsole-hc.cpp @@ -0,0 +1,1148 @@ +/* + * proxyserver.c + * + * Created on: Oct 9, 2016 + * Author: JKM + */ +#include <sys/socket.h> +#include <sys/types.h> +#include <netinet/in.h> +#include <netdb.h> +#include <arpa/inet.h> +#include <pthread.h> +#include <sys/time.h> +#include <fcntl.h> +//#include "/usr/include/mysql/mysql.h" +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/io.h> +#include <errno.h> +#include <sys/stat.h> +#include <signal.h> + +#include "MD5Linux.h" + +#include "HCNetSDK/incCn/HCNetSDK.h" +#define HPR_OK 0 +#define HPR_ERROR -1 + +#define MAX_NUM 16 +#define MAX 1024 +#define fileread_buf 128 +typedef struct{ + int m_id; + char serverIP[32]; + char serverport[10]; + char port[10]; + char ip[32]; + char user[64]; + char pass[64]; + int reboot; +}sockinfo,*lpsockinfo; +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]; +char byte_array[2600]; +int bbbbb=0; +int CommandEquipIdx=0; +int CommandKind[16]; +char sessionIDs[16][5]; + +char linkequip_ip[32]; +char linkequip_port[10]; +int focusServer=-1; +int focusEquip=-1; + +int NUM=0,equip_num=0; + +int SupperConnectedflag[16]={0,},EquipConnectedflag[16]={0,},serverflag=0,GPIO_flag=0; +int EquipRealAlarmConnectedflag[16]; +timer_t* timerID; + +int Read_MysqlData(); +int UpdateMysqData(int key); +void* createServerthread(void* arg); +void* createEquipmentthread(void* arg); +void* MyEquipmentthread(void* arg); + + +int net_test(char* serverIP,char* port); +void EquipCheckGPIOOut(void); +void GPIOinit(void); +int GPIOoutput(int no); +int time_lock(int year,int month,int day,int hour,int min,int sec,int during); + +int GPIO_OPEN(int PortNum); +void GPIO_CLOSE(int PortNum); +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 n=0,m=0,k=0; +unsigned char DownBuffer[16][614000]; +int DownCount[16]; +int gCount=0; +int gCount30s=0; +int gCount2s=0; +void zclock_sleep (int msecs); + +void zclock_sleep (int msecs) +{ + struct timespec t; + t.tv_sec = msecs / 1000; + t.tv_nsec = (msecs % 1000) * 1000000; + nanosleep (&t, NULL); +} +void u_alarm_handler(int) +{ + //printf("connect fail=============="); + +} +void timer_handler(int signum) +{ + int i,j; + + ////////////// added on 2016.11.8 ////////////////// + gCount2s++; + if(gCount2s>=8){ + gCount2s=0; + for(;CommandEquipIdx<16;CommandEquipIdx++){//connected + if(EquipConnectedflag[CommandEquipIdx]>0) break; + } + if(CommandEquipIdx>=16){ + CommandEquipIdx = 0; + } + } + ///////////////////////////////////////////////////// + gCount30s++; + if(gCount30s>=120){//4*30=30s + gCount30s=0; + if(NUM>0){ + EquipCheckGPIOOut();//GPIO Watchdog_Timer + } + } + gCount++; + if(gCount>=4){//1s + gCount = 0; + Read_MysqlData(); + equip_num=NUM; + //time_lock(2016,10,28,10,10,10,30); + } + //serverthread + for(i=0;i<NUM;i++){ + for(j=0;j<i;j++) if(strcmp(equipments[i].serverIP,equipments[j].serverIP)==0 && strcmp(equipments[i].serverport,equipments[j].serverport)==0) break; + if(j<i)continue; + + if(SupperConnectedflag[i]==0){ + struct sockaddr_in servaddr; + int strlen1=sizeof(servaddr); + if(equipments[i].serverIP[0]!=0 && equipments[i].serverport[0]!=0) { + if((sock_upper[i]=socket(PF_INET,SOCK_STREAM,0))<0){ + perror("socket fail1"); + continue; + } + memset(&servaddr,0,strlen1); + servaddr.sin_family=AF_INET; + inet_pton(AF_INET,equipments[i].serverIP,&servaddr.sin_addr); + servaddr.sin_port=htons(atoi(equipments[i].serverport)); + + sigset(SIGALRM, u_alarm_handler); + alarm(2); + int rt = connect(sock_upper[i],(struct sockaddr*)&servaddr,strlen1); + alarm(0); + sigrelse(SIGALRM); + if(rt<0){ + printf("server connect fail-%s:%s\n",equipments[i].serverIP,equipments[i].serverport); + close(sock_upper[i]); + continue; + } + SupperConnectedflag[i]=1; + printf("server connect Success=:%s:%s\n",equipments[i].serverIP,equipments[i].serverport); + pthread_create(&thread_no[i],NULL,&createServerthread,(void*)i);//super + } + } + } + //equipment thread + for(i=0;i<NUM;i++){ + for(j=0;j<i;j++) if(strcmp(equipments[i].ip,equipments[j].ip)==0 && strcmp(equipments[i].port,equipments[j].port)==0) break; + if(j<i)continue; + if(EquipConnectedflag[i]==0){ + if(equipments[i].ip[0]!=0 && equipments[i].port[0]!=0) { + struct sockaddr_in servaddr; + int strlen1=sizeof(servaddr); + if((sock_down[i]=socket(PF_INET,SOCK_STREAM,0))<0){ + perror("socket fail2"); + continue; + } + // printf("==============================3333\n"); + memset(&servaddr,0,strlen1); + servaddr.sin_family=AF_INET; + inet_pton(AF_INET,equipments[i].ip,&servaddr.sin_addr); + servaddr.sin_port=htons(atoi(equipments[i].port)); + + sigset(SIGALRM, u_alarm_handler);//add 2016.11.22 + alarm(2); + int rt = connect(sock_down[i],(struct sockaddr*)&servaddr,strlen1); + alarm(0); + sigrelse(SIGALRM); + if(rt<0){ + printf("Equipment connect fail-%s:%s\n",equipments[i].ip,equipments[i].port); + close(sock_down[i]); + continue; + } + EquipConnectedflag[i]=1; + pthread_create(&thread_noEQ[i],NULL,&createEquipmentthread,(void*)i);//super(void*)(&equipments[0]) + printf("equipment connect Success=:%s:%s\n",equipments[i].ip,equipments[i].port); + } + } + if(EquipRealAlarmConnectedflag[i]==0) + {////// added on 2017.11.21 + //printf("Myequipment connect ==================:"); + if(RealEventStart(i)==0) EquipRealAlarmConnectedflag[i]=1; + } + + } +} + + +void CALLBACK hc_MessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser) +{ + int i; + NET_DVR_ALARMINFO_V30 struAlarmInfo; + memcpy(&struAlarmInfo, pAlarmInfo, sizeof(NET_DVR_ALARMINFO_V30)); + //printf("lCommand is %d, alarm type is %d\n", lCommand, struAlarmInfo.dwAlarmType); + switch(lCommand) + { + case COMM_ALARM_V30: + { + switch (struAlarmInfo.dwAlarmType) + { + case 3: //绉诲姩渚︽祴鎶ヨ + for (i=0; i<16; i++) //#define MAX_CHANNUM 16 //鏈�澶ч�氶亾鏁� + { + if (struAlarmInfo.byChannel[i] == 1) + { + printf("Motion detection %d\n", i+1); + } + } + break; + default: + break; + } + } + break; + default: + break; + } +} + +int init_HCNetSDK() +{ + NET_DVR_Init(); + + //Demo_SDK_Version + { + unsigned int uiVersion = NET_DVR_GetSDKBuildVersion(); + + char strTemp[1024] = {0}; + sprintf(strTemp, "HCNetSDK V%d.%d.%d.%d\n", \ + (0xff000000 & uiVersion)>>24, \ + (0x00ff0000 & uiVersion)>>16, \ + (0x0000ff00 & uiVersion)>>8, \ + (0x000000ff & uiVersion)); + printf(strTemp); + } + + //Login device + NET_DVR_DEVICEINFO_V30 struDeviceInfo = {0}; + LONG lUserID = NET_DVR_Login_V30("192.168.1.101", 8000, "admin", "a1234567", &struDeviceInfo); + if (lUserID < 0) + { + printf("pyd---Login error, %d\n", NET_DVR_GetLastError()); + + NET_DVR_Cleanup(); + return HPR_ERROR; + } + + //璁剧疆鎶ヨ鍥炶皟鍑芥暟 + NET_DVR_SetDVRMessageCallBack_V30(hc_MessageCallback, NULL); + + //鍚敤甯冮槻 + LONG lHandle; + lHandle = NET_DVR_SetupAlarmChan_V30(lUserID); + if (lHandle < 0) + { + printf("NET_DVR_SetupAlarmChan_V30 error, %d\n", NET_DVR_GetLastError()); + NET_DVR_Logout(lUserID); + NET_DVR_Cleanup(); + return HPR_ERROR; + } + +#ifdef _WIN32 + Sleep(5000); //millisecond +#elif defined(__linux__) || defined(__APPLE__) + sleep(500); //second +#endif + + //鎾ら攢甯冮槻涓婁紶閫氶亾 + if (!NET_DVR_CloseAlarmChan_V30(lHandle)) + { + printf("NET_DVR_CloseAlarmChan_V30 error, %d\n", NET_DVR_GetLastError()); + NET_DVR_Logout(lUserID); + NET_DVR_Cleanup(); + return HPR_ERROR; + } + + //#todo + //logout + //NET_DVR_Logout_V30(lUserID); + //NET_DVR_Cleanup(); + + return HPR_OK; +} + +int main(int argc,char **argv) +{ + struct sigaction sa; + struct itimerval timer; + linkequip_port[0]=0; + linkequip_ip[0]=0; + GPIOinit(); + int i; + Read_MysqlData(); + chmod("/etc/network/interfaces",0777); + chmod("/tmp/interfaces",0777); + + for(i=0;i<NUM;i++) { + SupperConnectedflag[i]=0; + EquipConnectedflag[i]=0; + EquipRealAlarmConnectedflag[i]=0; + sock_upper[i]= -1; + sock_down[i] = -1; + rsock_down[i] = -1; + } + + init_HCNetSDK(); + + /*Install timer_handler as th siganl handler for SIGVTALRM */ + memset(&sa,0,sizeof(sa)); + sa.sa_handler=&timer_handler; + sigaction(SIGVTALRM,&sa,NULL); + /* Configure the timer to expire after 250msec..*/ + timer.it_value.tv_sec=0; + timer.it_value.tv_usec=250000; + /*...and every 250 msec after that.*/ + timer.it_interval.tv_sec=0; + timer.it_interval.tv_usec=250000; + /*Start a virtual timer.It counts down whenever this process is executing.*/ + + setitimer(ITIMER_VIRTUAL,&timer,NULL); + + + + + while(1); +} + +//================================================================= +void* createServerthread(void* arg) + { + int sidx = (int)arg; + int length=0; + char buff[102400]; + + puts("Step.1 ========>Server Thread is strarted......"); + unsigned char data[4096]; + //=======================================equipment data================================ + int idx=0; + int i; + data[idx++]=0x68; + data[idx++]=0x05; + for(i=0;i<NUM;i++){ + data[idx++]=strlen(equipments[i].ip); + memcpy(&data[idx],equipments[i].ip,strlen(equipments[i].ip));idx+=strlen(equipments[i].ip); + data[idx++]=atoi(equipments[i].port)/256; + data[idx++]=atoi(equipments[i].port)%256; + data[idx++]=strlen(equipments[i].user); + memcpy(&data[idx],equipments[i].user,strlen(equipments[i].user));idx+=strlen(equipments[i].user); + data[idx++]=strlen(equipments[i].pass); + memcpy(&data[idx],equipments[i].pass,strlen(equipments[i].pass));idx+=strlen(equipments[i].pass); + } + data[idx++]=0x16; + write(sock_upper[sidx],&data,idx);//send to equipment;靾滍櫂氍� + 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); + if(length<=0) + { + printf(" Upper Socket closed \n"); + break; + } + else { + //====analysis + // if(buff[0]==0x68 && buff[1]==0x07) { + // focusServer =-1; + // printf("from Server received data===============:%d%d\n",buff[0],buff[1]); + // memcpy(buff,&buff[3],length-3); + // length-=3; + // if(length<=0) continue; + //} + + if(buff[0]==0x68 && buff[1]==0x03 ) + { + + printf("=========================buffer=====%s\n",buff); + + int index=buff[2]; + char DownIP[32]; + char Downport[10]; + int result=-1; + memcpy(&DownIP[0],&buff[3],index); + int port=buff[index+3]*256+(unsigned char)buff[index+4]; + sprintf(Downport,"%d",port); + if(buff[index+5]==0x16) + { + result=net_test(DownIP,Downport); + printf("Result=%s:%d:%d \n",DownIP,port,result); + if(result>0) + { + //response[0]=0x68; + //response[1]=0x03; + //response[2]=0x00; + //write(sock_upper[sidx],response,3); + focusServer = sidx; + for(j=0;j<NUM;j++) { + if(strcmp(DownIP,equipments[j].ip)==0 && strcmp(Downport,equipments[j].port)==0) + { + focusEquip = j; + break; + } + } + continue; + } + else{ + //response[0]=0x68; + //response[1]=0x03; + //response[2]=0x01; + //write(sock_upper[sidx],response,3); + continue; + } + // memcpy(buff,&buff[index+6],length-(index+6)); + // length-=index+6; + // if(length<=0) continue; + } + } + if(focusServer>=0) + { + if(focusEquip>=0 && sock_down[focusEquip]>0 ){ + write(sock_down[focusEquip],buff,length); + printf("Directly down to Equipment data===============:%d\n",length); + } + else{ + printf("Saved to Equipment data=========================:%d\n",length); + memcpy(DownBuffer[focusEquip],buff,length);//send to equipment; + DownCount[focusEquip] = length; + } + } + continue; + } + } + puts("Server Thread is stoped.."); + close(sock_upper[sidx]); + sock_upper[sidx] = -1; + SupperConnectedflag[sidx]=0;//? + pthread_exit((void*)thread_no[sidx]); +} + +void* createEquipmentthread(void* arg) + { + int eidx = (int)arg; + printf("Step.2 ===%d=====>Equipment Thread is strarted......\n",eidx); + + int length=0; + char buff[102400]; + while(1) + { + if(DownCount[eidx]>0) { + write(sock_down[eidx],DownBuffer[eidx],DownCount[eidx]);//? + printf("down to Equipment data=============:%d\n",DownCount[eidx]); + DownCount[eidx]=0; + } + memset(buff,0,sizeof(buff)); + length=read(sock_down[eidx],&buff,sizeof(buff)-1); + if(length<=0) + { + printf(" Down Socket closed \n"); + break; + } + else if(length>0){ + if( focusServer>=0){ + printf("Received data from Equipment length==========:%d\n",length); + if(sock_upper[focusServer] >0) + { + write(sock_upper[focusServer],buff,length);//send to equipment; + printf("send data to length Sever ===============:%d\n",length); + } + } + + } + } + close(sock_down[eidx]); + sock_down[eidx]=-1; + puts("Equipment Thread is stoped.."); + EquipConnectedflag[eidx]=0; + CommandKind[CommandEquipIdx]=0; + pthread_exit((void*)thread_noEQ[eidx]); +} +//=====================Reatime thread realstart========================= +void* MyEquipmentthread(void* arg) + { + int eidx = (int)arg; + printf("Step.3 ===%d=====>RealTimeEvent Thread is strarted......\n",eidx); + + int length=0; + char buff[102400]; + while(1) + { + memset(buff,0,sizeof(buff)); + length=read(rsock_down[eidx],&buff,sizeof(buff)-1); + if(length<=0) + { + printf(" Down Socket closed \n"); + break; + } + else if(length>0){ + if(gCapturing[eidx]==1){ + int k; + for(k=0;k<16;k++){ + if(SupperConnectedflag[k]==1){ + write(sock_upper[k],buff,strlen(buff)); + printf("======>>>>>>>upper send length====%d======\n",strlen(buff)); + printf("=============================================================\n"); + //printf("%s",buff); + } + } + continue; + } + } + } + close(rsock_down[eidx]); + rsock_down[eidx]=-1; + EquipRealAlarmConnectedflag[eidx]=0; + puts("RealTimeEvent Thread is stoped.."); + pthread_exit((void*)thread_Real[eidx]); +} + +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 + // .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 }, + }; + + equipments_config[0].m_id = 1; + 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.2"); + strcpy(equipments_config[0].serverport, "5015"); + equipments_config[0].reboot = 0; + + memcpy(equipments, equipments_config, sizeof(equipments_config)); + NUM = sizeof(equipments_config) / sizeof(sockinfo); + + return 1; +} + +/* +int Read_MysqlData(){ + int ret=0; + MYSQL *conn; + MYSQL_RES *res; + MYSQL_ROW row; + char *server="localhost"; + char *user="root"; + char *password="123"; + char *database="opentutorials"; + if(!(conn=mysql_init((MYSQL*)NULL))){ + printf("init fail\n"); + exit(1); + } + if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){ + printf("connect error.\n"); + exit(1); + } + if(mysql_select_db(conn,database)!=0){ + mysql_close(conn); + printf("select_db_fail.\n"); + exit(1); + } + if(mysql_query(conn,"select * from tbl_deviceinfo")){ + printf("query fail\n"); + exit(1); + } + res=mysql_store_result(conn); + NUM=0; + while((row=mysql_fetch_row(res))!=NULL){ + equipments[NUM].m_id=atoi(row[0]);//id +// printf("====%s:%s",row[0],row[11]); //sprintf(equipments[NUM].m_id,"%d",row[0]); + if(strcmp(equipments[NUM].ip,row[1])!=0) ret = 1; + if(strcmp(equipments[NUM].port,row[2])!=0) ret = 1; + if(strcmp(equipments[NUM].serverIP,row[3])!=0) ret = 1; + if(strcmp(equipments[NUM].serverport,row[4])!=0) ret = 1; + if(strcmp(equipments[NUM].pass,row[5])!=0) ret = 1; + if(strcmp(equipments[NUM].user,row[6])!=0) ret = 1; + + + memset(equipments[NUM].ip,0,32); + strcpy(equipments[NUM].ip,row[1]);//equipIP + memset(equipments[NUM].port,0,10); + strcpy(equipments[NUM].port,row[2]);//equipPort + + memset(equipments[NUM].serverIP,0,32); + strcpy(equipments[NUM].serverIP,row[3]);//ServerIP + memset(equipments[NUM].serverport,0,10); + strcpy(equipments[NUM].serverport,row[4]);//ServerPort + + memset(equipments[NUM].user,0,64); + strcpy(equipments[NUM].user,row[6]);//equipUser + memset(equipments[NUM].pass,0,64); + strcpy(equipments[NUM].pass,row[5]);//equipPass + + equipments[NUM].reboot=atoi(row[11]);//reboot option. + NUM++; + } + mysql_close(conn); + puts("Step.0 ========>MySQL is getting ok"); + return ret; + +} +int UpdateMysqData(int key){ + int ret=0; + MYSQL *conn; + char *server="localhost"; + char *user="root"; + char *password="123"; + char *database="opentutorials"; + char query[255]; + puts("Step.0 ========>MySQL is getting......"); + if(!(conn=mysql_init((MYSQL*)NULL))){ + printf("init fail\n"); + exit(1); + } + if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){ + printf("connect error.\n"); + exit(1); + } + if(mysql_select_db(conn,database)!=0){ + mysql_close(conn); + printf("select_db_fail.\n"); + exit(1); + } + sprintf(query,"UPDATE tbl_deviceinfo SET reboot=0 where id=%d",key); + if(mysql_query(conn,query)){ + printf("query fail\n"); + exit(1); + } + mysql_close(conn); + return ret; + +}*/ + +int net_test(char* serverIP,char* port){ + struct sockaddr_in servaddr; + int strlen=sizeof(servaddr); + int sockfdd; + if((sockfdd=socket(PF_INET,SOCK_STREAM,0))<0){ + perror("socket fail"); + close(sockfdd); + return -1; + } + memset(&servaddr,0,strlen); + servaddr.sin_family=AF_INET; + inet_pton(AF_INET,serverIP,&servaddr.sin_addr); + servaddr.sin_port=htons(atoi(port)); + if(connect(sockfdd,(struct sockaddr*)&servaddr,strlen)<0){ +// perror("connect fail-3"); + close(sockfdd); + return -1; + } + close(sockfdd); + return 1; +} +void GPIOinit(void) +{ + int retVal = -1; + int PortNum = 0xA06; + unsigned char wVal = 0x15; + retVal = GPIO_OPEN(PortNum); + printf("GPIO OPEN RES = %d \n",retVal); + GPIO_WRITE(PortNum,wVal); + printf("GPIO WRITE VALUE = 0x%X \n", wVal); + + retVal = GPIO_READ(PortNum); + printf("GPIO READ VALUE 02 = 0x%X \n",retVal); + + GPIO_CLOSE(PortNum); +} +int GPIOoutput(int no) +{ + int PortNum = 0xA06; + switch(no){ + case 0: + GPIO_WRITE(PortNum,0x15); + return 0; + case 1: + GPIO_WRITE(PortNum,0x57); + return 0; + case 2: + GPIO_WRITE(PortNum,0x5D); + return 0; + case 3: + GPIO_WRITE(PortNum,0x5F); + return 0; + case 4: + GPIO_WRITE(PortNum,0x75); + return 0; + case 5: + GPIO_WRITE(PortNum,0x77); + return 0; + case 6: + GPIO_WRITE(PortNum,0x7D); + return 0; + case 7: + GPIO_WRITE(PortNum,0x7F); + return 0; + case 8: + GPIO_WRITE(PortNum,0xD5); + return 0; + case 9: + GPIO_WRITE(PortNum,0xD7); + return 0; + case 10: + GPIO_WRITE(PortNum,0xDD); + return 0; + case 11: + GPIO_WRITE(PortNum,0xDF); + return 0; + case 12: + GPIO_WRITE(PortNum,0xF5); + return 0; + case 13: + GPIO_WRITE(PortNum,0xF7); + return 0; + case 14: + GPIO_WRITE(PortNum,0xFD); + return 0; + case 15: + GPIO_WRITE(PortNum,0xFF); + return 0; + } + return -1; +} +int GPIO_OPEN(int PortNum) +{ + return ioperm(PortNum, 0x01, 0x01); +} + +void GPIO_CLOSE(int PortNum) +{ + ioperm(PortNum, 0x01, 0x00); +} + +int GPIO_READ(int PortNum) +{ + return inb(PortNum); +} + +void GPIO_WRITE(int PortNum,unsigned char DATA) +{ + outb(DATA,PortNum); +} + +void EquipCheckGPIOOut(void) + { + + int PortNum = 0xA06; + int i; + int retVal; + int result; + 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); + 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); + retVal = GPIO_OPEN(PortNum); + if(retVal == 0) + { + retVal = GPIOoutput(i+1); + if(retVal==0) printf("GPIO output OK! \n"); + GPIO_CLOSE(PortNum); + } + else printf("GPIO OPEN FAIL! \n"); + } + else printf("Equipment(%d) Check Success!=%s:%s\n",i+1,equipments[i].ip,equipments[i].port); + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////// added on 2016.11.21 +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +int memorycmp(unsigned char* src ,int slen, char* token, int len) +{ + int start=0,k,i,klen=strlen(token); +lp1: + for(i=start;i<slen;i++) if(src[i]==token[0]) break; + if (i>=slen) return -1; + k=i; + for(i=0;i<klen;i++) + { + if(src[k+i]!=token[i]) + { + start=k+i; + goto lp1; + } + } + if(i>=klen) return k; + return -1; +} +int stringcmp(char* src ,char* token, int len) +{ + int start=0,k,i,slen=strlen(src); +lp: + for(i=start;i<slen;i++) if(src[i]==token[0]) break; + if (i>=slen) return -1; + k=i; + for(i=0;i<len;i++) + { + if(src[k+i]!=token[i]) + { + start=k+i; + goto lp; + } + } + if(i>=len) return k; + return -1; +} + +void AurhorizationResponseBytesReal(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,const char *cnonce,char *response) +{ + // Authorization: Digest username="supervisor", realm="VideoIQ", nonce="n99u1VYBAABAf0HT+h92EO4hT2CzmfxG", uri="/PSIA/VIQ/Event/metadata/0/files", response="7d8d929e39655ad9f3e6e94e9004792e", qop=auth, nc=00000001, cnonce="0d2175d8cdb63f84f18894200e129ace", algorithm="MD5" + int idx=0,len; + idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG" + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",",cnonce=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",",nc=00000001,qop=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;//cnonce + byte_array_out[idx++]=0x22;//'"' + + len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"%s",response);idx+=len; + byte_array_out[idx++]=0x22;//'"' + *byte_array_length_out = idx; +} +int CharToByte(char* chars, char* bytes, unsigned int count,char* ptr1,char* ptr2,char* ptr3,char* ptr4,unsigned char* number){ + int p=0; + int n=0; + int i=0; + unsigned char temp; + for(i = 0; i < count; i++) + { + temp = (unsigned char)chars[i]; + if (p==1) + { + if (temp!=0x22) + { + bytes[n++]=(unsigned char)chars[i]; + } + } + if (temp==0x22) + { + p=p+1; + } + if (p==2) + { + bytes[n++]=0x2C; + p=0; + } + + } + char* token=NULL; + char s[]=","; + token=strtok(bytes,s); + number[0]=strlen(token); + memcpy(ptr1,token,strlen(token)); + int nn=0; + while(token!=NULL) + { + token=strtok(NULL,s); + nn=nn+1; + if (nn==1) + { + number[1]=strlen(token); + memcpy(ptr2,token,strlen(token)); + } + if (nn==2) + { + //ptr3=new char[strlen(token)]; + number[2]=strlen(token); + memcpy(ptr3,token,strlen(token)); + } + if (nn==3) + { + if(token!=NULL) + { + number[3]=strlen(token); + memcpy(ptr4,token,strlen(token)); + }//ptr3=new char[strlen(token)]; + + } + } + return n; +} +//for real event +void MakeAuthorizedPacketReal(char* buff,int length, char* Method,char* uri,int Idx) +{ + char Device[150] ; + char Realm_buf1[512] ; + char nonce_buf2[512] ; + char auth_buf3[512] ; + char domain_buf4[512] ; + unsigned char len[4]; + + memset(Device,0,150); + memset(domain_buf4,0,512); + + CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len); + const char* cnonce_buf="163acd0e58793a190f29ee879d4b224f";//"08a9d86c1b5e45963cf82f43dca59c51"; + Realm_buf1[len[0]]=0; + nonce_buf2[len[1]]=0; + auth_buf3[len[2]]=0; + const char* nc="00000001"; + //CString qop;qop=auth_buf3;///////////////////////////// + char User[200]; + memset(User,0,200); + sprintf(User,"%s:%s:%s",equipments[Idx].user,Realm_buf1,equipments[Idx].pass); + + char urii[200]; + int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot"; + urii[kk]=0; + char* A1 = MDString(User); + char AA1[33]; + memset(AA1,0,33); + memcpy(AA1,A1,strlen(A1)); + char* A2 = MDString(urii); + char AA2[33]; + memset(AA2,0,33); + memcpy(AA2,A2,strlen(A2)); + char rrr[200]; + memset(rrr,0,200); + sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2); + // printf("%s:%s:%s:%s:auth:%s\n",AA1,nonce_buf2,nc,cnonce_buf,AA2); + char* response = MDString(rrr); + char res[33]; + memset(res,0,33); + memcpy(res,response,strlen(response)); + + //// 绗簩娆� 鍙戦�� + char byte_arrayxxx[2600]; + int lengthxxx = 0; + int iidx = 0; + AurhorizationResponseBytesReal(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res); + + int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen; + llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen; + strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx; + byte_array[iidx]=0x0d; iidx+=1; + byte_array[iidx]=0x0a; iidx+=1; + llen = sprintf(&byte_array[iidx],"Host: %s\r\n",equipments[Idx].ip); iidx+=llen; + llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen; + // llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen; + byte_array[iidx]=0x0d; iidx+=1; + byte_array[iidx]=0x0a; iidx+=1; + byte_array[iidx]=0; + +} + +//// 鍔熻兘锛氬紑濮嬫煡鐪嬪疄鏃剁洃鎺� +//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛,瀵嗙爜 +//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触) +int RealEventStart(int Idx) +{ + + char buff[10240]; + int bbbb=0; + if(equipments[Idx].ip==NULL || equipments[Idx].ip[0]==0) return -1; + + struct sockaddr_in servaddr; + int strlen1=sizeof(servaddr); + if((rsock_down[Idx]=socket(PF_INET,SOCK_STREAM,0))<0){ + perror("socket fail2"); + return -1; + } + memset(&servaddr,0,strlen1); + servaddr.sin_family=AF_INET; + inet_pton(AF_INET,equipments[Idx].ip,&servaddr.sin_addr); + servaddr.sin_port=htons(atoi(equipments[Idx].port)); + + sigset(SIGALRM, u_alarm_handler);//add 2016.11.22 + alarm(2); + int rt = connect(rsock_down[Idx],(struct sockaddr*)&servaddr,strlen1); + alarm(0); + sigrelse(SIGALRM); + if(rt<0){ + printf("Equipment connect fail-%s:%s\n",equipments[Idx].ip,equipments[Idx].port); + close(rsock_down[Idx]); + return -1; + } + + int length = 0; + length = sprintf(byte_array,"POST /PSIA/VIQ/System/sessions/permanent HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",equipments[Idx].ip); + write(rsock_down[Idx],byte_array,length); + printf("%s",byte_array); + while(1){ + memset(buff,0,sizeof(buff)); + sigset(SIGALRM, u_alarm_handler);//add 2016.11.22 + alarm(2); + length=read(rsock_down[Idx],&buff,sizeof(buff)); + alarm(0); + sigrelse(SIGALRM); + printf("Myequipment connect ==================length =%d:\n",length); + if(length<=0) + { + close(rsock_down[Idx]); + return -1; + } + if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==0) + { + // analyse reception + MakeAuthorizedPacketReal(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent",Idx); + zclock_sleep(100); + write(rsock_down[Idx],byte_array,strlen(byte_array)); +// printf("%s\n",(char*)byte_array); + bbbb=1; + continue; + } + if(bbbb==1){ + int sidx = stringcmp((char*)buff,"<urn:id>",8); + if(sidx >=0){//<urn:ViqDateTimeInterval urn:version="1.0" xmlns:urn="urn:videoiq-com"><urn:startTime urn:version="1.0"><urn:date>2016-08-18T01:07:20.749</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version="1.0"><urn:date>2016-08-29T08:33:48.231</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval> + int eidx = stringcmp((char*)buff,"</urn:id>",9); + if(eidx>=0 && sidx+8<eidx){ + memcpy(sessions[Idx],&buff[sidx+8],eidx-sidx-8); + bbbb=2; + printf("SessionID =======> %s\n",(char*)sessions[Idx]); + break; + } + } + } + } + close(rsock_down[Idx]); + + if((rsock_down[Idx]=socket(PF_INET,SOCK_STREAM,0))<0){ + perror("socket fail2"); + return -1; + } + memset(&servaddr,0,strlen1); + servaddr.sin_family=AF_INET; + inet_pton(AF_INET,equipments[Idx].ip,&servaddr.sin_addr); + servaddr.sin_port=htons(80); + sigset(SIGALRM, u_alarm_handler);//add 2016.11.22 + alarm(2); + rt = connect(rsock_down[Idx],(struct sockaddr*)&servaddr,strlen1); + alarm(0); + sigrelse(SIGALRM); + if(rt<0){ + printf("Equipment connect fail-%s:%d\n",equipments[Idx].ip,80); + close(rsock_down[Idx]); + return -2; + } + char uri[200]; + sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx]); + length = sprintf(byte_array,"GET %s HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",uri,equipments[Idx].ip); + write(rsock_down[Idx],byte_array,strlen(byte_array)); + while(1){ + memset(buff,0,sizeof(buff)); + sigset(SIGALRM, u_alarm_handler);//add 2016.11.22 + alarm(2); + length=read(rsock_down[Idx],&buff,sizeof(buff)); + alarm(0); + sigrelse(SIGALRM); + if(length<=0) + { + close(rsock_down[Idx]); + break; + } + if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==2) + { + char uri[200]; + sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx]); + MakeAuthorizedPacketReal(buff,length,"GET",uri,Idx); + write(rsock_down[Idx],byte_array,strlen(byte_array)); +// printf("%s\n",(char*)byte_array); + bbbb=3; + continue; + } + if(stringcmp(buff,"multipart/text; boundary=VIQeventEVENTeventVIQ",46)>0 && bbbb==3) + { + pthread_create(&thread_Real[Idx],NULL,&MyEquipmentthread,(void*)Idx);//super(void*)(&equipments[0]) + gCapturing[Idx]=1; + printf("%s\n","QQQQQQQQQQQQQQQQQQQQ Capturing..."); + //printf("%s\n",buff); + return 0; + } + } + return -2; +} + + + + + diff --git a/pans/test.cpp b/pans/test.cpp new file mode 100644 index 0000000..be6b111 --- /dev/null +++ b/pans/test.cpp @@ -0,0 +1,255 @@ +#include <stdio.h> +#include <iostream> +#include <string.h> +#include <stdlib.h> +//#include "Windows.h" +#include "HCNetSDK.h" +#include <time.h> + +using namespace std; +#define XML_BUF 3*1024*1024 +void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser) { + char tempbuf[256] = {0}; + switch(dwType) { + case EXCEPTION_RECONNECT: +// 棰勮鏃堕噸杩� + printf("----------reconnect--------%d\n", time(NULL)); + break; + default: + break; + } +} +int main() { + DWORD dwRet; + + NET_DVR_Init(); + NET_DVR_SetConnectTime(2000, 1); + NET_DVR_SetReconnect(10000, true); + NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL); + + LONG lUserID; + + NET_DVR_DEVICEINFO_V30 struDeviceInfo; + lUserID = NET_DVR_Login_V30("192.168.1.101", 8000, "admin", "a1234567", &struDeviceInfo); + if (lUserID < 0) { + printf("NET_DVR_Login_V30 failed, err: %d\n", NET_DVR_GetLastError()); + NET_DVR_Cleanup(); + return -1; + } + + //DWORD dwWallNo = 1 << 24; + // + ////--------------------------------------- + //// 鑾峰彇鐢佃澧欐樉绀鸿緭鍑轰綅缃紝鑾峰彇4涓睆骞曚俊鎭� + //DWORD m_dwDispNum=4; + //DWORD m_lDispChan[4]; //鏄剧ず杈撳嚭鍙凤紝閫氳繃NET_DVR_GET_VIDEOWALLDISPLAYNO鑾峰彇 + //m_lDispChan[0]= 0x01000001; + //m_lDispChan[1]= 0x01000002; + //m_lDispChan[2]= 0x01000003; + //m_lDispChan[3]= 0x01000004; + //DWORD m_dwStatus[4]; + //NET_DVR_VIDEOWALLDISPLAYPOSITION m_struWallDispPos[4]; + //memset(m_dwStatus, 0, sizeof(m_dwStatus)); + //memset(m_struWallDispPos, 0, sizeof(m_struWallDispPos)); + //if (!NET_DVR_GetDeviceConfig(lUserID, NET_DVR_GET_VIDEOWALLDISPLAYPOSITION, m_dwDispNum, m_lDispChan, sizeof(DWORD) * m_dwDispNum, + // m_dwStatus, m_struWallDispPos, m_dwDispNum* sizeof(NET_DVR_VIDEOWALLDISPLAYPOSITION))) { + // printf("NET_DVR_GET_VIDEOWALLDISPLAYPOSITION failed, err: %d\n", NET_DVR_GetLastError()); + //} + // + ////--------------------------------------- + ////璁剧疆鐢佃澧欐樉绀鸿緭鍑轰綅缃�, 璁剧疆4涓樉绀哄睆骞曞湪鐢佃澧欎笂鐨勪綅缃� + //m_struWallDispPos[0].byEnable=1; + //m_struWallDispPos[0].dwVideoWallNo= dwWallNo; + //m_struWallDispPos[0].struRectCfg.dwXCoordinate=0; + //m_struWallDispPos[0].struRectCfg.dwYCoordinate=0; + // + //m_struWallDispPos[1].byEnable=1; + //m_struWallDispPos[1].dwVideoWallNo= dwWallNo; + //m_struWallDispPos[1].struRectCfg.dwXCoordinate=1920; + //m_struWallDispPos[1].struRectCfg.dwYCoordinate=0; + // + //m_struWallDispPos[2].byEnable=1; + //m_struWallDispPos[2].dwVideoWallNo= dwWallNo; + //m_struWallDispPos[2].struRectCfg.dwXCoordinate=0; + //m_struWallDispPos[2].struRectCfg.dwYCoordinate=1080; + // + //m_struWallDispPos[3].byEnable=1; + //m_struWallDispPos[3].dwVideoWallNo= dwWallNo; + //m_struWallDispPos[3].struRectCfg.dwXCoordinate=1920; + //m_struWallDispPos[3].struRectCfg.dwYCoordinate=1080; + // + //if (!NET_DVR_SetDeviceConfig(lUserID, NET_DVR_SET_VIDEOWALLDISPLAYPOSITION, m_dwDispNum, m_lDispChan,sizeof(DWORD) * m_dwDispNum, + // m_dwStatus, m_struWallDispPos, m_dwDispNum* sizeof(NET_DVR_VIDEOWALLDISPLAYPOSITION))) { + // printf("NET_DVR_SET_VIDEOWALLDISPLAYPOSITION failed, err: %d\n", NET_DVR_GetLastError()); + //} + + + + //--------------------------------------- + //鑾峰彇鐢佃澧欑獥鍙e弬鏁� + //DWORD m_dwWinCount; + //绐楀彛涓暟 + //char *pTemp = new char[4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION)]; + //memset(pTemp, 0, 4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION)); + //鑾峰彇鐢佃澧欐墍鏈夌獥鍙d俊鎭紝鍙渶浼犵數瑙嗗鍙� + //if (!NET_DVR_GetDeviceConfig(lUserID, NET_DVR_GET_VIDEOWALLWINDOWPOSITION, 0xffffffff, &dwWallNo, sizeof(DWORD), NULL, + // pTemp, 4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION))) { + // printf("NET_DVR_GET_VIDEOWALLWINDOWPOSITION error, err: %d\n", NET_DVR_GetLastError()); + //} + //m_dwWinCount = *((DWORD*)pTemp); + //printf("m_dwWinCount=%d\n", m_dwWinCount); + + //杩斿洖鐨勫墠4涓瓧鑺備负绐楀彛涓暟delete []pTemp; + + + //--------------------------------------- + //璁剧疆鐢佃澧欑獥鍙e弬鏁帮紝鍗冲紑绐楋紝鍧愭爣鍦ㄧ數瑙嗗鑼冨洿涔嬪唴 + DWORD m_dwWinCount=1; + //寮�涓や釜绐楀彛 + DWORD m_dwWinNum[1]; + //1瀛楄妭澧欏彿+ 1瀛楄妭淇濈暀+ 2瀛楄妭绐楀彛鍙穖_dwWinNum[0] = 1<<24; + //寮�绐楁椂绐楀彛鍙蜂负0 + m_dwWinNum[0] = 1<<24; + + + NET_DVR_VIDEOWALLWINDOWPOSITION m_struWinPos[1]; + memset(m_struWinPos, 0, sizeof(m_struWinPos)); + + m_struWinPos[0].dwSize=sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION); + m_struWinPos[0].byEnable=1; + m_struWinPos[0].struRect.dwXCoordinate=100; + m_struWinPos[0].struRect.dwYCoordinate=100; + m_struWinPos[0].struRect.dwWidth=1720; + m_struWinPos[0].struRect.dwHeight=1720; + + //m_struWinPos[1].dwSize=sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION); + //m_struWinPos[1].byEnable=1; + //m_struWinPos[1].struRect.dwXCoordinate=1920; + //m_struWinPos[1].struRect.dwYCoordinate=1920; + //m_struWinPos[1].struRect.dwWidth=800; + //m_struWinPos[1].struRect.dwHeight=600; + + + + + DWORD m_dwWinStatus[1]; + DWORD dwRetWinNum[1]; + //寮�绐楁椂绐楀彛鍙风敱璁惧杩斿洖 + + NET_DVR_IN_PARAM struInputPapam = {0}; + struInputPapam.struCondBuf.pBuf = &m_dwWinNum; + //杈撳叆鏉′欢缂撳啿鍖� + struInputPapam.struCondBuf.nLen = m_dwWinCount * sizeof(DWORD); + struInputPapam.dwRecvTimeout = 5000; + //鎺ユ敹瓒呮椂鏃堕棿 + struInputPapam.struInParamBuf.pBuf = m_struWinPos; + struInputPapam.struInParamBuf.nLen = m_dwWinCount * sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION); + + NET_DVR_OUT_PARAM struOutputPapam = {0}; + struOutputPapam.lpStatusList = m_dwWinStatus; + struOutputPapam.struOutBuf.pBuf = dwRetWinNum; + struOutputPapam.struOutBuf.nLen = m_dwWinCount*sizeof(DWORD); + + if (!NET_DVR_SetDeviceConfigEx(lUserID, NET_DVR_SET_VIDEOWALLWINDOWPOSITION, m_dwWinCount, &struInputPapam, &struOutputPapam)) { + printf("NET_DVR_SET_VIDEOWALLWINDOWPOSITION error, err: %d\n", NET_DVR_GetLastError()); + } + + + + //鍓嶇璁惧 鍔ㄦ�佽В鐮� + NET_DVR_PU_STREAM_CFG_V41 m_struDynamicInfo= {0}; + m_struDynamicInfo.dwSize=sizeof(m_struDynamicInfo); + m_struDynamicInfo.byStreamMode=1; + strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byAddress, "192.168.1.63"); + m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.wDVRPort=8000; + strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.sUserName,"admin"); + strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.sPassword,"admin12345"); + m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byChannel=1; + m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byFactoryType=0; + + //int byWallNo=1,dwSubWinNo=1,dwWinNo=1; + + DWORD dwDecChanNum=0x01000002; + //DWORD dwDecChanNum=(byWallNo << 24) | (dwSubWinNo<<16) |dwWinNo; + //1瀛楄妭澧欏彿+1瀛楄妭瀛愮獥鍙e彿+2瀛楄妭绐楀彛鍙�: (byWallNo << 24) | (dwSubWinNo<<16) |dwWinNo; + if (!NET_DVR_MatrixStartDynamic_V41(lUserID, dwDecChanNum, &m_struDynamicInfo)) { + printf("NET_DVR_MatrixStartDynamic_V41 error, err: %d\n", NET_DVR_GetLastError()); + } + + /*char logobuf[50000]; + NET_DVR_GetDeviceAbility(lUserID,WALL_ABILITY,NULL,0,logobuf,50000); + FILE * pFile; + pFile = fopen ("./a.xml","w"); + printf("----test open----\n"); + if (pFile!=NULL) + { + printf("----test----%d\n",sizeof(pFile)); + fwrite(logobuf, 1, sizeof(logobuf), pFile); + + fclose (pFile); + } + else + perror ("Error opening file"); + */ + //寮�鍚鎶� + NET_DVR_SetAlarmOut(lUserID,0xff00,1); + + + + + + + NET_DVR_DISP_LOGOCFG net_dvr_disp_logocfg1; + net_dvr_disp_logocfg1.dwCorordinateX = 10; + net_dvr_disp_logocfg1.dwCorordinateY = 10; + net_dvr_disp_logocfg1.wPicWidth = 32; + net_dvr_disp_logocfg1.wPicHeight = 32; + net_dvr_disp_logocfg1.byRes1[4]=0; + net_dvr_disp_logocfg1.byFlash = 1; + net_dvr_disp_logocfg1.byTranslucent = 0; + net_dvr_disp_logocfg1.byRes2[6]=0; + net_dvr_disp_logocfg1.dwLogoSize=0; + + + + + char logobuf[10000]; + { + FILE * pFile; + pFile = fopen ("./ico.bmp","rb"); + fseek(pFile,0,SEEK_END); + int nFileLen = ftell(pFile); + fseek(pFile,0,SEEK_SET); + + printf("----test open----,%d\n",nFileLen); + if (pFile!=NULL) + { + printf("----test----\n"); + net_dvr_disp_logocfg1.dwLogoSize = fread(logobuf, 1, nFileLen, pFile); + fclose (pFile); + } + else + perror ("Error opening file"); + } + + if (!NET_DVR_UploadLogo(lUserID, 1, &net_dvr_disp_logocfg1, logobuf)) { + printf("NET_DVR_UploadLogo error, err: %d\n", NET_DVR_GetLastError()); + } + + if (!NET_DVR_LogoSwitch(lUserID, 1, NET_DVR_SHOWLOGO)) { + printf("NET_DVR_LogoSwitch error, err: %d\n", NET_DVR_GetLastError()); + } + //if (!NET_DVR_MatrixStopDynamic(lUserID,dwDecChanNum)) { + // printf("NET_DVR_MatrixStopDynamic error, err: %d\n", NET_DVR_GetLastError()); + //} + +// NET_DVR_MatrixStopDynamic +// NET_DVR_MatrixStopPassiveDecode + //瑙i櫎璀︽姤 + NET_DVR_SetAlarmOut(lUserID,0xff00,0); + //娉ㄩ攢鐢ㄦ埛 + NET_DVR_Logout(lUserID); + //閲婃斁SDK璧勬簮 + NET_DVR_Cleanup(); + return 0; +} \ No newline at end of file -- Gitblit v1.8.0