From d563b72610e8859c3b92bfdadf805645c9368559 Mon Sep 17 00:00:00 2001 From: kunmeng Date: Wed, 8 Jan 2025 09:40:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4Golang=E7=9A=84=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + HikBallCamera.go | 155 ----------------------------------------- HikNvr.go | 103 --------------------------- Hikvision.go | 66 ------------------ Type.go | 72 ------------------- go.mod | 5 -- go.sum | 2 - openLibary_unix.go | 12 ---- openLibrary_windows.go | 13 ---- src/HIKBallCamera.cpp | 3 + 10 files changed, 4 insertions(+), 428 deletions(-) delete mode 100644 HikBallCamera.go delete mode 100644 HikNvr.go delete mode 100644 Hikvision.go delete mode 100644 Type.go delete mode 100644 go.mod delete mode 100644 go.sum delete mode 100644 openLibary_unix.go delete mode 100644 openLibrary_windows.go diff --git a/.gitignore b/.gitignore index 7c76223..2fbae5a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /.fleet /cmake-build-debug-visual-studio /cmake-build-release-visual-studio +/cmake-build-debug *.lib *.dll *.so diff --git a/HikBallCamera.go b/HikBallCamera.go deleted file mode 100644 index 141dd58..0000000 --- a/HikBallCamera.go +++ /dev/null @@ -1,155 +0,0 @@ -package HikNetSDK - -import ( - "fmt" - "sync" - "unsafe" -) - -type HIKBallCamera struct { - core unsafe.Pointer - State bool - BallCameraCfg BallCamera - mux sync.RWMutex -} - -func NewHIKBallCamera(BallCameraCfg BallCamera) *HIKBallCamera { - return &HIKBallCamera{ - core: newHIKBallCamera(), - BallCameraCfg: BallCameraCfg, - State: false, - mux: sync.RWMutex{}, - } -} - -func (hikBC *HIKBallCamera) Login() bool { - hikBC.mux.Lock() - hikBC.State = initBallCamera(hikBC.core, hikBC.BallCameraCfg.Ip, hikBC.BallCameraCfg.Port, hikBC.BallCameraCfg.User, hikBC.BallCameraCfg.Password, hikBC.BallCameraCfg.Type) - hikBC.mux.Unlock() - return hikBC.State -} - -func (hikBC *HIKBallCamera) opt(action func() bool) bool { - hikBC.mux.RLock() - if hikBC.State { - hikBC.mux.RUnlock() - hikBC.mux.Lock() - hikBC.State = action() - hikBC.mux.Unlock() - } else { - hikBC.mux.RUnlock() - } - return hikBC.State -} - -func (hikBC *HIKBallCamera) PTZGet(P, T, Z *float32) bool { - return hikBC.opt(func() bool { - return ptzGet(hikBC.core, unsafe.Pointer(P), unsafe.Pointer(T), unsafe.Pointer(Z)) - }) -} - -func (hikBC *HIKBallCamera) PtzTo(Action int, P, T, Z float32) bool { - return hikBC.opt(func() bool { - return ptzTo(hikBC.core, Action, P, T, Z) - }) -} - -func (hikBC *HIKBallCamera) StartBus(Direction, Speed int) bool { - return hikBC.opt(func() bool { - return startBus(hikBC.core, Direction, Speed) - }) -} - -func (hikBC *HIKBallCamera) StopBus(Direction int) bool { - return hikBC.opt(func() bool { - return stopBus(hikBC.core, Direction) - }) -} - -func (hikBC *HIKBallCamera) OneClickToSeeInFullView(point Point) bool { - TransPoint := hikBC.WarpingPtByHomography(hikBC.BallCameraCfg.Matrix.Matrix, point) - return hikBC.PtzTo(5, - float32(hikBC.mapping(hikBC.BallCameraCfg.Matrix.PStart, hikBC.BallCameraCfg.Matrix.PMax, TransPoint.X, hikBC.BallCameraCfg.Matrix.PPositiveDirection, "inv")), - float32(hikBC.mapping(hikBC.BallCameraCfg.Matrix.TStart, hikBC.BallCameraCfg.Matrix.TMax, TransPoint.Y, hikBC.BallCameraCfg.Matrix.TPositiveDirection, "inv")), - 0.0, - ) - -} - -func (hikBC *HIKBallCamera) PTZ2FullView() (Point, error) { - var ptz PTZ - if !hikBC.PTZGet(&ptz.P, &ptz.T, &ptz.Z) { - return Point{}, fmt.Errorf("PTZ Get Error") - } - return hikBC.WarpingPtByHomography(hikBC.BallCameraCfg.Matrix.InvMatrix, Point{ - X: hikBC.mapping(hikBC.BallCameraCfg.Matrix.PStart, hikBC.BallCameraCfg.Matrix.PMax, float64(ptz.P), hikBC.BallCameraCfg.Matrix.PPositiveDirection, ""), - Y: hikBC.mapping(hikBC.BallCameraCfg.Matrix.TStart, hikBC.BallCameraCfg.Matrix.TMax, float64(ptz.T), hikBC.BallCameraCfg.Matrix.TPositiveDirection, "")}), nil -} - -func (hikBC *HIKBallCamera) WarpingPtByHomography(matrix []float64, p Point) Point { - var x, y, z float64 - x = matrix[0]*p.X + matrix[1]*p.Y + 1.*matrix[2] - y = matrix[3]*p.X + matrix[4]*p.Y + 1.*matrix[5] - z = matrix[6]*p.X + matrix[7]*p.Y + 1.*matrix[8] - - x /= z - y /= z - return Point{X: x, Y: y} -} - -func (hikBC *HIKBallCamera) Invert3x3() bool { - - a := hikBC.BallCameraCfg.Matrix.Matrix[0] - b := hikBC.BallCameraCfg.Matrix.Matrix[1] - c := hikBC.BallCameraCfg.Matrix.Matrix[2] - d := hikBC.BallCameraCfg.Matrix.Matrix[3] - e := hikBC.BallCameraCfg.Matrix.Matrix[4] - f := hikBC.BallCameraCfg.Matrix.Matrix[5] - g := hikBC.BallCameraCfg.Matrix.Matrix[6] - h := hikBC.BallCameraCfg.Matrix.Matrix[7] - i := hikBC.BallCameraCfg.Matrix.Matrix[8] - - det := a*(e*i-f*h) - b*(d*i-f*g) + c*(d*h-e*g) - - if det == 0 { - return false - } - - invDet := 1.0 / det - hikBC.BallCameraCfg.Matrix.InvMatrix = []float64{ - (e*i - f*h) * invDet, - (c*h - b*i) * invDet, - (b*f - c*e) * invDet, - (f*g - d*i) * invDet, - (a*i - c*g) * invDet, - (c*d - a*f) * invDet, - (d*h - e*g) * invDet, - (b*g - a*h) * invDet, - (a*e - b*d) * invDet, - } - return true -} - -func (hikBC *HIKBallCamera) mapping(startV float64, max float64, value float64, direction string, method string) float64 { - if direction == "+" { - if method == "inv" { - if value > (max - startV) { - return value - (max - startV) - } else { - return startV + value // 映射 - } - } else { - if value > startV { - return value - startV - } else { - return (max - startV) + value // 映射 - } - } - } else { - if value > startV { - return startV + max - value - } else { - return startV - value - } - } -} diff --git a/HikNvr.go b/HikNvr.go deleted file mode 100644 index 8a49009..0000000 --- a/HikNvr.go +++ /dev/null @@ -1,103 +0,0 @@ -package HikNetSDK - -import ( - "sync" - "unsafe" -) - -type HIKNvr struct { - core unsafe.Pointer - State bool - NvrConfig Nvr - mux sync.RWMutex -} - -func NewHIKNvr(nvrConfig Nvr) *HIKNvr { - return &HIKNvr{ - core: newHIKNvr(), - NvrConfig: nvrConfig, - State: false, - mux: sync.RWMutex{}, - } -} - -func (h *HIKNvr) opt(action func() bool) bool { - h.mux.RLock() - if h.State { - h.mux.RUnlock() - h.mux.Lock() - h.State = action() - h.mux.Unlock() - } - h.mux.RUnlock() - return h.State -} - -func (h *HIKNvr) Login() bool { - h.mux.Lock() - h.State = initNvr(h.core, h.NvrConfig.Ip, h.NvrConfig.Port, h.NvrConfig.User, h.NvrConfig.Password, h.NvrConfig.Channel) - h.mux.Unlock() - return h.State -} - -func (h *HIKNvr) CheckTimeRegionWithMonth(year int, month int) string { - h.mux.RLock() - if h.State { - h.mux.RUnlock() - data := checkTimeRegionWithMonth(h.core, year, month) - if data == "" { - h.mux.Lock() - h.State = false - h.mux.Unlock() - } else { - h.mux.Lock() - h.State = true - h.mux.Unlock() - return data - } - } else { - h.mux.RUnlock() - } - return "" -} - -func (h *HIKNvr) CheckTimeRegionWithDay(year int, month int, day int) string { - h.mux.RLock() - if h.State { - h.mux.RUnlock() - data := checkTimeRegionWithDay(h.core, year, month, day) - if data == "" { - h.mux.Lock() - h.State = false - h.mux.Unlock() - } else { - h.mux.Lock() - h.State = true - h.mux.Unlock() - return data - } - } else { - h.mux.RUnlock() - } - return "" -} -func (h *HIKNvr) UTCDiff() int { - h.mux.RLock() - if h.State { - data := nvrUTCDiff(h.core) - h.mux.RUnlock() - if nvrUTCDiff(h.core) == 5000 { - h.mux.Lock() - h.State = false - h.mux.Unlock() - } else { - h.mux.Lock() - h.State = true - h.mux.Unlock() - return data - } - } else { - h.mux.RUnlock() - } - return 5000 -} diff --git a/Hikvision.go b/Hikvision.go deleted file mode 100644 index d76944b..0000000 --- a/Hikvision.go +++ /dev/null @@ -1,66 +0,0 @@ -package HikNetSDK - -import ( - "fmt" - "github.com/ebitengine/purego" - "runtime" - "unsafe" -) - -var libc uintptr - -var ( - DvrInit func() bool - - newHIKBallCamera func() unsafe.Pointer - initBallCamera func(core unsafe.Pointer, ip string, port string, username string, password string, BallMachineType string) bool - ptzTo func(core unsafe.Pointer, Action int, P float32, T float32, Z float32) bool - ptzGet func(unsafe.Pointer, unsafe.Pointer, unsafe.Pointer, unsafe.Pointer) bool - stopBus func(unsafe.Pointer, int) bool - startBus func(unsafe.Pointer, int, int) bool - - newHIKNvr func() unsafe.Pointer - initNvr func(unsafe.Pointer, string, string, string, string, int) bool - checkTimeRegionWithMonth func(core unsafe.Pointer, year int, month int) string - checkTimeRegionWithDay func(core unsafe.Pointer, year int, month int, day int) string - nvrUTCDiff func(core unsafe.Pointer) int -) - -func init() { - var err error - libc, err = openLibrary(getSystemLibrary()) - if err != nil { - panic(err) - } - - purego.RegisterLibFunc(&DvrInit, libc, "DVR_Init") - - purego.RegisterLibFunc(&newHIKBallCamera, libc, "NewHIKBallCamera") - purego.RegisterLibFunc(&initBallCamera, libc, "InitBallCamera") - purego.RegisterLibFunc(&ptzTo, libc, "PtzGotoPut") - purego.RegisterLibFunc(&ptzGet, libc, "PtzGet") - purego.RegisterLibFunc(&stopBus, libc, "StopBus") - purego.RegisterLibFunc(&startBus, libc, "StartBus") - - purego.RegisterLibFunc(&newHIKNvr, libc, "NewHIKNvr") - purego.RegisterLibFunc(&initNvr, libc, "InitNvr") - purego.RegisterLibFunc(&checkTimeRegionWithMonth, libc, "CheckTimeRegionWithMonth") - purego.RegisterLibFunc(&checkTimeRegionWithDay, libc, "CheckTimeRegionWithDay") - purego.RegisterLibFunc(&nvrUTCDiff, libc, "NvrUTCDiff") - -} - -func getSystemLibrary() string { - switch runtime.GOOS { - case "linux": - if runtime.GOARCH == "amd64" || runtime.GOARCH == "386" { - return "libHikNetSDKPkg_linux_amd64.so" - } else { - return "libHikNetSDKPkg_linux_arm64.so" - } - case "windows": - return "HikNetSDKPkg_win_amd64.dll" - default: - panic(fmt.Errorf("GOOS=%s is not supported", runtime.GOOS)) - } -} diff --git a/Type.go b/Type.go deleted file mode 100644 index 3d3847a..0000000 --- a/Type.go +++ /dev/null @@ -1,72 +0,0 @@ -package HikNetSDK - -import "encoding/json" - -type HikCfg struct { - Nvr map[string]Nvr `json:"Nvr"` - BallCamera map[string]BallCamera `json:"BallCamera"` -} - -type Nvr struct { - Name string `json:"Name"` - Ip string `json:"Ip"` - Port string `json:"Port"` - User string `json:"User"` - Password string `json:"Password"` - Channel int `json:"Channel"` -} - -type BallCamera struct { - Type string `json:"Type"` - Name string `json:"Name"` - Ip string `json:"Ip"` - Port string `json:"Port"` - User string `json:"User"` - Password string `json:"Password"` - RtspUrl string `json:"RtspUrl"` - Matrix Matrix `json:"Matrix"` - Channel int `json:"Channel"` -} - -type Matrix struct { - PStart float64 `json:"P_Start"` - PMax float64 `json:"P_Max"` - PPositiveDirection string `json:"p_Positive_Direction"` - TStart float64 `json:"T_Start"` - TMax float64 `json:"T_Max"` - TPositiveDirection string `json:"T_Positive_Direction"` - Matrix []float64 `json:"Matrix"` - InvMatrix []float64 `json:"InvMatrix"` - PointSet map[string]PointPair `json:"PointSet"` -} - -type PointPair struct { - X float64 `json:"X"` - Y float64 `json:"Y"` - P float64 `json:"P"` - T float64 `json:"T"` -} - - -type PTZ struct { - P float32 `json:"P"` - T float32 `json:"T"` - Z float32 `json:"Z"` -} - -type MoveCfg struct { - Speed int `json:"Speed"` - Direction int `json:"Direction"` -} -type Point struct { - X float64 `json:"X"` - Y float64 `json:"Y"` -} - -func (h *HikCfg) Json() []byte { - marshal, err := json.Marshal(h) - if err != nil { - return nil - } - return marshal -} diff --git a/go.mod b/go.mod deleted file mode 100644 index 74d8501..0000000 --- a/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module gitea.com/kunmeng/HikNetSDKPkg - -go 1.23.1 - -require github.com/ebitengine/purego v0.8.0 diff --git a/go.sum b/go.sum deleted file mode 100644 index 263a2f5..0000000 --- a/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/ebitengine/purego v0.8.0 h1:JbqvnEzRvPpxhCJzJJ2y0RbiZ8nyjccVUrSM3q+GvvE= -github.com/ebitengine/purego v0.8.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= diff --git a/openLibary_unix.go b/openLibary_unix.go deleted file mode 100644 index 22bb7ad..0000000 --- a/openLibary_unix.go +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// SPDX-FileCopyrightText: 2023 The Ebitengine Authors - -//go:build darwin || freebsd || linux - -package HikNetSDK - -import "github.com/ebitengine/purego" - -func openLibrary(name string) (uintptr, error) { - return purego.Dlopen(name, purego.RTLD_NOW|purego.RTLD_GLOBAL) -} diff --git a/openLibrary_windows.go b/openLibrary_windows.go deleted file mode 100644 index 00d7b33..0000000 --- a/openLibrary_windows.go +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// SPDX-FileCopyrightText: 2023 The Ebitengine Authors - -package HikNetSDK - -import "syscall" - -func openLibrary(name string) (uintptr, error) { - // Use [syscall.LoadLibrary] here to avoid external dependencies (#270). - // For actual use cases, [golang.org/x/sys/windows.NewLazySystemDLL] is recommended. - handle, err := syscall.LoadLibrary(name) - return uintptr(handle), err -} diff --git a/src/HIKBallCamera.cpp b/src/HIKBallCamera.cpp index db35f15..f58acc6 100644 --- a/src/HIKBallCamera.cpp +++ b/src/HIKBallCamera.cpp @@ -1,4 +1,7 @@ #include "HIKBallCamera.h" + +#include + #include "FormatTrans.h" #include #include