1 Commits

Author SHA1 Message Date
kunmeng
d563b72610 移除Golang的内容 2025-01-08 09:40:54 +08:00
10 changed files with 4 additions and 428 deletions

1
.gitignore vendored
View File

@@ -3,6 +3,7 @@
/.fleet
/cmake-build-debug-visual-studio
/cmake-build-release-visual-studio
/cmake-build-debug
*.lib
*.dll
*.so

View File

@@ -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
}
}
}

103
HikNvr.go
View File

@@ -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
}

View File

@@ -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))
}
}

72
Type.go
View File

@@ -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
}

5
go.mod
View File

@@ -1,5 +0,0 @@
module gitea.com/kunmeng/HikNetSDKPkg
go 1.23.1
require github.com/ebitengine/purego v0.8.0

2
go.sum
View File

@@ -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=

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -1,4 +1,7 @@
#include "HIKBallCamera.h"
#include <cstring>
#include "FormatTrans.h"
#include <vector>
#include <sstream>