From 9e06836fdc70a4045f6dd0e01c97c4610aecbd5e Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期四, 14 十月 2021 15:45:45 +0800
Subject: [PATCH] add ptzTrack toPreset fun
---
hikptz_test.go | 19 ++++
.gitignore | 2
hikptz.go | 52 +++++-------
hikptz.h | 14 +-
hikptz.cpp | 117 +++++++++++++++++++++++++++++
5 files changed, 168 insertions(+), 36 deletions(-)
diff --git a/.gitignore b/.gitignore
index 967e1de..cf98025 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
+.idea/
+.vscode/
# Folders
_obj
diff --git a/hikptz.cpp b/hikptz.cpp
new file mode 100644
index 0000000..3ba09ff
--- /dev/null
+++ b/hikptz.cpp
@@ -0,0 +1,117 @@
+#include "HCNetSDK.h"
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+using namespace std;
+
+#include "hikptz.h"
+
+void ptzTrack(char *ip, char *userName, char *password, int port, int channel, int xBottom, int xTop, int yBottom, int yTop)
+{
+ // 鍒濆鍖�
+ NET_DVR_Init();
+
+ //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+ NET_DVR_SetConnectTime(2000, 1);
+ NET_DVR_SetReconnect(10000, true);
+
+ //璁剧疆寮傚父娑堟伅鍥炶皟鍑芥暟
+ NET_DVR_SetExceptionCallBack_V30(0, NULL, NULL, NULL);
+
+ // 娉ㄥ唽璁惧
+
+ //鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
+ NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+ struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+ strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+ struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+ strcpy(struLoginInfo.sUserName, userName); //璁惧鐧诲綍鐢ㄦ埛鍚�
+ strcpy(struLoginInfo.sPassword, password); //璁惧鐧诲綍瀵嗙爜
+
+ //璁惧淇℃伅, 杈撳嚭鍙傛暟
+ NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+ LONG lUserID;
+ lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+ if (lUserID < 0)
+ {
+ printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Cleanup();
+ return;
+ }
+
+ LPNET_DVR_POINT_FRAME zoneInfo = {0};
+ zoneInfo->xTop = xTop; //
+ zoneInfo->yTop = yTop; //
+ zoneInfo->xBottom = xBottom; //
+ zoneInfo->yBottom = yBottom; //
+
+ int iChannel = channel; //璁惧閫氶亾鍙�
+ if (!NET_DVR_PTZSelZoomIn_EX(lUserID, iChannel, zoneInfo))
+ {
+ printf("PAN_LEFT start failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(lUserID);
+ NET_DVR_Cleanup();
+ return;
+ }
+
+ //娉ㄩ攢鐢ㄦ埛
+ NET_DVR_Logout(lUserID);
+
+ //閲婃斁SDK璧勬簮
+ NET_DVR_Cleanup();
+
+ return;
+}
+
+void toPreset(char *ip, char *userName, char *password, int port, int channel)
+{
+ // 鍒濆鍖�
+ NET_DVR_Init();
+ //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+ NET_DVR_SetConnectTime(2000, 1);
+ NET_DVR_SetReconnect(10000, true);
+
+ //---------------------------------------
+ //璁剧疆寮傚父娑堟伅鍥炶皟鍑芥暟
+ NET_DVR_SetExceptionCallBack_V30(0, NULL, NULL, NULL);
+
+ //---------------------------------------
+ // 娉ㄥ唽璁惧
+ LONG lUserID;
+ //鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
+ NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+ struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+ strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+ struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+ strcpy(struLoginInfo.sUserName, userName); //璁惧鐧诲綍鐢ㄦ埛鍚�
+ strcpy(struLoginInfo.sPassword, password); //璁惧鐧诲綍瀵嗙爜
+
+ //璁惧淇℃伅, 杈撳嚭鍙傛暟
+ NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+ lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+ if (lUserID < 0)
+ {
+ printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Cleanup();
+ return;
+ }
+
+ int iChannel = channel; //璁惧閫氶亾鍙�
+ DWORD dwPTZCommand = GOTO_PRESET; //杞埌棰勭疆鐐�
+ if (!NET_DVR_PTZPreset_Other(lUserID, iChannel, GOTO_PRESET, 1))
+ {
+ printf("PAN_LEFT start failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(lUserID);
+ NET_DVR_Cleanup();
+ return;
+ }
+ //娉ㄩ攢鐢ㄦ埛
+ NET_DVR_Logout(lUserID);
+
+ //閲婃斁SDK璧勬簮
+ NET_DVR_Cleanup();
+
+ return;
+}
\ No newline at end of file
diff --git a/hikptz.go b/hikptz.go
index 45d0d19..f58964a 100644
--- a/hikptz.go
+++ b/hikptz.go
@@ -1,45 +1,39 @@
-package hikvoice
+package hikControl
/*
-#cgo CFLAGS: -I${SRCDIR}/include -w -g
-#cgo LDFLAGS: -L${SRCDIR}/libs
-#cgo LDFLAGS: -lHikVoice -lAudioRender -lHCCore -lhcnetsdk -lhpr
-#cgo LDFLAGS: -ldl -lm
-
+#cgo CXXFLAGS: -I${SRCDIR}/include -w -g
+#cgo LDFLAGS: -L${SRCDIR}/lib
+#cgo LDFLAGS: -lhcnetsdk -lhpr -lHCCore
#include <stdlib.h>
#include "hikptz.h"
*/
import "C"
-
import (
- "unsafe"
+ "unsafe"
)
// SendVoice Send Voice
-func PtzTrack(ip,password,userName string, port, channel,xBottom,xTop,yBottom,yTop int) {
-
- cip := C.CString(ip)
- defer C.free(unsafe.Pointer(cip))
- cusrname := C.CString(userName)
- defer C.free(unsafe.Pointer(cusrname))
- cpasswd := C.CString(password)
- defer C.free(unsafe.Pointer(cpasswd))
-
+func PtzTrack(ip, userName, password string, port, channel, xBottom, xTop, yBottom, yTop int) {
- C.PtzTrack(cip, cusrname, cpasswd, C.int(port), C.int(channel),C.int(xBottom),C.int(xTop),C.int(yBottom),C.int(yTop) )
+ cIp := C.CString(ip)
+ cUsrname := C.CString(userName)
+ cPasswd := C.CString(password)
+
+ defer C.free(unsafe.Pointer(cIp))
+ defer C.free(unsafe.Pointer(cUsrname))
+ defer C.free(unsafe.Pointer(cPasswd))
+
+ C.ptzTrack(cIp, cUsrname, cPasswd, C.int(port), C.int(channel), C.int(xBottom), C.int(xTop), C.int(yBottom), C.int(yTop))
}
-// void ToPreset(char *ip, char *userName, char *password, char *port ,int channel )
+func ToPreset(ip, userName, password string, port, ch int) {
-func ToPreset(ip,userName,password string, port , ch int) {
-
cip := C.CString(ip)
- defer C.free(unsafe.Pointer(cip))
- cusrname := C.CString(userName)
- defer C.free(unsafe.Pointer(cusrname))
- cpasswd := C.CString(password)
- defer C.free(unsafe.Pointer(cpasswd))
-
+ defer C.free(unsafe.Pointer(cip))
+ cusrname := C.CString(userName)
+ defer C.free(unsafe.Pointer(cusrname))
+ cpasswd := C.CString(password)
+ defer C.free(unsafe.Pointer(cpasswd))
- C.PtzTrack(cip, cusrname, cpasswd, C.int(port), C.int(ch) )
-}
\ No newline at end of file
+ C.toPreset(cip, cusrname, cpasswd, C.int(port), C.int(ch))
+}
diff --git a/hikptz.h b/hikptz.h
index 66090b4..d1a587b 100644
--- a/hikptz.h
+++ b/hikptz.h
@@ -1,15 +1,15 @@
#ifndef _HIKPTZ_H
#define _HIKPTZ_H
-
+
#ifdef __cplusplus
-extern "C" {
+extern "C"
+{
#endif
-
-void PtzTrack(char *ip, char *userName, char *password, char *port ,int channel ,int xBottom ,int xTop ,int yBottom ,int yTop )
-void ToPreset(char *ip, char *userName, char *password, int port ,int channel )
-
+
+ void ptzTrack(char *ip, char *userName, char *password, int port, int channel, int xBottom, int xTop, int yBottom, int yTop);
+ void toPreset(char *ip, char *userName, char *password, int port, int channel);
#ifdef __cplusplus
}
#endif
-
+
#endif
\ No newline at end of file
diff --git a/hikptz_test.go b/hikptz_test.go
new file mode 100644
index 0000000..e01112e
--- /dev/null
+++ b/hikptz_test.go
@@ -0,0 +1,19 @@
+package hikControl
+
+import (
+ "fmt"
+ "testing"
+)
+
+func TestMain(m *testing.M) {
+ fmt.Println("begin")
+ ip := "192.168.5.35"
+ username := "admin"
+ passwd := "a1234567"
+ port := 8000
+ PtzTrack(ip, username, passwd, port, 1, 50, 50, 50, 50)
+ fmt.Println("end PtzTrack")
+
+ ToPreset(ip, username, passwd, port, 1)
+ fmt.Println("end ToPreset")
+}
--
Gitblit v1.8.0