-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcamera.go
130 lines (110 loc) · 3.36 KB
/
camera.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package gopylon
/*
#include "camera.h"
*/
import "C"
import (
"fmt"
)
type Camera struct {
index int
HDev C.PYLON_DEVICE_HANDLE
ModelName string
FullName string
FriendlyName string
VendorName string
SerialNumber string
DeviceClass string
DeviceVersion string
UserDefinedName string
}
// 把DeviceInfoList_t 转成自定义的类型
func (camera *Camera) FetchCamera() error {
res := C.BindCamera(C.CString(camera.SerialNumber), &(camera.HDev))
if C.GENAPI_E_OK == res {
// camera.GetDeviceInfo()
return nil
}
return fmt.Errorf("bind camera error, serial no: %s, reslt code is %d", camera.SerialNumber, int(res))
}
func (camera *Camera) GetDeviceInfo() {
// var deviceInfo C.CDeviceInfo
//获取deviceInfo
var info C.PylonDeviceInfo_t
res := C.CPylonGetDeviceInfo(C.ulong(camera.index), &info)
if C.GENAPI_E_OK == res {
//解deviceinfo
// fmt.Printf("%s \n", info.SerialNumber)
camera.SerialNumber = C.GoString(&info.SerialNumber[0])
camera.ModelName = C.GoString(&info.ModelName[0])
camera.FullName = C.GoString(&info.FullName[0])
camera.FriendlyName = C.GoString(&info.FriendlyName[0])
camera.VendorName = C.GoString(&info.VendorName[0])
camera.DeviceClass = C.GoString(&info.DeviceClass[0])
camera.DeviceVersion = C.GoString(&info.DeviceVersion[0])
camera.UserDefinedName = C.GoString(&info.UserDefinedName[0])
}
fmt.Printf("%v \n", res)
}
func (camera Camera) Open() error {
if isOpen := camera.IsOpen(); isOpen {
camera.Close()
}
res := C.CPylonDeviceOpen(camera.HDev, C.PYLONC_ACCESS_MODE_CONTROL|C.PYLONC_ACCESS_MODE_STREAM)
if C.GENAPI_E_OK != res {
return fmt.Errorf("DeviceOpen failed: %d", res)
}
return nil
}
func (camera Camera) IsOpen() bool {
var isOpen C._Bool
res := C.CPylonDeviceIsOpen(camera.HDev, &isOpen)
if C.GENAPI_E_OK != res {
return false
}
return bool(isOpen)
}
func (camera Camera) StopAndClean() {
camera.Close()
camera.Destroy()
}
func (camera Camera) Close() {
C.CPylonDeviceClose(camera.HDev)
}
func (camera Camera) PylonDeviceFeatureIsReadable(prop string) {
C.CPylonDeviceFeatureIsReadable(camera.HDev, C.CString(prop))
}
func (camera Camera) PylonDeviceGetNumStreamGrabberChannels() (int, error) {
var numChannels C.size_t
res := C.PylonDeviceGetNumStreamGrabberChannels(camera.HDev, &numChannels)
if C.GENAPI_E_OK != res {
return -1, fmt.Errorf("PylonDeviceGetNumStreamGrabberChannels failed: %d", res)
}
return int(numChannels), nil
}
func (camera Camera) Destroy() {
C.CPylonDestroyDevice(camera.HDev)
}
func (camera Camera) PylonDeviceGetStreamGrabber(index int, ghandle *C.PYLON_STREAMGRABBER_HANDLE) error {
res := C.CPylonDeviceGetStreamGrabber(camera.HDev, C.size_t(index), ghandle)
if C.GENAPI_E_OK != res {
return fmt.Errorf("PylonDeviceGetStreamGrabber failed: %d", res)
}
return nil
}
func (camera Camera) GetIntegerFeatureInt32(name string, retValue *int32) error {
var value C.int
res := C.CPylonDeviceGetIntegerFeatureInt32(camera.HDev, C.CString(name), &value)
if C.GENAPI_E_OK != res {
return fmt.Errorf("PylonDeviceGetIntegerFeatureInt32 failed: %d", res)
}
*retValue = (int32(value))
return nil
}
func (camera Camera) ExecuteCommandFeature(cmd string) error {
res := C.CPylonDeviceExecuteCommandFeature(camera.HDev, C.CString(cmd))
if C.GENAPI_E_OK != res {
return fmt.Errorf("CPylonDeviceExecuteCommandFeature failed: %d", res)
}
return nil
}