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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
use std::os;
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum QHYResult {
QHYCCD_SUCCESS = 0,
QHYCCD_READ_DIRECTLY = 0x2001,
QHYCCD_DELAY_200MS = 0x2000,
QHYCCD_ERROR = 0xffffffff
}
impl From<u32> for QHYResult {
fn from(u: u32) -> QHYResult {
match u {
0 => QHYResult::QHYCCD_SUCCESS,
0x2001 => QHYResult::QHYCCD_READ_DIRECTLY,
0x2000 => QHYResult::QHYCCD_DELAY_200MS,
0xffffffff => QHYResult::QHYCCD_ERROR,
_ => {
panic!("Unexpected result code from qhy sdk: {:08x}", u);
}
}
}
}
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum Control {
Brightness = 0, // !< image brightness
Contrast = 1, //1 image contrast
CONTROL_WBR = 2, //2 red of white balance
CONTROL_WBB = 3, //3 blue of white balance
CONTROL_WBG = 4, //4 the green of white balance
Gamma = 5, //5 screen gamma
Gain = 6, //6 camera gain
Offset = 7, //7 camera offset
Exposure = 8, //8 expose time (us)
Speed = 9, //9 transfer speed
TransferBit = 10, //10 image depth bits
Channels = 11, //11 image channels
USBTraffic = 12, //12 hblank
RowNoiseRe = 13, //13 row denoise
CurTemp = 14, //14 current cmos or ccd temprature
CurPWM = 15, //15 current cool pwm
ManulPwm = 16, //16 set the cool pwm
CFWPort = 17, //17 control camera color filter wheel port
Cooler = 18, //18 check if camera has cooler
St4port = 19, //19 check if camera has st4port
Color = 20, //20
Bin1x1Mode = 21, //21 check if camera has bin1x1 mode
Bin2x2Mode = 22, //22 check if camera has bin2x2 mode
Bin3x3Mode = 23, //23 check if camera has bin3x3 mode
Bin4x4Mode = 24, //24 check if camera has bin4x4 mode
CAM_MECHANICALSHUTTER = 25, //25 mechanical shutter
CAM_TRIGER_INTERFACE = 26, //26 triger
CAM_TECOVERPROTECT_INTERFACE = 27, //27 tec overprotect
CAM_SINGNALCLAMP_INTERFACE = 28, //28 singnal clamp
CAM_FINETONE_INTERFACE = 29, //29 fine tone
CAM_SHUTTERMOTORHEATING_INTERFACE = 30, //30 shutter motor heating
CAM_CALIBRATEFPN_INTERFACE = 31, //31 calibrated frame
CAM_CHIPTEMPERATURESENSOR_INTERFACE = 32, //32 chip temperaure sensor
CAM_USBREADOUTSLOWEST_INTERFACE = 33, //33 usb readout slowest
CAM_8BITS = 34, //34 8bit depth
CAM_16BITS = 35, //35 16bit depth
CAM_GPS = 36, //36 check if camera has gps
CAM_IGNOREOVERSCAN_INTERFACE = 37, //37 ignore overscan area
QHYCCD_3A_AUTOBALANCE = 38, //38
QHYCCD_3A_AUTOEXPOSURE = 39, //39
QHYCCD_3A_AUTOFOCUS = 40, //40
CONTROL_AMPV = 41, //41 ccd or cmos ampv
CONTROL_VCAM = 42, //42 Virtual Camera on off
CAM_VIEW_MODE = 43, //43
CONTROL_CFWSLOTSNUM = 44, //44 check CFW slots number
IS_EXPOSING_DONE = 45, //45
ScreenStretchB = 46, //46
ScreenStretchW = 47, //47
CONTROL_DDR = 48, //47
CAM_LIGHT_PERFORMANCE_MODE = 49, //49
CAM_QHY5II_GUIDE_MODE = 50, //50
DDR_BUFFER_CAPACITY = 51, //51
DDR_BUFFER_READ_THRESHOLD = 52, //52
DefaultOffset = 53, //53
OutputDataActualBits = 54, //54
OutputDataAlignment = 55 //55
}
impl Control {
pub fn requires_reset(&self) -> bool {
match self {
Control::Brightness
| Control::Contrast
| Control::CONTROL_WBR
| Control::CONTROL_WBB
| Control::CONTROL_WBG
| Control::Gamma
| Control::Gain
| Control::Offset
| Control::Exposure
| Control::Speed
| Control::TransferBit
| Control::Channels
| Control::Bin1x1Mode
| Control::Bin2x2Mode
| Control::Bin3x3Mode
| Control::Bin4x4Mode
| Control::USBTraffic => {
true
}
| Control::CurTemp
| Control::CurPWM
| Control::ManulPwm
| Control::CFWPort
| Control::Cooler
| Control::St4port
| Control::Color
| Control::CAM_MECHANICALSHUTTER
| Control::CAM_TRIGER_INTERFACE
| Control::CAM_TECOVERPROTECT_INTERFACE
| Control::CAM_SINGNALCLAMP_INTERFACE
| Control::CAM_FINETONE_INTERFACE
| Control::CAM_SHUTTERMOTORHEATING_INTERFACE
| Control::CAM_CALIBRATEFPN_INTERFACE
| Control::CAM_CHIPTEMPERATURESENSOR_INTERFACE
| Control::CAM_USBREADOUTSLOWEST_INTERFACE
| Control::CAM_8BITS
| Control::CAM_16BITS
| Control::CAM_GPS
| Control::CAM_IGNOREOVERSCAN_INTERFACE
| Control::QHYCCD_3A_AUTOBALANCE
| Control::QHYCCD_3A_AUTOEXPOSURE
| Control::QHYCCD_3A_AUTOFOCUS
| Control::CONTROL_AMPV
| Control::CONTROL_VCAM
| Control::CAM_VIEW_MODE
| Control::CONTROL_CFWSLOTSNUM
| Control::IS_EXPOSING_DONE
| Control::ScreenStretchB
| Control::ScreenStretchW
| Control::CONTROL_DDR
| Control::CAM_LIGHT_PERFORMANCE_MODE
| Control::CAM_QHY5II_GUIDE_MODE
| Control::DDR_BUFFER_CAPACITY
| Control::DDR_BUFFER_READ_THRESHOLD
| Control::DefaultOffset
| Control::OutputDataActualBits
| Control::OutputDataAlignment => {
false
}
_ => { false }
}
}
}
#[repr(u32)]
#[derive(Copy, Clone, Debug)]
pub enum Bayer
{
GB = 1,
GR = 2,
BG = 3,
RG = 4
}
extern "C" {
pub fn ScanQHYCCD() -> os::raw::c_int;
pub fn InitQHYCCDResource() -> os::raw::c_int;
pub fn GetQHYCCDId(id: os::raw::c_int, id: *mut os::raw::c_char) -> os::raw::c_int;
pub fn GetQHYCCDModel(id: *mut os::raw::c_char, model: *mut os::raw::c_char) -> os::raw::c_int;
pub fn OpenQHYCCD(id: *mut os::raw::c_char) -> *mut os::raw::c_void;
pub fn SetQHYCCDStreamMode(handle: *mut os::raw::c_void, mode: os::raw::c_char) -> os::raw::c_int;
pub fn SetQHYCCDResolution(handle: *mut os::raw::c_void, x: os::raw::c_uint, y: os::raw::c_uint, xsize: os::raw::c_uint, ysize: os::raw::c_uint) -> os::raw::c_int;
pub fn InitQHYCCD(id: *mut os::raw::c_void) -> os::raw::c_int;
pub fn IsQHYCCDControlAvailable(handle: *mut os::raw::c_void, control: os::raw::c_int) -> os::raw::c_int;
pub fn SetQHYCCDParam(handle: *mut os::raw::c_void, control: os::raw::c_int, value: os::raw::c_double) -> os::raw::c_int;
pub fn GetQHYCCDParamMinMaxStep(handle: *mut os::raw::c_void, control: os::raw::c_int, min: *mut os::raw::c_double, max: *mut os::raw::c_double, step: *mut os::raw::c_double) -> os::raw::c_int;
pub fn GetQHYCCDParam(handle: *mut os::raw::c_void, control: os::raw::c_int) -> os::raw::c_double;
pub fn GetQHYCCDEffectiveArea(handle: *mut os::raw::c_void, startx: *mut os::raw::c_int, starty: *mut os::raw::c_int, sizex: *mut os::raw::c_int, sizey: *mut os::raw::c_int) -> os::raw::c_int;
pub fn GetQHYCCDOverScanArea(handle: *mut os::raw::c_void, startx: *mut os::raw::c_int, starty: *mut os::raw::c_int, sizex: *mut os::raw::c_int, sizey: *mut os::raw::c_int) -> os::raw::c_int;
pub fn GetQHYCCDChipInfo(
handle: *mut os::raw::c_void,
chipw: *mut os::raw::c_double, chiph: *mut os::raw::c_double,
imagew: *mut os::raw::c_int, imageh: *mut os::raw::c_int,
pixelw: *mut os::raw::c_double, pixelh: *mut os::raw::c_double,
bpp: *mut os::raw::c_int) -> os::raw::c_int;
pub fn CancelQHYCCDExposingAndReadout(handle: *mut os::raw::c_void) -> os::raw::c_int;
pub fn ControlQHYCCDTemp(handle: *mut os::raw::c_void, target: os::raw::c_double) -> os::raw::c_int;
pub fn SetQHYCCDLogLevel(log_level: os::raw::c_char);
pub fn SetQHYCCDDebayerOnOff(handle: *mut os::raw::c_void, onoff: os::raw::c_int) -> os::raw::c_int;
pub fn SetQHYCCDBinMode(handle: *mut os::raw::c_void, wbin: os::raw::c_int, hbin: os::raw::c_int) -> os::raw::c_int;
pub fn SetQHYCCDBitsMode(handle: *mut os::raw::c_void, bits: os::raw::c_int) -> os::raw::c_int;
pub fn ExpQHYCCDSingleFrame(handle: *mut os::raw::c_void) -> os::raw::c_int;
pub fn BeginQHYCCDLive(handle: *mut os::raw::c_void) -> os::raw::c_int;
pub fn StopQHYCCDLive(handle: *mut os::raw::c_void) -> os::raw::c_int;
pub fn GetQHYCCDExposureRemaining(handle: *mut os::raw::c_void) -> os::raw::c_uint;
pub fn GetQHYCCDMemLength(handle: *mut os::raw::c_void) -> os::raw::c_int;
pub fn GetQHYCCDSingleFrame(handle: *mut os::raw::c_void, w: *mut os::raw::c_int, h: *mut os::raw::c_int, bpp: *mut os::raw::c_int, channels: *mut os::raw::c_int, data: *mut os::raw::c_uchar) -> os::raw::c_int;
pub fn GetQHYCCDLiveFrame(handle: *mut os::raw::c_void, w: *mut os::raw::c_int, h: *mut os::raw::c_int, bpp: *mut os::raw::c_int, channels: *mut os::raw::c_int, data: *mut os::raw::c_uchar) -> os::raw::c_int;
pub fn CloseQHYCCD(handle: *mut os::raw::c_void) -> os::raw::c_int;
pub fn ReleaseQHYCCDResource() -> os::raw::c_int;
}
|