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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
#include "config.h"
#ifndef __QHYCCDSTRUCTDEF_H__
#define __QHYCCDSTRUCTDEF_H__
#if defined (_WIN32)
#ifndef EXPORTFUNC
#define EXPORTFUNC extern "C" __declspec(dllexport)
#endif
#ifndef STDCALL
#define STDCALL __stdcall
#endif
#ifndef EXPORTC
#define EXPORTC extern "C"
#endif
#else
#define EXPORTFUNC extern "C"
#define STDCALL
#define EXPORTC extern "C"
#endif
#include "stdint.h"
#if defined (_WIN32)
#ifdef _M_IX86
typedef uint32_t QHYDWORD;
#else
typedef uint64_t QHYDWORD;
#endif
#else
#ifdef __i386__
typedef uint32_t QHYDWORD;
#else
typedef uint64_t QHYDWORD;
#endif
#endif
/**
* usb vendor request command
*/
#define QHYCCD_REQUEST_READ 0xC0
/**
* usb vendor request command
*/
#define QHYCCD_REQUEST_WRITE 0x40
#define MACHANICALSHUTTER_OPEN 0
#define MACHANICALSHUTTER_CLOSE 1
#define MACHANICALSHUTTER_FREE 2
#define MAX_READMODE_NUMBER 8
#define MAX_READMODE_CAMARA_NUMBER 8
/**
* @brief CCDREG struct define
*
* List the ccd registers param
*/
typedef struct ccdreg
{
uint8_t Gain; //!< ccd gain
uint8_t Offset; //!< ccd offset
uint32_t Exptime; //!< expose time
uint8_t HBIN; //!< width bin
uint8_t VBIN; //!< height bin
uint16_t LineSize; //!< almost match image width
uint16_t VerticalSize; //!< almost match image height
uint16_t SKIP_TOP; //!< Reserved
uint16_t SKIP_BOTTOM; //!< Reserved
uint16_t LiveVideo_BeginLine;//!< Reserved
uint16_t AnitInterlace; //!< Reserved
uint8_t MultiFieldBIN; //!< Reserved
uint8_t AMPVOLTAGE; //!< Reserved
uint8_t DownloadSpeed; //!< transfer speed
uint8_t TgateMode; //!< Reserved
uint8_t ShortExposure; //!< Reserved
uint8_t VSUB; //!< Reserved
uint8_t CLAMP; //!< Reserved
uint8_t TransferBIT; //!< Reserved
uint8_t TopSkipNull; //!< Reserved
uint16_t TopSkipPix; //!< Reserved
uint8_t MechanicalShutterMode;//!< Reserved
uint8_t DownloadCloseTEC; //!< Reserved
uint8_t SDRAM_MAXSIZE; //!< Reserved
uint16_t ClockADJ; //!< Reserved
uint8_t Trig; //!< Reserved
uint8_t MotorHeating; //!< Reserved
uint8_t WindowHeater; //!< Reserved
uint8_t ADCSEL; //!< Reserved
}
CCDREG;
struct BIOREG
{
uint16_t LineSize;
uint16_t PatchNumber;
uint8_t AMPVOLTAGE;
uint8_t ShortExposure;
uint8_t SDRAM_MAXSIZE;
uint8_t DownloadSpeed;
uint8_t TransferBIT;
uint8_t BIOCCD_Mode;
uint8_t BIOCCD_Video;
uint8_t SDRAM_Bypass;
};
#if 0
//lowlevelstatus is used for QHYCCD LowLevelProtocol to readout the camera status from 0XD2 command.
//see QHYCCD Low Level Protocol White Paper.
typedef struct lowlevelstatus
{
uint8_t speed; //!< ccd gain
uint32_t restExpTime; //!< ccd offset
uint32_t ExpTime; //!< expose time
uint8_t FwVersionYear; //!< width bin
uint8_t FwVersionMonth; //!< height bin
uint8_t FwVersionDay; //!< almost match image width
uint8_t TempType; //!< almost match image height
uint16_t CurrentTempADU; //!< Reserved
uint16_t TargetTempADU; //!< Reserved
uint8_t CurrentPWM;//!< Reserved
uint8_t TempControlMode; //!< Reserved
uint32_t DataInDDR; //!< Reserved
double CurrentTempC; //!< Reserved
double TargetTempC; //!< transfer speed
uint16_t ImageX; //!< Reserved
uint16_t ImageY; //!< Reserved
uint8_t ImageBitDepth; //!< Reserved
uint8_t USBSpeed; //!< Reserved
uint8_t cfwbuffer[8]; //!< Reserved
uint8_t cameraSubModel; //!< Reserved
uint8_t cameraColorType; //!< Reserved
uint8_t cameraSeriesNumber[16];//!< Reserved
}
LowLevelStatus;
#endif
/**
* @brief CONTROL_ID enum define
*
* List of the function could be control
*/
enum CONTROL_ID
{
/*0*/ CONTROL_BRIGHTNESS = 0, //!< image brightness
/*1*/ CONTROL_CONTRAST, //!< image contrast
/*2*/ CONTROL_WBR, //!< red of white balance
/*3*/ CONTROL_WBB, //!< blue of white balance
/*4*/ CONTROL_WBG, //!< the green of white balance
/*5*/ CONTROL_GAMMA, //!< screen gamma
/*6*/ CONTROL_GAIN, //!< camera gain
/*7*/ CONTROL_OFFSET, //!< camera offset
/*8*/ CONTROL_EXPOSURE, //!< expose time (us)
/*9*/ CONTROL_SPEED, //!< transfer speed
/*10*/ CONTROL_TRANSFERBIT, //!< image depth bits
/*11*/ CONTROL_CHANNELS, //!< image channels
/*12*/ CONTROL_USBTRAFFIC, //!< hblank
/*13*/ CONTROL_ROWNOISERE, //!< row denoise
/*14*/ CONTROL_CURTEMP, //!< current cmos or ccd temprature
/*15*/ CONTROL_CURPWM, //!< current cool pwm
/*16*/ CONTROL_MANULPWM, //!< set the cool pwm
/*17*/ CONTROL_CFWPORT, //!< control camera color filter wheel port
/*18*/ CONTROL_COOLER, //!< check if camera has cooler
/*19*/ CONTROL_ST4PORT, //!< check if camera has st4port
/*20*/ CAM_COLOR,
/*21*/ CAM_BIN1X1MODE, //!< check if camera has bin1x1 mode
/*22*/ CAM_BIN2X2MODE, //!< check if camera has bin2x2 mode
/*23*/ CAM_BIN3X3MODE, //!< check if camera has bin3x3 mode
/*24*/ CAM_BIN4X4MODE, //!< check if camera has bin4x4 mode
/*25*/ CAM_MECHANICALSHUTTER, //!< mechanical shutter
/*26*/ CAM_TRIGER_INTERFACE, //!< triger
/*27*/ CAM_TECOVERPROTECT_INTERFACE, //!< tec overprotect
/*28*/ CAM_SINGNALCLAMP_INTERFACE, //!< singnal clamp
/*29*/ CAM_FINETONE_INTERFACE, //!< fine tone
/*30*/ CAM_SHUTTERMOTORHEATING_INTERFACE, //!< shutter motor heating
/*31*/ CAM_CALIBRATEFPN_INTERFACE, //!< calibrated frame
/*32*/ CAM_CHIPTEMPERATURESENSOR_INTERFACE, //!< chip temperaure sensor
/*33*/ CAM_USBREADOUTSLOWEST_INTERFACE, //!< usb readout slowest
/*34*/ CAM_8BITS, //!< 8bit depth
/*35*/ CAM_16BITS, //!< 16bit depth
/*36*/ CAM_GPS, //!< check if camera has gps
/*37*/ CAM_IGNOREOVERSCAN_INTERFACE, //!< ignore overscan area
/*38*/ QHYCCD_3A_AUTOBALANCE,
/*39*/ QHYCCD_3A_AUTOEXPOSURE,
/*40*/ QHYCCD_3A_AUTOFOCUS,
/*41*/ CONTROL_AMPV, //!< ccd or cmos ampv
/*42*/ CONTROL_VCAM, //!< Virtual Camera on off
/*43*/ CAM_VIEW_MODE,
/*44*/ CONTROL_CFWSLOTSNUM, //!< check CFW slots number
/*45*/ IS_EXPOSING_DONE,
/*46*/ ScreenStretchB,
/*47*/ ScreenStretchW,
/*48*/ CONTROL_DDR,
/*49*/ CAM_LIGHT_PERFORMANCE_MODE,
/*50*/ CAM_QHY5II_GUIDE_MODE,
/*51*/ DDR_BUFFER_CAPACITY,
/*52*/ DDR_BUFFER_READ_THRESHOLD,
/*53*/ DefaultGain,
/*54*/ DefaultOffset,
/*55*/ OutputDataActualBits,
/*56*/ OutputDataAlignment,
/*57*/ CAM_SINGLEFRAMEMODE,
/*58*/ CAM_LIVEVIDEOMODE,
/*59*/ CAM_IS_COLOR,
/*60*/ hasHardwareFrameCounter,
/*61*/ CONTROL_MAX_ID,
/*62*/ CAM_HUMIDITY, //!<check if camera has humidity sensor 20191021 LYL Unified humidity function
/*63*/ CAM_PRESSURE //check if camera has pressure sensor
};
/**
* debayer mode for mono to color */
enum BAYER_ID
{
BAYER_GB = 1,
BAYER_GR,
BAYER_BG,
BAYER_RG
};
enum CodecID
{
NONE_CODEC,
H261_CODEC
};
typedef struct _QHYCamMinMaxStepValue
{
const char *name;
double min;
double max;
double step;
}
QHYCamMinMaxStepValue;
typedef struct _QHYGetImageParam
{
void *handle;
uint8_t *imgdata;
uint32_t w;
uint32_t h;
uint32_t bpp;
uint32_t channels;
bool HaveImgData;
}
QHYGetImageParam;
#if CALLBACK_MODE_SUPPORT
typedef QHYDWORD (*QHYCCDProcCallBack) (void *handle,
QHYDWORD message,
QHYDWORD wParam,
QHYDWORD lParam);
#endif
#endif
|