-
Notifications
You must be signed in to change notification settings - Fork 1
/
qhyccdstruct.h
290 lines (243 loc) · 7.74 KB
/
qhyccdstruct.h
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
287
288
289
290
#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
/**
* @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
{
CONTROL_BRIGHTNESS = 0, //!< image brightness
CONTROL_CONTRAST, //!< image contrast
CONTROL_WBR, //!< red of white balance
CONTROL_WBB, //!< blue of white balance
CONTROL_WBG, //!< the green of white balance
CONTROL_GAMMA, //!< screen gamma
CONTROL_GAIN, //!< camera gain
CONTROL_OFFSET, //!< camera offset
CONTROL_EXPOSURE, //!< expose time (us)
CONTROL_SPEED, //!< transfer speed
CONTROL_TRANSFERBIT, //!< image depth bits
CONTROL_CHANNELS, //!< image channels
CONTROL_USBTRAFFIC, //!< hblank
CONTROL_ROWNOISERE, //!< row denoise
CONTROL_CURTEMP, //!< current cmos or ccd temprature
CONTROL_CURPWM, //!< current cool pwm
CONTROL_MANULPWM, //!< set the cool pwm
CONTROL_CFWPORT, //!< control camera color filter wheel port
CONTROL_COOLER, //!< check if camera has cooler
CONTROL_ST4PORT, //!< check if camera has st4port
CAM_COLOR,
CAM_BIN1X1MODE, //!< check if camera has bin1x1 mode
CAM_BIN2X2MODE, //!< check if camera has bin2x2 mode
CAM_BIN3X3MODE, //!< check if camera has bin3x3 mode
CAM_BIN4X4MODE, //!< check if camera has bin4x4 mode
CAM_MECHANICALSHUTTER, //!< mechanical shutter
CAM_TRIGER_INTERFACE, //!< triger
CAM_TECOVERPROTECT_INTERFACE, //!< tec overprotect
CAM_SINGNALCLAMP_INTERFACE, //!< singnal clamp
CAM_FINETONE_INTERFACE, //!< fine tone
CAM_SHUTTERMOTORHEATING_INTERFACE, //!< shutter motor heating
CAM_CALIBRATEFPN_INTERFACE, //!< calibrated frame
CAM_CHIPTEMPERATURESENSOR_INTERFACE, //!< chip temperaure sensor
CAM_USBREADOUTSLOWEST_INTERFACE, //!< usb readout slowest
CAM_8BITS, //!< 8bit depth
CAM_16BITS, //!< 16bit depth
CAM_GPS, //!< check if camera has gps
CAM_IGNOREOVERSCAN_INTERFACE, //!< ignore overscan area
QHYCCD_3A_AUTOBALANCE,
QHYCCD_3A_AUTOEXPOSURE,
QHYCCD_3A_AUTOFOCUS,
CONTROL_AMPV, //!< ccd or cmos ampv
CONTROL_VCAM, //!< Virtual Camera on off
CAM_VIEW_MODE,
CONTROL_CFWSLOTSNUM, //!< check CFW slots number
IS_EXPOSING_DONE,
ScreenStretchB,
ScreenStretchW,
CONTROL_DDR,
CAM_LIGHT_PERFORMANCE_MODE,
CAM_QHY5II_GUIDE_MODE,
DDR_BUFFER_CAPACITY,
DDR_BUFFER_READ_THRESHOLD,
DefaultGain,
DefaultOffset,
OutputDataActualBits,
OutputDataAlignment,
CAM_SINGLEFRAMEMODE,
CAM_LIVEVIDEOMODE,
CAM_IS_COLOR,
hasHardwareFrameCounter,
CONTROL_MAX_ID,
CAM_HUMIDITY //!<check if camera has humidity sensor 20191021 LYL Unified humidity function
};
/**
* 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 _QHYCamReadModeInfo
{
const char *name;
const char *RMName[MAX_READMODE_NUMBER];
int32_t number;
}
QHYCamReadModeInfo;
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