summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2019-03-14 15:52:30 -0700
committeriximeow <me@iximeow.net>2019-03-14 15:52:30 -0700
commitfa1bb24f1f8aaf8e598a3bc53d90922e445fe59a (patch)
treec5f65b4cecd6376a3b99646679f9714d5f9213a2
parent051a2e73d031475e08e37953007fbb7869515fb6 (diff)
add qhy headers.........
-rw-r--r--include/qhy/Context.h57
-rw-r--r--include/qhy/CyAPI.h600
-rw-r--r--include/qhy/CyUSB30_def.h90
-rw-r--r--include/qhy/Io.h38
-rw-r--r--include/qhy/Pipeline.h3
-rw-r--r--include/qhy/QDef.h106
-rw-r--r--include/qhy/QGigE.h80
-rw-r--r--include/qhy/QUsb.h75
-rw-r--r--include/qhy/Stdafx.h6
-rw-r--r--include/qhy/UsbdStatus.h46
-rw-r--r--include/qhy/VersionNo.h26
-rw-r--r--include/qhy/chatty.h75
-rw-r--r--include/qhy/cjson.h156
-rw-r--r--include/qhy/cmosdll.h69
-rw-r--r--include/qhy/cyioctl.h213
-rw-r--r--include/qhy/d5100.h38
-rw-r--r--include/qhy/debugview.h3
-rw-r--r--include/qhy/dithercontrol.h42
-rw-r--r--include/qhy/download_fx2.h6
-rw-r--r--include/qhy/download_fx3.h6
-rw-r--r--include/qhy/i2c-dev.h341
-rw-r--r--include/qhy/i2c.h60
-rw-r--r--include/qhy/ic16803.h509
-rw-r--r--include/qhy/ic8300.h75
-rw-r--r--include/qhy/img0h.h284
-rw-r--r--include/qhy/img132e.h257
-rw-r--r--include/qhy/img2p.h335
-rw-r--r--include/qhy/log4z.h630
-rw-r--r--include/qhy/minicam5base.h137
-rw-r--r--include/qhy/minicam5f_m.h82
-rw-r--r--include/qhy/minicam5s_c.h91
-rw-r--r--include/qhy/minicam5s_m.h84
-rw-r--r--include/qhy/minicam6f.h65
-rw-r--r--include/qhy/plugins.h165
-rw-r--r--include/qhy/polemaster.h114
-rw-r--r--include/qhy/qhy08050g.h367
-rw-r--r--include/qhy/qhy10.h362
-rw-r--r--include/qhy/qhy11.h337
-rw-r--r--include/qhy/qhy12.h328
-rw-r--r--include/qhy/qhy128c.h37
-rw-r--r--include/qhy/qhy15.h333
-rw-r--r--include/qhy/qhy16.h335
-rw-r--r--include/qhy/qhy16000.h232
-rw-r--r--include/qhy/qhy160002ad.h266
-rw-r--r--include/qhy/qhy16000g.h292
-rw-r--r--include/qhy/qhy16200a.h83
-rw-r--r--include/qhy/qhy163c.h65
-rw-r--r--include/qhy/qhy163m.h64
-rw-r--r--include/qhy/qhy165c.h65
-rw-r--r--include/qhy/qhy16803a.h83
-rw-r--r--include/qhy/qhy168c.h58
-rw-r--r--include/qhy/qhy174c.h61
-rw-r--r--include/qhy/qhy174m.h60
-rw-r--r--include/qhy/qhy178c.h54
-rw-r--r--include/qhy/qhy178m.h54
-rw-r--r--include/qhy/qhy183.h73
-rw-r--r--include/qhy/qhy183c.h45
-rw-r--r--include/qhy/qhy21.h349
-rw-r--r--include/qhy/qhy22.h349
-rw-r--r--include/qhy/qhy224c.h65
-rw-r--r--include/qhy/qhy23.h371
-rw-r--r--include/qhy/qhy247c.h58
-rw-r--r--include/qhy/qhy27.h95
-rw-r--r--include/qhy/qhy28.h74
-rw-r--r--include/qhy/qhy29.h95
-rw-r--r--include/qhy/qhy290c.h54
-rw-r--r--include/qhy/qhy290m.h53
-rw-r--r--include/qhy/qhy2pro.h328
-rw-r--r--include/qhy/qhy367c.h65
-rw-r--r--include/qhy/qhy45gx.h311
-rw-r--r--include/qhy/qhy5.h229
-rw-r--r--include/qhy/qhy5hii.h177
-rw-r--r--include/qhy/qhy5ii.h169
-rw-r--r--include/qhy/qhy5iibase.h172
-rw-r--r--include/qhy/qhy5iii128base.h129
-rw-r--r--include/qhy/qhy5iii163base.h95
-rw-r--r--include/qhy/qhy5iii165base.h171
-rw-r--r--include/qhy/qhy5iii168base.h157
-rw-r--r--include/qhy/qhy5iii174base.h114
-rw-r--r--include/qhy/qhy5iii174c.h54
-rw-r--r--include/qhy/qhy5iii174m.h54
-rw-r--r--include/qhy/qhy5iii178base.h116
-rw-r--r--include/qhy/qhy5iii178c.h47
-rw-r--r--include/qhy/qhy5iii178coolbase.h73
-rw-r--r--include/qhy/qhy5iii178m.h47
-rw-r--r--include/qhy/qhy5iii183base.h99
-rw-r--r--include/qhy/qhy5iii185base.h124
-rw-r--r--include/qhy/qhy5iii185c.h65
-rw-r--r--include/qhy/qhy5iii224base.h126
-rw-r--r--include/qhy/qhy5iii224c.h66
-rw-r--r--include/qhy/qhy5iii224coolbase.h121
-rw-r--r--include/qhy/qhy5iii236c.h131
-rw-r--r--include/qhy/qhy5iii247base.h149
-rw-r--r--include/qhy/qhy5iii290base.h151
-rw-r--r--include/qhy/qhy5iii290c.h47
-rw-r--r--include/qhy/qhy5iii290coolbase.h110
-rw-r--r--include/qhy/qhy5iii290m.h48
-rw-r--r--include/qhy/qhy5iii367base.h189
-rw-r--r--include/qhy/qhy5iiibase.h116
-rw-r--r--include/qhy/qhy5iiicommon.h61
-rw-r--r--include/qhy/qhy5iiicoolbase.h57
-rw-r--r--include/qhy/qhy5iiiddrcoolbase.h51
-rw-r--r--include/qhy/qhy5iiig400m.h150
-rw-r--r--include/qhy/qhy5lii_c.h70
-rw-r--r--include/qhy/qhy5lii_lowlevel.h0
-rw-r--r--include/qhy/qhy5lii_m.h65
-rw-r--r--include/qhy/qhy5liibase.h210
-rw-r--r--include/qhy/qhy5pii_c.h191
-rw-r--r--include/qhy/qhy5pii_m.h172
-rw-r--r--include/qhy/qhy5rii_m.h182
-rw-r--r--include/qhy/qhy5tii_c.h191
-rw-r--r--include/qhy/qhy6.h298
-rw-r--r--include/qhy/qhy695a.h98
-rw-r--r--include/qhy/qhy7.h362
-rw-r--r--include/qhy/qhy8.h363
-rw-r--r--include/qhy/qhy814a.h74
-rw-r--r--include/qhy/qhy814g.h311
-rw-r--r--include/qhy/qhy8l.h326
-rw-r--r--include/qhy/qhy8pro.h363
-rw-r--r--include/qhy/qhy90a.h83
-rw-r--r--include/qhy/qhy9s.h344
-rw-r--r--include/qhy/qhy9t.h323
-rw-r--r--include/qhy/qhyabase.h427
-rw-r--r--include/qhy/qhybase.h1189
-rw-r--r--include/qhy/qhycam.h572
-rw-r--r--include/qhy/qhyccd.h139
-rw-r--r--include/qhy/qhyccd3a.h48
-rw-r--r--include/qhy/qhyccdcamdef.h528
-rw-r--r--include/qhy/qhyccderr.h169
-rw-r--r--include/qhy/qhyccdhex2cam.h292
-rw-r--r--include/qhy/qhyccdlog.h3713
-rw-r--r--include/qhy/qhyccdstruct.h222
-rw-r--r--include/qhy/qhydevice.h92
-rw-r--r--include/qhy/qhyicbase.h461
-rw-r--r--include/qhy/qwinusb.h18
-rw-r--r--include/qhy/solar1600.h348
-rw-r--r--include/qhy/solar800g.h403
-rw-r--r--include/qhy/ssd1306.h62
-rw-r--r--include/qhy/stdint.h527
-rw-r--r--include/qhy/titan034.h412
-rw-r--r--include/qhy/unlockimagequeue.h56
-rw-r--r--include/qhy/usb.h1083
-rw-r--r--include/qhy/usb100.h272
-rw-r--r--include/qhy/usb200.h111
-rw-r--r--include/qhy/virtualwdm.h52
-rw-r--r--include/qhy/vld.h346
-rw-r--r--include/qhy/vld_def.h47
-rw-r--r--include/qhy/winusb.h253
-rw-r--r--include/qhy/winusbio.h85
149 files changed, 30503 insertions, 0 deletions
diff --git a/include/qhy/Context.h b/include/qhy/Context.h
new file mode 100644
index 0000000..ab2c490
--- /dev/null
+++ b/include/qhy/Context.h
@@ -0,0 +1,57 @@
+#pragma once
+
+#define QCAM_RAWDATACACHESIZE (75000000)
+#define QCAM_FRAMECACHESIZE 1
+#define QCAM_MAXCORECOUNT 16
+
+class Mutex
+{
+private:
+ CRITICAL_SECTION cs;
+
+public:
+ Mutex()
+ {
+ ::InitializeCriticalSection(&this->cs);
+ }
+
+ ~Mutex()
+ {
+ ::DeleteCriticalSection(&this->cs);
+ }
+
+ void Lock()
+ {
+ ::EnterCriticalSection(&this->cs);
+ }
+
+ void Unlock()
+ {
+ ::LeaveCriticalSection(&this->cs);
+ }
+};
+
+class CamContext
+{
+public:
+ unsigned char ioType;
+ HANDLE hCam;
+ int camType;
+ int resX, resY;
+ int frameLen;
+ unsigned char depth;
+
+ BOOL live;
+ unsigned char *rawDataCache;
+ HANDLE hIoThread;
+ BOOL raw;
+
+ CamContext()
+ {
+ this->hCam = INVALID_HANDLE_VALUE;
+ }
+
+};
+
+void InitContext(int framesize,CCyUSBDevice* pDev);
+CamContext* GetContext(HANDLE hCam);
diff --git a/include/qhy/CyAPI.h b/include/qhy/CyAPI.h
new file mode 100644
index 0000000..2ec4f77
--- /dev/null
+++ b/include/qhy/CyAPI.h
@@ -0,0 +1,600 @@
+/*
+ ## Cypress CyAPI C++ library header file (CyAPI.h)
+ ## =======================================================
+ ##
+ ## Copyright Cypress Semiconductor Corporation, 2009-2012,
+ ## All Rights Reserved
+ ## UNPUBLISHED, LICENSED SOFTWARE.
+ ##
+ ## CONFIDENTIAL AND PROPRIETARY INFORMATION
+ ## WHICH IS THE PROPERTY OF CYPRESS.
+ ##
+ ## Use of this file is governed
+ ## by the license agreement included in the file
+ ##
+ ## <install>/license/license.rtf
+ ##
+ ## where <install> is the Cypress software
+ ## install root directory path.
+ ##
+ ## =======================================================
+*/
+
+#ifndef CyUSBH
+#define CyUSBH
+
+#include "cyusb30_def.h"
+
+/* Data straucture for the Vendor request and data */
+typedef struct vendorCmdData
+{
+ UCHAR *buf; /* Pointer to the data */
+ UCHAR opCode; /* Vendor request code */
+ UINT addr; /* Read/Write address */
+ long size; /* Size of the read/write */
+ bool isRead; /* Read or write */
+} vendorCmdData ;
+
+#ifndef __USB200_H__
+#define __USB200_H__
+#pragma pack(push,1)
+typedef struct _USB_DEVICE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT bcdUSB;
+ UCHAR bDeviceClass;
+ UCHAR bDeviceSubClass;
+ UCHAR bDeviceProtocol;
+ UCHAR bMaxPacketSize0;
+ USHORT idVendor;
+ USHORT idProduct;
+ USHORT bcdDevice;
+ UCHAR iManufacturer;
+ UCHAR iProduct;
+ UCHAR iSerialNumber;
+ UCHAR bNumConfigurations;
+} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
+
+typedef struct _USB_ENDPOINT_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bEndpointAddress;
+ UCHAR bmAttributes;
+ USHORT wMaxPacketSize;
+ UCHAR bInterval;
+} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
+
+typedef struct _USB_CONFIGURATION_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT wTotalLength;
+ UCHAR bNumInterfaces;
+ UCHAR bConfigurationValue;
+ UCHAR iConfiguration;
+ UCHAR bmAttributes;
+ UCHAR MaxPower;
+} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
+
+typedef struct _USB_INTERFACE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bInterfaceNumber;
+ UCHAR bAlternateSetting;
+ UCHAR bNumEndpoints;
+ UCHAR bInterfaceClass;
+ UCHAR bInterfaceSubClass;
+ UCHAR bInterfaceProtocol;
+ UCHAR iInterface;
+} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
+
+typedef struct _USB_STRING_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ WCHAR bString[1];
+} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
+
+typedef struct _USB_COMMON_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
+#pragma pack(pop)
+#endif
+
+/*******************************************************************************/
+class CCyIsoPktInfo {
+public:
+ LONG Status;
+ LONG Length;
+};
+
+/*******************************************************************************/
+
+
+/* {AE18AA60-7F6A-11d4-97DD-00010229B959} */
+static GUID CYUSBDRV_GUID = {0xae18aa60, 0x7f6a, 0x11d4, 0x97, 0xdd, 0x0, 0x1, 0x2, 0x29, 0xb9, 0x59};
+
+typedef enum {TGT_DEVICE, TGT_INTFC, TGT_ENDPT, TGT_OTHER } CTL_XFER_TGT_TYPE;
+typedef enum {REQ_STD, REQ_CLASS, REQ_VENDOR } CTL_XFER_REQ_TYPE;
+typedef enum {DIR_TO_DEVICE, DIR_FROM_DEVICE } CTL_XFER_DIR_TYPE;
+typedef enum {XMODE_BUFFERED, XMODE_DIRECT } XFER_MODE_TYPE;
+
+const int MAX_ENDPTS = 32;
+const int MAX_INTERFACES = 255;
+const int USB_STRING_MAXLEN = 256;
+
+#define BUFSIZE_UPORT 2048 //4096 - CDT 130492
+typedef enum { RAM = 1, I2CE2PROM, SPIFLASH } FX3_FWDWNLOAD_MEDIA_TYPE ;
+typedef enum { SUCCESS = 0, FAILED, INVALID_MEDIA_TYPE, INVALID_FWSIGNATURE, DEVICE_CREATE_FAILED, INCORRECT_IMAGE_LENGTH, INVALID_FILE, SPILASH_ERASE_FAILED, CORRUPT_FIRMWARE_IMAGE_FILE,I2CE2PROM_UNKNOWN_I2C_SIZE } FX3_FWDWNLOAD_ERROR_CODE;
+
+#define CYWB_BL_4_BYTES_COPY(destination,source) {memcpy((void *)(destination), (void *)(source), 4);}
+
+/********************************************************************************
+*
+* The CCyEndPoint ABSTRACT Class
+*
+********************************************************************************/
+class CCyUSBEndPoint
+{
+protected:
+ bool WaitForIO(OVERLAPPED *ovLapStatus);
+
+ virtual PUCHAR BeginDirectXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+ virtual PUCHAR BeginBufferedXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+
+public:
+
+ CCyUSBEndPoint(void);
+ CCyUSBEndPoint(CCyUSBEndPoint& ept);
+ CCyUSBEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyUSBEndPoint(HANDLE hDev, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ HANDLE hDevice;
+
+ /* The fields of an EndPoint Descriptor */
+ UCHAR DscLen;
+ UCHAR DscType;
+ UCHAR Address;
+ UCHAR Attributes;
+ USHORT MaxPktSize;
+ USHORT PktsPerFrame;
+ UCHAR Interval;
+ /* This are the fields for Super speed endpoint */
+ UCHAR ssdscLen;
+ UCHAR ssdscType;
+ UCHAR ssmaxburst; /* Maximum number of packets endpoint can send in one burst */
+ UCHAR ssbmAttribute; /* store endpoint attribute like for bulk it will be number of streams */
+ USHORT ssbytesperinterval;
+
+ /* Other fields */
+ ULONG TimeOut;
+ ULONG UsbdStatus;
+ ULONG NtStatus;
+
+ DWORD bytesWritten;
+ DWORD LastError;
+ bool bIn;
+
+ XFER_MODE_TYPE XferMode;
+
+ bool XferData(PUCHAR buf, LONG &len, CCyIsoPktInfo* pktInfos = NULL);
+ bool XferData(PUCHAR buf, LONG &bufLen, CCyIsoPktInfo* pktInfos, bool pktMode);
+ virtual PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov) = 0;
+ virtual bool FinishDataXfer(PUCHAR buf, LONG &len, OVERLAPPED *ov, PUCHAR pXmitBuf, CCyIsoPktInfo* pktInfos = NULL);
+ bool WaitForXfer(OVERLAPPED *ov, ULONG tOut);
+ ULONG GetXferSize(void);
+ void SetXferSize(ULONG xfer);
+
+ bool Reset(void);
+ bool Abort(void);
+};
+
+
+/********************************************************************************
+*
+* The Control Endpoint Class
+*
+********************************************************************************/
+class CCyControlEndPoint : public CCyUSBEndPoint
+{
+public:
+ CCyControlEndPoint(void);
+ CCyControlEndPoint(CCyControlEndPoint& ept);
+ CCyControlEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+
+ CTL_XFER_TGT_TYPE Target;
+ CTL_XFER_REQ_TYPE ReqType;
+ CTL_XFER_DIR_TYPE Direction;
+
+ UCHAR ReqCode;
+ WORD Value;
+ WORD Index;
+
+ bool Read(PUCHAR buf, LONG &len);
+ bool Write(PUCHAR buf, LONG &len);
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+};
+
+
+/********************************************************************************
+*
+* The Isoc Endpoint Class
+*
+********************************************************************************/
+class CCyIsocEndPoint : public CCyUSBEndPoint
+{
+
+protected:
+ virtual PUCHAR BeginDirectXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+ virtual PUCHAR BeginBufferedXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+
+public:
+ CCyIsocEndPoint(void);
+ CCyIsocEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyIsocEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+ CCyIsoPktInfo* CreatePktInfos(LONG bufLen, int &packets);
+};
+
+
+/********************************************************************************
+*
+* The Bulk Endpoint Class
+*
+********************************************************************************/
+class CCyBulkEndPoint : public CCyUSBEndPoint
+{
+public:
+ CCyBulkEndPoint(void);
+ CCyBulkEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyBulkEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+};
+
+
+/********************************************************************************
+*
+* The Interrupt Endpoint Class
+*
+********************************************************************************/
+class CCyInterruptEndPoint : public CCyUSBEndPoint
+{
+public:
+ CCyInterruptEndPoint(void);
+ CCyInterruptEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyInterruptEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+};
+
+
+/********************************************************************************
+*
+* The Interface Class
+*
+********************************************************************************/
+class CCyUSBInterface
+{
+public:
+ CCyUSBEndPoint *EndPoints[MAX_ENDPTS]; /* Holds pointers to all the interface's endpoints,
+ plus a pointer to the Control endpoint zero */
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bInterfaceNumber;
+ UCHAR bAlternateSetting;
+ UCHAR bNumEndpoints; /* Not counting the control endpoint */
+ UCHAR bInterfaceClass;
+ UCHAR bInterfaceSubClass;
+ UCHAR bInterfaceProtocol;
+ UCHAR iInterface;
+
+ UCHAR bAltSettings;
+ USHORT wTotalLength; /* Needed in case Intfc has additional (non-endpt) descriptors */
+
+ CCyUSBInterface(HANDLE handle, PUSB_INTERFACE_DESCRIPTOR pIntfcDescriptor,UCHAR usb30Dummy);
+ CCyUSBInterface(HANDLE h, PUSB_INTERFACE_DESCRIPTOR pIntfcDescriptor);
+ CCyUSBInterface(CCyUSBInterface& ifc); /* Copy Constructor */
+ ~CCyUSBInterface(void);
+
+};
+
+
+/********************************************************************************
+*
+* The Config Class
+*
+********************************************************************************/
+class CCyUSBConfig
+{
+public:
+ CCyUSBInterface *Interfaces[MAX_INTERFACES];
+
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT wTotalLength;
+ UCHAR bNumInterfaces;
+ UCHAR bConfigurationValue;
+ UCHAR iConfiguration;
+ UCHAR bmAttributes;
+ UCHAR MaxPower;
+
+ UCHAR AltInterfaces;
+
+ CCyUSBConfig(void);
+ CCyUSBConfig(CCyUSBConfig& cfg); /* Copy Constructor */
+ CCyUSBConfig(HANDLE h, PUSB_CONFIGURATION_DESCRIPTOR pConfigDescr);
+ CCyUSBConfig(HANDLE h, PUSB_CONFIGURATION_DESCRIPTOR pConfigDescr,UCHAR usb30Dummy);
+ ~CCyUSBConfig(void);
+};
+
+
+/********************************************************************************
+*
+* The Bos USB20 Extesnion Class
+*
+********************************************************************************/
+class CCyBosUSB20Extesnion
+{
+public:
+ UCHAR bLength; /* Descriptor length */
+ UCHAR bDescriptorType; /* Descriptor Type */
+ UCHAR bDevCapabilityType; /* Device capability type */
+ UINT bmAttribute; /* Bitmap encoding for supprted feature and Link power managment supprted if set */
+
+ CCyBosUSB20Extesnion(void);
+ CCyBosUSB20Extesnion(HANDLE h,PUSB_BOS_USB20_DEVICE_EXTENSION BosUsb20ExtDesc);
+};
+
+
+/********************************************************************************
+*
+* The Bos SuperSpeed Capability Class
+*
+********************************************************************************/
+class CCyBosSuperSpeedCapability
+{
+public:
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDevCapabilityType;
+ UCHAR bmAttribute;
+ USHORT SpeedsSuported;
+ UCHAR bFunctionalitySupporte;
+ UCHAR bU1DevExitLat;
+ USHORT bU2DevExitLat;
+
+ CCyBosSuperSpeedCapability(void);
+ CCyBosSuperSpeedCapability(HANDLE h,PUSB_BOS_SS_DEVICE_CAPABILITY pUSB_SuperSpeedUsb);
+
+};
+
+
+/********************************************************************************
+*
+* The Bos Container ID Class
+*
+********************************************************************************/
+class CCyBosContainerID
+{
+public:
+ UCHAR bLength; /* Descriptor length */
+ UCHAR bDescriptorType; /* Descriptor Type */
+ UCHAR bDevCapabilityType; /* Device capability type */
+ UCHAR bReserved; /* no use */
+ UCHAR ContainerID[USB_BOS_CAPABILITY_TYPE_CONTAINER_ID_SIZE]; /* UUID */
+
+ CCyBosContainerID(void);
+ CCyBosContainerID(HANDLE h,PUSB_BOS_CONTAINER_ID pContainerID);
+};
+
+
+/********************************************************************************
+*
+* The USB BOS Class
+*
+********************************************************************************/
+class CCyUSBBOS
+{
+public:
+
+ CCyBosContainerID *pContainer_ID;
+ CCyBosUSB20Extesnion *pUSB20_DeviceExt;
+ CCyBosSuperSpeedCapability *pSS_DeviceCap;
+
+ UCHAR bLength; /* Descriptor length */
+ UCHAR bDescriptorType; /* Descriptor Type */
+ USHORT wTotalLength; /* Total length of descriptor ( icluding device capabilty */
+ UCHAR bNumDeviceCaps; /* Number of device capability descriptors in BOS */
+
+ CCyUSBBOS(void);
+ CCyUSBBOS(HANDLE h,PUSB_BOS_DESCRIPTOR pBosDescrData);
+ ~CCyUSBBOS();
+};
+
+/*********************************************************************************
+*
+* The USB Device Class - This is the main class that contains members of all the
+* other classes.
+*
+* To use the library, create an instance of this Class and call it's Open method.
+*
+*********************************************************************************/
+class CCyUSBDevice
+{
+ /* The public members are accessible (i.e. corruptible) by the user of the library
+ * Algorithms of the class don't rely on any public members. Instead, they use the
+ * private members of the class for their calculations. */
+
+public:
+
+ CCyUSBDevice(HANDLE hnd = NULL, GUID guid = CYUSBDRV_GUID, BOOL bOpen = true);
+ ~CCyUSBDevice(void);
+
+ CCyUSBEndPoint **EndPoints; /* Shortcut to USBCfgs[CfgNum]->Interfaces[IntfcIndex]->Endpoints */
+ CCyUSBEndPoint *EndPointOf(UCHAR addr);
+
+ CCyUSBBOS *UsbBos;
+ CCyIsocEndPoint *IsocInEndPt;
+ CCyIsocEndPoint *IsocOutEndPt;
+ CCyBulkEndPoint *BulkInEndPt;
+ CCyBulkEndPoint *BulkOutEndPt;
+ CCyControlEndPoint *ControlEndPt;
+ CCyInterruptEndPoint *InterruptInEndPt;
+ CCyInterruptEndPoint *InterruptOutEndPt;
+
+
+ USHORT StrLangID;
+ ULONG LastError;
+ ULONG UsbdStatus;
+ ULONG NtStatus;
+ ULONG DriverVersion;
+ ULONG USBDIVersion;
+ char DeviceName[USB_STRING_MAXLEN];
+ char FriendlyName[USB_STRING_MAXLEN];
+ wchar_t Manufacturer[USB_STRING_MAXLEN];
+ wchar_t Product[USB_STRING_MAXLEN];
+ wchar_t SerialNumber[USB_STRING_MAXLEN];
+
+ CHAR DevPath[USB_STRING_MAXLEN];
+
+ USHORT BcdUSB;
+ USHORT VendorID;
+ USHORT ProductID;
+ UCHAR USBAddress;
+ UCHAR DevClass;
+ UCHAR DevSubClass;
+ UCHAR DevProtocol;
+ INT MaxPacketSize;
+ USHORT BcdDevice;
+
+ UCHAR ConfigValue;
+ UCHAR ConfigAttrib;
+ UCHAR MaxPower;
+
+ UCHAR IntfcClass;
+ UCHAR IntfcSubClass;
+ UCHAR IntfcProtocol;
+ bool bHighSpeed;
+ bool bSuperSpeed;
+
+ DWORD BytesXfered;
+
+ UCHAR DeviceCount(void);
+ UCHAR ConfigCount(void);
+ UCHAR IntfcCount(void);
+ UCHAR AltIntfcCount(void);
+ UCHAR EndPointCount(void);
+
+ void SetConfig(UCHAR cfg);
+ UCHAR Config(void) { return CfgNum; } /* Normally 0 */
+ UCHAR Interface(void) { return IntfcNum; } /* Usually 0 */
+
+ /* No SetInterface method since only 1 intfc per device (per Windows) */
+ UCHAR AltIntfc(void);
+ bool SetAltIntfc(UCHAR alt);
+
+ GUID DriverGUID(void) { return DrvGuid; }
+ HANDLE DeviceHandle(void) { return hDevice; }
+ void UsbdStatusString(ULONG stat, PCHAR s);
+ bool CreateHandle(UCHAR dev);
+ void DestroyHandle();
+
+ bool Open(UCHAR dev);
+ void Close(void);
+ bool Reset(void);
+ bool ReConnect(void);
+ bool Suspend(void);
+ bool Resume(void);
+ bool IsOpen(void) { return (hDevice != INVALID_HANDLE_VALUE); }
+
+ UCHAR PowerState(void);
+
+ bool GetBosDescriptor(PUSB_BOS_DESCRIPTOR descr);
+ bool GetBosUSB20DeviceExtensionDescriptor(PUSB_BOS_USB20_DEVICE_EXTENSION descr);
+ bool GetBosContainedIDDescriptor(PUSB_BOS_CONTAINER_ID descr);
+ bool GetBosSSCapabilityDescriptor(PUSB_BOS_SS_DEVICE_CAPABILITY descr);
+
+ void GetDeviceDescriptor(PUSB_DEVICE_DESCRIPTOR descr);
+ void GetConfigDescriptor(PUSB_CONFIGURATION_DESCRIPTOR descr);
+ void GetIntfcDescriptor(PUSB_INTERFACE_DESCRIPTOR descr);
+ CCyUSBConfig GetUSBConfig(int index);
+
+private:
+
+ USB_DEVICE_DESCRIPTOR USBDeviceDescriptor;
+ PUSB_CONFIGURATION_DESCRIPTOR USBConfigDescriptors[2];
+ PUSB_BOS_DESCRIPTOR pUsbBosDescriptor;
+
+ CCyUSBConfig *USBCfgs[2];
+
+ HANDLE hWnd;
+ HANDLE hDevice;
+ HANDLE hDevNotification;
+ HANDLE hHndNotification;
+
+ GUID DrvGuid;
+
+ UCHAR Devices;
+ UCHAR Interfaces;
+ UCHAR AltInterfaces;
+ UCHAR Configs;
+
+ UCHAR DevNum;
+ UCHAR CfgNum;
+ UCHAR IntfcNum; /* The current selected interface's bInterfaceNumber */
+ UCHAR IntfcIndex; /* The entry in the Config's interfaces table matching to IntfcNum and AltSetting */
+
+ bool GetInternalBosDescriptor();
+ void GetDevDescriptor(void);
+ void GetCfgDescriptor(int descIndex);
+ void GetString(wchar_t *s, UCHAR sIndex);
+ void SetStringDescrLanguage(void);
+ void SetAltIntfcParams(UCHAR alt);
+ bool IoControl(ULONG cmd, PUCHAR buf, ULONG len);
+
+ void SetEndPointPtrs(void);
+ void GetDeviceName(void);
+ void GetFriendlyName(void);
+ void GetDriverVer(void);
+ void GetUSBDIVer(void);
+ void GetSpeed(void);
+ void GetUSBAddress(void);
+ //void CloseEndPtHandles(void);
+
+ bool RegisterForPnpEvents(HANDLE h);
+};
+
+
+/********************************************************************************
+*
+* The FX3 Device Class
+*
+********************************************************************************/
+class CCyFX3Device: public CCyUSBDevice
+{
+public:
+ CCyFX3Device(void);
+ ~CCyFX3Device(void);
+ bool IsBootLoaderRunning();
+ FX3_FWDWNLOAD_ERROR_CODE DownloadFw(char *fileName, FX3_FWDWNLOAD_MEDIA_TYPE enMediaType);
+
+private:
+
+ bool Ep0VendorCommand(vendorCmdData cmdData);
+ bool SetProgramEntry(UCHAR opCode,UINT start_addr);
+
+ bool DownloadBufferToDevice(UINT start_addr, USHORT count, UCHAR *data_buf, UCHAR opCode);
+ bool UploadBufferFromDevice(UINT start_addr, USHORT count, UCHAR *data_buf, UCHAR opCode);
+
+ FX3_FWDWNLOAD_ERROR_CODE DownloadFwToRam(PUCHAR buffer_p, UINT fw_size, UCHAR opCode);
+ FX3_FWDWNLOAD_ERROR_CODE DownloadUserIMGtoI2CE2PROM(PUCHAR buffer_p, UINT fw_size, UCHAR opCode);
+ FX3_FWDWNLOAD_ERROR_CODE DownloadUserIMGtoSPIFLASH(PUCHAR buffer_p, UINT fw_size, UCHAR opCode);
+
+ FX3_FWDWNLOAD_ERROR_CODE EraseSectorOfSPIFlash(UINT SectorNumber, UCHAR opCode);
+ bool WriteToSPIFlash(PUCHAR Buf, UINT buflen, UINT ByteAddress, UCHAR opCode);
+};
+
+/********************************************************************************/
+
+#endif \ No newline at end of file
diff --git a/include/qhy/CyUSB30_def.h b/include/qhy/CyUSB30_def.h
new file mode 100644
index 0000000..4d2bfb3
--- /dev/null
+++ b/include/qhy/CyUSB30_def.h
@@ -0,0 +1,90 @@
+/*
+ ## Cypress CyAPI C++ library USB3.0 defination header file (CyUSB30_def.h)
+ ## =======================================================
+ ##
+ ## Copyright Cypress Semiconductor Corporation, 2009-2012,
+ ## All Rights Reserved
+ ## UNPUBLISHED, LICENSED SOFTWARE.
+ ##
+ ## CONFIDENTIAL AND PROPRIETARY INFORMATION
+ ## WHICH IS THE PROPERTY OF CYPRESS.
+ ##
+ ## Use of this file is governed
+ ## by the license agreement included in the file
+ ##
+ ## <install>/license/license.rtf
+ ##
+ ## where <install> is the Cypress software
+ ## install root directory path.
+ ##
+ ## =======================================================
+*/
+#ifndef _CYUSB30_H
+#define _CYUSB30_H
+
+//#pragma pack(1)
+#pragma pack(push, 1)
+// USB3.0 specific constant defination
+#define BCDUSBJJMASK 0xFF00 //(0xJJMN JJ - Major version,M Minor version, N sub-minor vesion)
+#define USB30MAJORVER 0x0300
+#define USB20MAJORVER 0x0200
+
+#define USB_BOS_DESCRIPTOR_TYPE 0x0F
+#define USB_DEVICE_CAPABILITY 0x10
+#define USB_SUPERSPEED_ENDPOINT_COMPANION 0x30
+#define USB_BOS_CAPABILITY_TYPE_Wireless_USB 0x01
+#define USB_BOS_CAPABILITY_TYPE_USB20_EXT 0x02
+#define USB_BOS_CAPABILITY_TYPE_SUPERSPEED_USB 0x03
+#define USB_BOS_CAPABILITY_TYPE_CONTAINER_ID 0x04
+#define USB_BOS_CAPABILITY_TYPE_CONTAINER_ID_SIZE 0x10
+
+#define USB_BOS_DEVICE_CAPABILITY_TYPE_INDEX 0x2
+//constant defination
+typedef struct _USB_BOS_DESCRIPTOR
+{
+ UCHAR bLength;/* Descriptor length*/
+ UCHAR bDescriptorType;/* Descriptor Type */
+ USHORT wTotalLength;/* Total length of descriptor ( icluding device capability*/
+ UCHAR bNumDeviceCaps;/* Number of device capability descriptors in BOS */
+}USB_BOS_DESCRIPTOR,*PUSB_BOS_DESCRIPTOR;
+
+typedef struct _USB_BOS_USB20_DEVICE_EXTENSION
+{
+ UCHAR bLength;/* Descriptor length*/
+ UCHAR bDescriptorType;/* Descriptor Type */
+ UCHAR bDevCapabilityType;/* Device capability type*/
+ UINT bmAttribute;// Bitmap encoding for supprted feature and Link power managment supprted if set
+}USB_BOS_USB20_DEVICE_EXTENSION,*PUSB_BOS_USB20_DEVICE_EXTENSION;
+
+typedef struct _USB_BOS_SS_DEVICE_CAPABILITY
+{
+ UCHAR bLength;/* Descriptor length*/
+ UCHAR bDescriptorType;/* Descriptor Type */
+ UCHAR bDevCapabilityType;/* Device capability type*/
+ UCHAR bmAttribute;// Bitmap encoding for supprted feature and Link power managment supprted if set
+ USHORT wSpeedsSuported;//low speed supported if set,full speed supported if set,high speed supported if set,super speed supported if set,15:4 nt used
+ UCHAR bFunctionalitySupporte;
+ UCHAR bU1DevExitLat;//U1 device exit latency
+ USHORT bU2DevExitLat;//U2 device exit latency
+}USB_BOS_SS_DEVICE_CAPABILITY,*PUSB_BOS_SS_DEVICE_CAPABILITY;
+
+typedef struct _USB_BOS_CONTAINER_ID
+{
+ UCHAR bLength;/* Descriptor length*/
+ UCHAR bDescriptorType;/* Descriptor Type */
+ UCHAR bDevCapabilityType;/* Device capability type*/
+ UCHAR bReserved; // no use
+ UCHAR ContainerID[USB_BOS_CAPABILITY_TYPE_CONTAINER_ID_SIZE];/* UUID */
+}USB_BOS_CONTAINER_ID,*PUSB_BOS_CONTAINER_ID;
+
+typedef struct _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR
+{
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bMaxBurst;
+ UCHAR bmAttributes;
+ USHORT bBytesPerInterval;
+}USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR,*PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR;
+#pragma pack(pop)
+#endif /*_CYUSB30_H*/
+
diff --git a/include/qhy/Io.h b/include/qhy/Io.h
new file mode 100644
index 0000000..9cf1f3d
--- /dev/null
+++ b/include/qhy/Io.h
@@ -0,0 +1,38 @@
+#ifdef WIN32
+
+#pragma once
+
+#include "CyAPI.h"
+#include "stdint.h"
+
+class CamContext;
+
+void EnumCam(CamContext* contextList,CCyUSBDevice *pDev);
+uint32_t __stdcall IoThread(void* pParams);
+uint32_t __stdcall DbgIoThread(void* pParams);
+BOOL I2CRead(HANDLE hCam, uint16_t index, uint16_t* pValue);
+BOOL I2CCacheRead(HANDLE hCam, uint16_t index, uint16_t* pValue);
+BOOL I2CWrite(HANDLE hCam, uint16_t index, uint16_t value);
+BOOL I2CBatchRead(HANDLE hCam, uint16_t index, uint8_t* data, uint16_t len);
+BOOL I2CCacheBatchRead(HANDLE hCam, uint16_t index, uint8_t* data, uint16_t len);
+BOOL I2CBatchWrite(HANDLE hCam, uint16_t index, uint8_t* data, uint16_t len);
+BOOL I2CBatchWriteEx(HANDLE hCam, uint8_t i2caddr,uint8_t* data, uint16_t len);
+uint16_t GetFirmwareVersion(HANDLE hCam);
+BOOL EepromRead(HANDLE hCam, uint8_t index, uint8_t* data, uint16_t len);
+BOOL EepromWrite(HANDLE hCam, uint8_t index, uint8_t* data, uint16_t len);
+BOOL SetMode(HANDLE hCam);
+BOOL SetBin(HANDLE hCam);
+BOOL SetSubframe(HANDLE hCam);
+BOOL SetDepth(HANDLE hCam);
+BOOL SetTransferSpeed(HANDLE hCam);
+BOOL SetExposeTime(HANDLE hCam);
+BOOL SetGain(HANDLE hCam);
+BOOL BeginTransfer(HANDLE hCam);
+void StopTransfer(HANDLE hCam);
+void AbortTransfer(HANDLE hCam);
+BOOL SetHBlanking(HANDLE hCam);
+BOOL SetHighGainBoost(HANDLE hCam);
+BOOL SetFinetune(HANDLE hCam);
+BOOL GetSingleFrame(HANDLE hCam,uint8_t *data,uint32_t len,uint32_t duration);
+
+#endif \ No newline at end of file
diff --git a/include/qhy/Pipeline.h b/include/qhy/Pipeline.h
new file mode 100644
index 0000000..f7b559e
--- /dev/null
+++ b/include/qhy/Pipeline.h
@@ -0,0 +1,3 @@
+#pragma once
+
+uint32_t __stdcall PipelineThread(void* pParams);
diff --git a/include/qhy/QDef.h b/include/qhy/QDef.h
new file mode 100644
index 0000000..72c318e
--- /dev/null
+++ b/include/qhy/QDef.h
@@ -0,0 +1,106 @@
+//// QDef.h
+
+#ifndef _QDEF_H_
+#define _QDEF_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define QCAM_MAXCAMERACOUNT 16
+
+#define QCAM_IOTYPE_USB 10
+#define QCAM_IOTYPE_ETHERNET 20
+
+#define QCAM_CAMTYPE_UNKNOWN -1
+
+//QHYCCD A series and QHY27/28/29
+#define QCAM_CAMTYPE_QHY16200A 200
+#define QCAM_CAMTYPE_IC8300 201
+#define QCAM_CAMTYPE_QHY90A 202
+#define QCAM_CAMTYPE_QHY29 203
+#define QCAM_CAMTYPE_QHY28 204
+#define QCAM_CAMTYPE_QHY814A 205
+#define QCAM_CAMTYPE_QHY16803A 206
+#define QCAM_CAMTYPE_QHY27 207
+#define QCAM_CAMTYPE_QHY09000A 208
+#define QCAM_CAMTYPE_QHY695A 299
+
+#define QCAM_CAMTYPE_QHY5II 350
+#define QCAM_CAMTYPE_QHY5TII 351
+#define QCAM_CAMTYPE_QHY5VII 352
+#define QCAM_CAMTYPE_QHY5UII 353
+#define QCAM_CAMTYPE_QHY5PII_M 354
+#define QCAM_CAMTYPE_QHY5LII_M 355
+#define QCAM_CAMTYPE_QHY5XII 356
+#define QCAM_CAMTYPE_QHY5FII 357
+#define QCAM_CAMTYPE_QHY5HII 358
+#define QCAM_CAMTYPE_MINICAM5S_M 359
+#define QCAM_CAMTYPE_MINICAM5S_C 360
+#define QCAM_CAMTYPE_QHY16000 361
+#define QCAM_CAMTYPE_MINICAM5F_M 362
+#define QCAM_CAMTYPE_MINICAM5F_C 363
+#define QCAM_CAMTYPE_QHY5 364
+#define QCAM_CAMTYPE_QHY5LII_C 365
+#define QCAM_CAMTYPE_QHY5PII_C 366
+#define QCAM_CAMTYPE_QHY5RII 400
+#define QCAM_CAMTYPE_PLUTO285 520
+#define QCAM_CAMTYPE_URANUS285 620
+#define QCAM_CAMTYPE_URANUS694 660
+#define QCAM_CAMTYPE_URANUS814 690
+
+
+
+#define QCAM_CAMTYPE_QHY8L 891
+#define QCAM_CAMTYPE_QHY9S 892
+#define QCAM_CAMTYPE_QHY10 893
+#define QCAM_CAMTYPE_QHY11 894
+#define QCAM_CAMTYPE_QHY21 895
+#define QCAM_CAMTYPE_QHY22 896
+#define QCAM_CAMTYPE_QHY23 897
+#define QCAM_CAMTYPE_TITAN174U 900
+#define QCAM_CAMTYPE_TITAN178U 910
+#define QCAM_CAMTYPE_TITAN224U 920
+#define QCAM_CAMTYPE_TITAN226U 930
+#define QCAM_CAMTYPE_TITAN185U 931
+#define QCAM_CAMTYPE_TITAN236U 932
+#define QCAM_CAMTYPE_TITANG400U 933
+#define QCAM_CAMTYPE_TITAN290U 934
+#define QCAM_CAMTYPE_TITAN163U 935
+#define QCAM_CAMTYPE_TITAN165U 936
+#define QCAM_CAMTYPE_TITAN367U 937
+#define QCAM_CAMTYPE_TITAN183U 938
+#define QCAM_CAMTYPE_QHY5III 999
+
+//#define QCAM_CAMTYPE_QHY5LII_M 53
+//#define QCAM_CAMTYPE_QHY5LII_C 531
+
+#define QCAM_MODE_FOCUS 10
+#define QCAM_MODE_PREVIEW 20
+#define QCAM_MODE_FULL 30
+
+#define QCAM_DEPTH_BIT8 10
+#define QCAM_DEPTH_BIT16 20
+
+#define QCAM_TRANSFERSPEED_HIGH 10
+#define QCAM_TRANSFERSPEED_MEDIUM 20
+#define QCAM_TRANSFERSPEED_LOW 30
+
+#define QCAM_SCENE_AUTO 10
+#define QCAM_SCENE_MICROSCOPE 20
+#define QCAM_SCENE_FLUORESCENCE 30
+
+#define QCAM_AWBMODE_GLOBAL 10
+#define QCAM_AWBMODE_SPOT 20
+
+#define QCAM_DEMOSAICMODE_NONE 0
+#define QCAM_DEMOSAICMODE_RGGB 1
+#define QCAM_DEMOSAICMODE_GRBG 2
+#define QCAM_DEMOSAICMODE_BGGR 3
+#define QCAM_DEMOSAICMODE_GBRG 4
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/qhy/QGigE.h b/include/qhy/QGigE.h
new file mode 100644
index 0000000..00bd9e2
--- /dev/null
+++ b/include/qhy/QGigE.h
@@ -0,0 +1,80 @@
+#ifndef _Q_GIGE_H_
+#define _Q_GIGE_H_
+
+#include "stdint.h"
+#include "qhyccdstruct.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define QGIGE_MAXCAMERACOUNT 16
+
+
+#define QGIGE_CAMTYPE_UNKNOWN DEVICETYPE_UNKNOW
+#define QGIGE_CAMTYPE_SOLAR800G DEVICETYPE_SOLAR800G
+#define QGIGE_CAMTYPE_QHY15 DEVICETYPE_QHY15G
+#define QGIGE_CAMTYPE_A0340 DEVICETYPE_A0340G
+#define QGIGE_CAMTYPE_A08050 DEVICETYPE_QHY08050G
+#define QGIGE_CAMTYPE_TEST694 DEVICETYPE_QHY694G
+#define QGIGE_CAMTYPE_TEST16050 DEVICETYPE_QHY27G
+#define QGIGE_CAMTYPE_TEST814 DEVICETYPE_QHY23G
+#define QGIGE_CAMTYPE_A16000 DEVICETYPE_QHY16000G
+#define QGIGE_CAMTYPE_A814 DEVICETYPE_QHY814G
+#define QGIGE_CAMTYPE_A45GX DEVICETYPE_QHY45GX
+
+
+#define QGIGE_DEPTH_8BIT 10
+#define QGIGE_DEPTH_16BIT 20
+
+#define QGIGE_READOUTSPEED_HIGH 10
+#define QGIGE_READOUTSPEED_MEDIUM 20
+#define QGIGE_READOUTSPEED_LOW 30
+
+#ifdef WIN32
+void __stdcall QGigEInit(HANDLE* hGigEList, uint32_t* pCamCount);
+void __stdcall QGigEUninit();
+
+uint32_t __stdcall QGigEGetCamType(HANDLE hGigE);
+GUID __stdcall QGigEGetCamGuid(HANDLE hGigE);
+
+bool __stdcall QGigESetBinning(HANDLE hGigE, uint8_t h, uint8_t v);
+bool __stdcall QGigESetDepth(HANDLE hGigE, uint8_t depth);
+bool __stdcall QGigESetReadoutSpeed(HANDLE hGigE, uint8_t readoutSpeed);
+bool __stdcall QGigESetExposure(HANDLE hGigE, double exp);
+bool __stdcall QGigESetGain(HANDLE hGigE, uint16_t gain);
+bool __stdcall QGigESetFinetune(HANDLE hGigE, uint8_t* finetune);
+bool __stdcall QGigESetRaw(HANDLE hGigE, bool raw);
+
+bool __stdcall QGigEBeginLive(HANDLE hGigE);
+bool __stdcall QGigEGetLiveFrame(HANDLE hGigE, void* data, uint32_t* pW, uint32_t* pH, uint32_t* pBpp);
+void __stdcall QGigEStopLive(HANDLE hGigE);
+bool __stdcall QGigECapture(HANDLE hGigE, void* data, uint32_t* pW, uint32_t* pH, uint32_t* pBpp);
+void __stdcall QGigEAbortCapture(HANDLE hGigE);
+
+bool __stdcall QGigESetTrigerFunction(HANDLE hGigE,bool value);
+
+bool __stdcall QGigESetTargetTemperature(HANDLE hGigE, double temp);
+bool __stdcall QGigESetCoolingPower(HANDLE hGigE,uint8_t power);
+bool __stdcall QGigEBeginCooling(HANDLE hGigE);
+void __stdcall QGigEStopCooling(HANDLE hGigE);
+bool __stdcall QGigEGetCoolerStatus(HANDLE hGigE, double* pTemp, uint8_t* pPower);
+
+bool __stdcall QGigESendRequest(HANDLE hGigE, bool hasResponse, uint16_t cmd, uint8_t* data, uint32_t len);
+
+bool __stdcall QGigEAdWrite(HANDLE hGigE, uint16_t addr, uint32_t value);
+
+bool __stdcall QGigEEepromRead(HANDLE hGigE, uint8_t index, uint8_t* data, uint16_t len);
+bool __stdcall QGigEEepromWrite(HANDLE hGigE, uint8_t index, uint8_t* data, uint16_t len);
+
+bool __stdcall QGigESend2Uart(HANDLE hGigE, int8_t* data, uint16_t len);
+bool __stdcall QGigEReceiveFromUart(HANDLE hGigE, int8_t* data, uint16_t len);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/qhy/QUsb.h b/include/qhy/QUsb.h
new file mode 100644
index 0000000..db29961
--- /dev/null
+++ b/include/qhy/QUsb.h
@@ -0,0 +1,75 @@
+// QUsb.h
+#include "CyAPI.h"
+#include "stdint.h"
+
+#ifndef _QUSB_H_
+#define _QUSB_H_
+
+#define QUSB_MAXCAMERACOUNT 16
+#define QUSB_TXSIZE 524288
+#define QUSB_TXCOUNT 16
+
+#define SingleFrameUSBPacketSize 2048 * 20 *2
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+class Transaction
+{
+public:
+ OVERLAPPED ov;
+ PUCHAR cyContext;
+ unsigned char* data;
+
+ Transaction()
+ {
+ this->ov.hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
+ this->data = new unsigned char[QUSB_TXSIZE];
+ this->cyContext = NULL;
+ }
+};
+
+class UsbContext
+{
+public:
+ CCyUSBDevice* pDev;
+ Transaction txList[QUSB_TXCOUNT];
+ HANDLE hAbortEvent;
+ int lastTxIndex;
+
+ UsbContext()
+ {
+ this->pDev = NULL;
+ this->hAbortEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
+ this->lastTxIndex = -1;
+ }
+};
+
+
+
+
+
+void __cdecl QUsbEnumCam(HANDLE* hCamList,CCyUSBDevice* pDev);
+
+bool __cdecl QUsbReadRawData(HANDLE hCam, unsigned char* data, int32_t len,uint32_t duration);
+
+
+
+bool __cdecl QUsbBeginReadRawData(HANDLE hCam);
+bool __cdecl QUsbWaitForData(HANDLE hCam, uint8_t** pData, int32_t* pLen);
+bool __cdecl QUsbResumeRawDataRead(HANDLE hCam);
+bool __cdecl QUsbAbortWait(HANDLE hCam);
+bool __cdecl QUsbStopReadRawData(HANDLE hCam);
+
+
+
+bool __cdecl QUsbBeginReadRawDataSingle(HANDLE hCam,uint32_t PacketSize);
+bool __cdecl QUsbResumeRawDataReadSingle(HANDLE hCam,uint32_t PacketSize);
+bool __cdecl QUsbWaitForDataSingle(HANDLE hCam, uint8_t** pData, int32_t* pLen,uint32_t PacketSize);
+bool __cdecl QUsbStopReadRawDataSingle(HANDLE hCam);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/qhy/Stdafx.h b/include/qhy/Stdafx.h
new file mode 100644
index 0000000..04a5670
--- /dev/null
+++ b/include/qhy/Stdafx.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include <windows.h>
+#include <stdio.h>
+#include <math.h>
+#include <process.h>
diff --git a/include/qhy/UsbdStatus.h b/include/qhy/UsbdStatus.h
new file mode 100644
index 0000000..f4f0dca
--- /dev/null
+++ b/include/qhy/UsbdStatus.h
@@ -0,0 +1,46 @@
+
+// Note: see usbdi.h in the DDK for the USBD_STATUS source definitions
+typedef LONG USBD_STATUS;
+#define USBD_STATUS(Status) ((ULONG)(Status) & 0x0FFFFFFFL)
+#define USBD_STATE(Status) ((ULONG)(Status) & 0xF0000000L)
+
+// HC status codes (Note: both error and stall bit are set)
+#define USBD_STATUS_SUCCESS ((USBD_STATUS)0x00000000L)
+#define USBD_STATUS_PENDING ((USBD_STATUS)0x40000000L)
+#define USBD_STATUS_HALTED ((USBD_STATUS)0xC0000000L)
+#define USBD_STATUS_ERROR ((USBD_STATUS)0x80000000L)
+
+#define USBD_STATUS_CRC ((USBD_STATUS)0xC0000001L)
+#define USBD_STATUS_BTSTUFF ((USBD_STATUS)0xC0000002L)
+#define USBD_STATUS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003L)
+#define USBD_STATUS_STALL_PID ((USBD_STATUS)0xC0000004L)
+#define USBD_STATUS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005L)
+#define USBD_STATUS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006L)
+#define USBD_STATUS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007L)
+#define USBD_STATUS_DATA_OVERRUN ((USBD_STATUS)0xC0000008L)
+#define USBD_STATUS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009L)
+#define USBD_STATUS_RESERVED1 ((USBD_STATUS)0xC000000AL)
+#define USBD_STATUS_RESERVED2 ((USBD_STATUS)0xC000000BL)
+#define USBD_STATUS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000CL)
+#define USBD_STATUS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000DL)
+#define USBD_STATUS_NOT_ACCESSED ((USBD_STATUS)0xC000000FL)
+#define USBD_STATUS_FIFO ((USBD_STATUS)0xC0000010L)
+
+#define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L)
+#define USBD_STATUS_NO_MEMORY ((USBD_STATUS)0x80000100L)
+#define USBD_STATUS_INVALID_URB_FUNCTION ((USBD_STATUS)0x80000200L)
+#define USBD_STATUS_INVALID_PARAMETER ((USBD_STATUS)0x80000300L)
+#define USBD_STATUS_ERROR_BUSY ((USBD_STATUS)0x80000400L)
+#define USBD_STATUS_REQUEST_FAILED ((USBD_STATUS)0x80000500L)
+#define USBD_STATUS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600L)
+#define USBD_STATUS_NO_BANDWIDTH ((USBD_STATUS)0x80000700L)
+#define USBD_STATUS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800L)
+#define USBD_STATUS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900L)
+#define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00L)
+#define USBD_STATUS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00L)
+#define USBD_STATUS_FRAME_CONTROL_OWNED ((USBD_STATUS)0xC0000C00L)
+#define USBD_STATUS_FRAME_CONTROL_NOT_OWNED ((USBD_STATUS)0xC0000D00L)
+#define USBD_STATUS_CANCELED ((USBD_STATUS)0x00010000L)
+#define USBD_STATUS_CANCELING ((USBD_STATUS)0x00020000L)
+
+
diff --git a/include/qhy/VersionNo.h b/include/qhy/VersionNo.h
new file mode 100644
index 0000000..46e31bb
--- /dev/null
+++ b/include/qhy/VersionNo.h
@@ -0,0 +1,26 @@
+/*
+ ## Cypress CyAPI C++ library version number header file (VersionNo.h)
+ ## =======================================================
+ ##
+ ## Copyright Cypress Semiconductor Corporation, 2009-2012,
+ ## All Rights Reserved
+ ## UNPUBLISHED, LICENSED SOFTWARE.
+ ##
+ ## CONFIDENTIAL AND PROPRIETARY INFORMATION
+ ## WHICH IS THE PROPERTY OF CYPRESS.
+ ##
+ ## Use of this file is governed
+ ## by the license agreement included in the file
+ ##
+ ## <install>/license/license.rtf
+ ##
+ ## where <install> is the Cypress software
+ ## install root directory path.
+ ##
+ ## =======================================================
+*/
+#define FILEVER 1,2,1,0
+#define PRODUCTVER 1,2,1,0
+#define STRFILEVER "1, 2, 1, 0"
+#define STRPRODUCTVER "1, 2, 1, 0"
+#define STRFILEVER_ASSENBLY "1.2.1.0"
diff --git a/include/qhy/chatty.h b/include/qhy/chatty.h
new file mode 100644
index 0000000..56f4f4a
--- /dev/null
+++ b/include/qhy/chatty.h
@@ -0,0 +1,75 @@
+// chatty.h
+// enable/disable printing debug information from individual files
+// written by Jan Soldan
+
+
+#ifndef _CHATTY_H_
+#define _CHATTY_H_
+
+//#define QHY_LOGGER
+
+#ifdef QHY_LOGGER
+
+#define CHATTY_CMOSDLL
+//#define CHATTY_CYUSB
+//#define CHATTY_UNLOCK_IMAGE_QUEUE
+//#define CHATTY_DOWNLOAD_FX3
+
+#define CHATTY_X2CAMERA
+#define CHATTY_QHYCCD
+#define CHATTY_QHYCAM
+#define CHATTY_QHYBASE
+
+#define CHATTY_QHY5IIBASE
+#define CHATTY_QHY5LIIBASE
+#define CHATTY_QHY5LIIM
+#define CHATTY_QHY5LIIC
+#define CHATTY_QHY5TIIC
+#define CHATTY_QHY5PIIC
+
+#define CHATTY_QHY10
+
+#define CHATTY_QHY5IIIBASE
+#define CHATTY_QHY5IIICOOLBASE
+#define CHATTY_QHY5IIIDDRCOOLBASE
+
+#define CHATTY_QHY5III128BASE
+#define CHATTY_QHY128C
+
+#define CHATTY_QHY5III163BASE
+#define CHATTY_QHY5III165BASE
+#define CHATTY_QHY5III168BASE
+
+#define CHATTY_QHY5III174BASE
+#define CHATTY_QHY5III174C
+#define CHATTY_QHY5III174M
+
+#define CHATTY_QHY5III178BASE
+#define CHATTY_QHY5III178COOLBASE
+#define CHATTY_QHY5III178C
+
+#define CHATTY_QHY5III183BASE
+#define CHATTY_QHY183
+#define CHATTY_QHY183C
+
+#define CHATTY_QHY5III185BASE
+#define CHATTY_QHY5III185C
+
+#define CHATTY_QHY5III224BASE
+#define CHATTY_QHY5III224COOLBASE
+#define CHATTY_QHY5III224C
+
+#define CHATTY_QHY5III247BASE
+
+#define CHATTY_QHY5III290BASE
+#define CHATTY_QHY5III290COOLBASE
+#define CHATTY_QHY5III290C
+#define CHATTY_QHY5III290M
+
+#define CHATTY_QHY5III367BASE
+
+#endif // QHY_LOGGER
+
+#endif // _CHATTY_H_
+
+
diff --git a/include/qhy/cjson.h b/include/qhy/cjson.h
new file mode 100644
index 0000000..b94cb14
--- /dev/null
+++ b/include/qhy/cjson.h
@@ -0,0 +1,156 @@
+/*
+ Copyright (c) 2009 Dave Gamble
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+#include "qhyccdstruct.h"
+
+#ifdef WIN32
+
+#else
+#include "stddef.h"
+#endif
+
+#ifndef cJSON__h
+#define cJSON__h
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* cJSON Types: */
+#define cJSON_False 0
+#define cJSON_True 1
+#define cJSON_NULL 2
+#define cJSON_Number 3
+#define cJSON_String 4
+#define cJSON_Array 5
+#define cJSON_Object 6
+
+#define cJSON_IsReference 256
+#define cJSON_StringIsConst 512
+
+/* The cJSON structure: */
+typedef struct cJSON {
+ struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
+ struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
+
+ int type; /* The type of the item, as above. */
+
+ char *valuestring; /* The item's string, if type==cJSON_String */
+ int valueint; /* The item's number, if type==cJSON_Number */
+ double valuedouble; /* The item's number, if type==cJSON_Number */
+
+ char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
+} cJSON;
+
+typedef struct cJSON_Hooks {
+ void *(*malloc_fn)(size_t sz);
+ void (*free_fn)(void *ptr);
+} cJSON_Hooks;
+
+/* Supply malloc, realloc and free functions to cJSON */
+extern void cJSON_InitHooks(cJSON_Hooks* hooks);
+
+
+/* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */
+extern cJSON *cJSON_Parse(const char *value);
+/* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */
+extern char *cJSON_Print(cJSON *item);
+/* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */
+extern char *cJSON_PrintUnformatted(cJSON *item);
+/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
+extern char *cJSON_PrintBuffered(cJSON *item,int prebuffer,int fmt);
+/* Delete a cJSON entity and all subentities. */
+extern void cJSON_Delete(cJSON *c);
+
+/* Returns the number of items in an array (or object). */
+extern int cJSON_GetArraySize(cJSON *array);
+/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */
+extern cJSON *cJSON_GetArrayItem(cJSON *array,int item);
+/* Get item "string" from object. Case insensitive. */
+extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);
+
+/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
+extern const char *cJSON_GetErrorPtr(void);
+
+/* These calls create a cJSON item of the appropriate type. */
+extern cJSON *cJSON_CreateNull(void);
+extern cJSON *cJSON_CreateTrue(void);
+extern cJSON *cJSON_CreateFalse(void);
+extern cJSON *cJSON_CreateBool(int b);
+extern cJSON *cJSON_CreateNumber(double num);
+extern cJSON *cJSON_CreateString(const char *string);
+extern cJSON *cJSON_CreateArray(void);
+extern cJSON *cJSON_CreateObject(void);
+
+/* These utilities create an Array of count items. */
+extern cJSON *cJSON_CreateIntArray(const int *numbers,int count);
+extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count);
+extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count);
+extern cJSON *cJSON_CreateStringArray(const char **strings,int count);
+
+/* Append item to the specified array/object. */
+extern void cJSON_AddItemToArray(cJSON *array, cJSON *item);
+extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
+extern void cJSON_AddItemToObjectCS(cJSON *object,const char *string,cJSON *item); /* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object */
+/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
+extern void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
+extern void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item);
+
+/* Remove/Detatch items from Arrays/Objects. */
+extern cJSON *cJSON_DetachItemFromArray(cJSON *array,int which);
+extern void cJSON_DeleteItemFromArray(cJSON *array,int which);
+extern cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string);
+extern void cJSON_DeleteItemFromObject(cJSON *object,const char *string);
+
+/* Update array items. */
+extern void cJSON_InsertItemInArray(cJSON *array,int which,cJSON *newitem); /* Shifts pre-existing items to the right. */
+extern void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem);
+extern void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
+
+/* Duplicate a cJSON item */
+extern cJSON *cJSON_Duplicate(cJSON *item,int recurse);
+/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
+need to be released. With recurse!=0, it will duplicate any children connected to the item.
+The item->next and ->prev pointers are always zero on return from Duplicate. */
+
+/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
+extern cJSON *cJSON_ParseWithOpts(const char *value,const char **return_parse_end,int require_null_terminated);
+
+extern void cJSON_Minify(char *json);
+
+/* Macros for creating things quickly. */
+#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())
+#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
+#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
+#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
+#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
+#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
+
+/* When assigning an integer value, it needs to be propagated to valuedouble too. */
+#define cJSON_SetIntValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val))
+#define cJSON_SetNumberValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/qhy/cmosdll.h b/include/qhy/cmosdll.h
new file mode 100644
index 0000000..8ace907
--- /dev/null
+++ b/include/qhy/cmosdll.h
@@ -0,0 +1,69 @@
+// The following ifdef block is the standard way of creating macros which make exporting
+// from a DLL simpler. All files within this DLL are compiled with the CMOSDLL_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see
+// CMOSDLL_API functions as being imported from a DLL, whereas this DLL sees symbols
+// defined with this macro as being exported.
+
+
+#include "qhyccdstruct.h"
+
+#ifdef WIN32
+
+#include "stdint.h"
+#include "CyAPI.h"
+#include <process.h>
+
+// live interface
+int32_t InitAsyQCamLive(CCyUSBDevice *Camera, uint32_t x, uint32_t y, uint32_t depth, uint32_t frameSize);
+void StopAsyQCamLive(CCyUSBDevice *Camera);
+void BeginAsyQCamLive(CCyUSBDevice *Camera);
+uint32_t ReadAsyQCamLiveFrame(CCyUSBDevice *Camera, uint8_t *pBuffer, int32_t *pFrameFlag);
+
+// other functions
+void SetTransferSize(int length);
+void InitAsyTransfer(CCyUSBDevice *Camera, int framesize);
+void StartSingleExposure(CCyUSBDevice *Camera);
+void StartLiveExposure(CCyUSBDevice *Camera);
+void StopCapturing(CCyUSBDevice *Camera);
+DWORD IsExposing();
+DWORD ReadAsySingleFrame(PUCHAR pBuffer , DWORD size, int *pFrameFlag);
+
+#else // Linux & Mac
+
+#include <stdint.h>
+
+// live interface
+int32_t InitAsyQCamLive(qhyccd_handle *pDevHandle, uint32_t x, uint32_t y, uint32_t depth, uint32_t frameSize);
+bool BeginAsyQCamLive(qhyccd_handle *pDevHandle);
+void StopAsyQCamLive(qhyccd_handle *pDevHandle);
+uint32_t ReadAsyQCamLiveFrame(qhyccd_handle *pDevHandle, uint8_t *pBuffer, int32_t *pFrameFlag);
+uint32_t ReadAsyQCamLiveFrame(qhyccd_handle *pDevHandle, uint8_t *pBuffer, int32_t *pFrameFlag, UnlockImageQueue *pImageQueue);
+uint32_t ClearEndpoint(qhyccd_handle *pDevHandle);
+uint32_t ProcessAllPendingTransfers(qhyccd_handle *pDevHandle);
+uint32_t CancelAllPendingTransfers(qhyccd_handle *pDevHandle);
+void asyImageDataCallBack(struct libusb_transfer *transfer);
+
+// other functions
+void SetTransferSize(int length);
+void InitAsyTransfer(qhyccd_handle *pDevHandle, uint32_t frameSize);
+void ReleaseAsyTransfer(qhyccd_handle *pDevHandle);
+void StartSingleExposure(qhyccd_handle *pDevHandle);
+void StartLiveExposure(qhyccd_handle *pDevHandle);
+void StopCapturing(qhyccd_handle *pDevHandle);
+uint32_t IsExposing();
+uint32_t ReadAsySingleFrame(uint8_t *pBuffer, uint32_t size, int *pFrameFlag);
+
+void SetThreadExitFlag(int idx, bool val);
+bool IsThreadExitFlag(int idx);
+
+void IncrementEventCount(int idx);
+void DecrementEventCount(int idx);
+void ClearEventCount(int idx);
+int GetEventCount(int idx);
+
+void SetFirstExposureFlag(int idx, bool value);
+bool IsFirstExpousureFlag(int idx);
+
+#endif // WIN32
+
diff --git a/include/qhy/cyioctl.h b/include/qhy/cyioctl.h
new file mode 100644
index 0000000..ee6ba72
--- /dev/null
+++ b/include/qhy/cyioctl.h
@@ -0,0 +1,213 @@
+/*
+ ## Cypress CyAPI C++ library IOCTL defination header file (cyioctl.h)
+ ## =======================================================
+ ##
+ ## Copyright Cypress Semiconductor Corporation, 2009-2012,
+ ## All Rights Reserved
+ ## UNPUBLISHED, LICENSED SOFTWARE.
+ ##
+ ## CONFIDENTIAL AND PROPRIETARY INFORMATION
+ ## WHICH IS THE PROPERTY OF CYPRESS.
+ ##
+ ## Use of this file is governed
+ ## by the license agreement included in the file
+ ##
+ ## <install>/license/license.rtf
+ ##
+ ## where <install> is the Cypress software
+ ## install root directory path.
+ ##
+ ## =======================================================
+*/
+#ifndef __IOCTL_H__
+#define __IOCTL_H__
+
+
+#ifndef DRIVER
+
+#ifndef CTL_CODE
+#include <devioctl.h>
+#endif
+
+#ifndef BM_REQUEST_TYPE
+#include "usb200.h"
+#endif
+
+#include <PSHPACK1.H>
+
+#define DIR_HOST_TO_DEVICE 0
+#define DIR_DEVICE_TO_HOST 1
+
+#define DEVICE_SPEED_UNKNOWN 0x00000000
+#define DEVICE_SPEED_LOW_FULL 0x00000001
+#define DEVICE_SPEED_HIGH 0x00000002
+#define DEVICE_SPEED_SUPER 0x00000004
+
+typedef struct _WORD_SPLIT {
+ UCHAR lowByte;
+ UCHAR hiByte;
+} WORD_SPLIT, *PWORD_SPLIT;
+
+typedef struct _BM_REQ_TYPE {
+ UCHAR Recipient:2;
+ UCHAR Reserved:3;
+ UCHAR Type:2;
+ UCHAR Direction:1;
+} BM_REQ_TYPE, *PBM_REQ_TYPE;
+
+typedef struct _SETUP_PACKET {
+
+ union {
+ BM_REQ_TYPE bmReqType;
+ UCHAR bmRequest;
+ };
+
+ UCHAR bRequest;
+
+ union {
+ WORD_SPLIT wVal;
+ USHORT wValue;
+ };
+
+ union {
+ WORD_SPLIT wIndx;
+ USHORT wIndex;
+ };
+
+ union {
+ WORD_SPLIT wLen;
+ USHORT wLength;
+ };
+
+ ULONG ulTimeOut;
+
+} SETUP_PACKET, *PSETUP_PACKET;
+
+#define USB_ISO_ID 0x4945
+#define USB_ISO_CMD_ASAP 0x8000
+#define USB_ISO_CMD_CURRENT_FRAME 0x8001
+#define USB_ISO_CMD_SET_FRAME 0x8002
+
+typedef struct _ISO_ADV_PARAMS {
+
+ USHORT isoId;
+ USHORT isoCmd;
+
+ ULONG ulParam1;
+ ULONG ulParam2;
+
+} ISO_ADV_PARAMS, *PISO_ADV_PARAMS;
+
+typedef struct _ISO_PACKET_INFO {
+ ULONG Status;
+ ULONG Length;
+} ISO_PACKET_INFO, *PISO_PACKET_INFO;
+
+
+typedef struct _SINGLE_TRANSFER {
+ union {
+ SETUP_PACKET SetupPacket;
+ ISO_ADV_PARAMS IsoParams;
+ };
+
+ UCHAR reserved;
+
+ UCHAR ucEndpointAddress;
+ ULONG NtStatus;
+ ULONG UsbdStatus;
+ ULONG IsoPacketOffset;
+ ULONG IsoPacketLength;
+ ULONG BufferOffset;
+ ULONG BufferLength;
+} SINGLE_TRANSFER, *PSINGLE_TRANSFER;
+
+#endif // #ifndef DRIVER
+
+typedef struct _SET_TRANSFER_SIZE_INFO {
+ UCHAR EndpointAddress;
+ ULONG TransferSize;
+} SET_TRANSFER_SIZE_INFO, *PSET_TRANSFER_SIZE_INFO;
+
+
+//
+// Macro to extract function out of the device io control code
+//
+#ifdef WIN_98_DDK
+#define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0xffff0000)) >> 16)
+#endif
+#define FUNCTION_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0x00003FFC)) >> 2)
+#define ACCESS_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0x000C0000)) >> 14)
+//#define METHOD_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0x00000003)))
+
+
+#define IOCTL_ADAPT_INDEX 0x0000
+
+// Get the driver version
+#define IOCTL_ADAPT_GET_DRIVER_VERSION CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Get the current USBDI version
+#define IOCTL_ADAPT_GET_USBDI_VERSION CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Get the current device alt interface settings from driver
+#define IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Set the device interface and alt interface setting
+#define IOCTL_ADAPT_SELECT_INTERFACE CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Get device address from driver
+#define IOCTL_ADAPT_GET_ADDRESS CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Get number of endpoints for current interface and alt interface setting from driver
+#define IOCTL_ADAPT_GET_NUMBER_ENDPOINTS CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Get the current device power state
+#define IOCTL_ADAPT_GET_DEVICE_POWER_STATE CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Set the device power state
+#define IOCTL_ADAPT_SET_DEVICE_POWER_STATE CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Send a raw packet to endpoint 0
+#define IOCTL_ADAPT_SEND_EP0_CONTROL_TRANSFER CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Send/receive data to/from nonep0
+#define IOCTL_ADAPT_SEND_NON_EP0_TRANSFER CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Simulate a disconnect/reconnect
+#define IOCTL_ADAPT_CYCLE_PORT CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Reset the pipe
+#define IOCTL_ADAPT_RESET_PIPE CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Reset the device
+#define IOCTL_ADAPT_RESET_PARENT_PORT CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Get the current transfer size of an endpoint (in number of bytes)
+#define IOCTL_ADAPT_GET_TRANSFER_SIZE CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+13, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Set the transfer size of an endpoint (in number of bytes)
+#define IOCTL_ADAPT_SET_TRANSFER_SIZE CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+14, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Return the name of the device
+#define IOCTL_ADAPT_GET_DEVICE_NAME CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Return the "Friendly Name" of the device
+#define IOCTL_ADAPT_GET_FRIENDLY_NAME CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+16, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Abort all outstanding transfers on the pipe
+#define IOCTL_ADAPT_ABORT_PIPE CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+17, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Send/receive data to/from nonep0 w/ direct buffer acccess (no buffering)
+#define IOCTL_ADAPT_SEND_NON_EP0_DIRECT CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+18, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+// Return device speed
+#define IOCTL_ADAPT_GET_DEVICE_SPEED CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+19, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Get the current USB frame number
+#define IOCTL_ADAPT_GET_CURRENT_FRAME CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_ADAPT_INDEX+20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define NUMBER_OF_ADAPT_IOCTLS 21 // Last IOCTL_ADAPT_INDEX + 1
+
+
+#include <POPPACK.H>
+
+#endif // __IOCTL_H__
diff --git a/include/qhy/d5100.h b/include/qhy/d5100.h
new file mode 100644
index 0000000..321e189
--- /dev/null
+++ b/include/qhy/d5100.h
@@ -0,0 +1,38 @@
+/// @source Client.h
+/// @description Public interface for class Client.
+// See licensing information in the file README.TXT.
+
+// -----------------------------------------------------------------------------
+#ifndef __CLIENT_H__
+#define __CLIENT_H__
+// -----------------------------------------------------------------------------
+
+// includes
+
+#include <stdlib.h> // getenv (client_setLogDir)
+
+// -----------------------------------------------------------------------------
+#ifdef __cplusplus
+extern "C" {
+#endif
+// -----------------------------------------------------------------------------
+
+extern __declspec(dllexport) void SetIPAddress(char *address);
+extern __declspec(dllexport) int init_Cam(void *information);
+extern __declspec(dllexport) int set_Cam(int sc1,int sc2,int sc3);
+extern __declspec(dllexport) int start_Cap();
+extern __declspec(dllexport) int get_Img(unsigned char *ImageData);
+extern __declspec(dllexport) int reset_Cam();
+extern __declspec(dllexport) int cam_PowerOff();
+extern __declspec(dllexport) int get_PackegeNum(unsigned int *num);
+extern __declspec(dllexport) int getOnePackege(unsigned char *onePackege);
+extern __declspec(dllexport) int free_Cam();
+
+
+// -----------------------------------------------------------------------------
+#ifdef __cplusplus
+} // #ifdef __cplusplus
+#endif
+// -----------------------------------------------------------------------------
+#endif // __CLIENT_H__
+// -----------------------------------------------------------------------------
diff --git a/include/qhy/debugview.h b/include/qhy/debugview.h
new file mode 100644
index 0000000..dd07bc4
--- /dev/null
+++ b/include/qhy/debugview.h
@@ -0,0 +1,3 @@
+
+
+void OutputDebugPrintf(const char * strOutputString,...); \ No newline at end of file
diff --git a/include/qhy/dithercontrol.h b/include/qhy/dithercontrol.h
new file mode 100644
index 0000000..5661d82
--- /dev/null
+++ b/include/qhy/dithercontrol.h
@@ -0,0 +1,42 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file dithercontrol.h
+ * @brief QHYCCD SDK control PHD2 dither
+ */
+
+#include "qhyccdstruct.h"
+
+
+#ifndef __QHYCCDDITHERDEF_H__
+#define __QHYCCDDITHERDEF_H__
+
+EXPORTC uint32_t STDCALL CheckPHD2Status(char *retstr);
+EXPORTC uint32_t STDCALL Connect2PHD2();
+EXPORTC uint32_t STDCALL DisConnect2PHD2();
+EXPORTC uint32_t STDCALL ControlPHD2Dither(uint32_t level,double settle);
+EXPORTC uint32_t STDCALL PausePHD2Dither();
+
+#endif \ No newline at end of file
diff --git a/include/qhy/download_fx2.h b/include/qhy/download_fx2.h
new file mode 100644
index 0000000..f3e4097
--- /dev/null
+++ b/include/qhy/download_fx2.h
@@ -0,0 +1,6 @@
+#ifndef _DOWNLOAD_FX2_
+#define _DOWNLOAD_FX2_
+
+int fx2_ram_download(libusb_device_handle *handle, char *filename, unsigned char vendor_command);
+
+#endif
diff --git a/include/qhy/download_fx3.h b/include/qhy/download_fx3.h
new file mode 100644
index 0000000..28e634d
--- /dev/null
+++ b/include/qhy/download_fx3.h
@@ -0,0 +1,6 @@
+#ifndef _DOWNLOAD_FX3_
+#define _DOWNLOAD_FX3_
+
+int fx3_usbboot_download(libusb_device_handle *handle, char *filename);
+
+#endif
diff --git a/include/qhy/i2c-dev.h b/include/qhy/i2c-dev.h
new file mode 100644
index 0000000..c90556c
--- /dev/null
+++ b/include/qhy/i2c-dev.h
@@ -0,0 +1,341 @@
+/*
+ i2c-dev.h - i2c-bus driver, char device interface
+
+ Copyright (C) 1995-97 Simon G. Vogl
+ Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ MA 02110-1301 USA.
+*/
+
+/* $Id: i2c-dev.h 5361 2008-10-19 09:47:02Z khali $ */
+
+#ifndef LIB_I2CDEV_H
+#define LIB_I2CDEV_H
+
+#include <linux/types.h>
+#include <sys/ioctl.h>
+
+
+/* -- i2c.h -- */
+
+
+/*
+ * I2C Message - used for pure i2c transaction, also from /dev interface
+ */
+struct i2c_msg
+{
+ __u16 addr; /* slave address */
+ unsigned short flags;
+#define I2C_M_TEN 0x10 /* we have a ten bit chip address */
+#define I2C_M_RD 0x01
+#define I2C_M_NOSTART 0x4000
+#define I2C_M_REV_DIR_ADDR 0x2000
+#define I2C_M_IGNORE_NAK 0x1000
+#define I2C_M_NO_RD_ACK 0x0800
+ short len; /* msg length */
+ char *buf; /* pointer to msg data */
+};
+
+/* To determine what functionality is present */
+
+#define I2C_FUNC_I2C 0x00000001
+#define I2C_FUNC_10BIT_ADDR 0x00000002
+#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */
+#define I2C_FUNC_SMBUS_PEC 0x00000008
+#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */
+#define I2C_FUNC_SMBUS_QUICK 0x00010000
+#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000
+#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000
+#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000
+#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
+#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000
+#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
+#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000
+#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
+#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
+#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */
+#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */
+
+#define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \
+ I2C_FUNC_SMBUS_WRITE_BYTE)
+#define I2C_FUNC_SMBUS_BYTE_DATA (I2C_FUNC_SMBUS_READ_BYTE_DATA | \
+ I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
+#define I2C_FUNC_SMBUS_WORD_DATA (I2C_FUNC_SMBUS_READ_WORD_DATA | \
+ I2C_FUNC_SMBUS_WRITE_WORD_DATA)
+#define I2C_FUNC_SMBUS_BLOCK_DATA (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
+ I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
+#define I2C_FUNC_SMBUS_I2C_BLOCK (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
+ I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
+
+/* Old name, for compatibility */
+#define I2C_FUNC_SMBUS_HWPEC_CALC I2C_FUNC_SMBUS_PEC
+
+/*
+ * Data for SMBus Messages
+ */
+#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */
+#define I2C_SMBUS_I2C_BLOCK_MAX 32 /* Not specified but we use same structure */
+union i2c_smbus_data
+{
+ __u8 byte;
+ __u16 word;
+ __u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
+ /* and one more for PEC */
+};
+
+/* smbus_access read or write markers */
+#define I2C_SMBUS_READ 1
+#define I2C_SMBUS_WRITE 0
+
+/* SMBus transaction types (size parameter in the above functions)
+ Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
+#define I2C_SMBUS_QUICK 0
+#define I2C_SMBUS_BYTE 1
+#define I2C_SMBUS_BYTE_DATA 2
+#define I2C_SMBUS_WORD_DATA 3
+#define I2C_SMBUS_PROC_CALL 4
+#define I2C_SMBUS_BLOCK_DATA 5
+#define I2C_SMBUS_I2C_BLOCK_BROKEN 6
+#define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */
+#define I2C_SMBUS_I2C_BLOCK_DATA 8
+
+
+/* ----- commands for the ioctl like i2c_command call:
+ * note that additional calls are defined in the algorithm and hw
+ * dependent layers - these can be listed here, or see the
+ * corresponding header files.
+ */
+/* -> bit-adapter specific ioctls */
+#define I2C_RETRIES 0x0701 /* number of times a device address */
+/* should be polled when not */
+/* acknowledging */
+#define I2C_TIMEOUT 0x0702 /* set timeout - call with int */
+
+
+/* this is for i2c-dev.c */
+#define I2C_SLAVE 0x0703 /* Change slave address */
+/* Attn.: Slave address is 7 or 10 bits */
+#define I2C_SLAVE_FORCE 0x0706 /* Change slave address */
+/* Attn.: Slave address is 7 or 10 bits */
+/* This changes the address, even if it */
+/* is already taken! */
+#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */
+
+#define I2C_FUNCS 0x0705 /* Get the adapter functionality */
+#define I2C_RDWR 0x0707 /* Combined R/W transfer (one stop only)*/
+#define I2C_PEC 0x0708 /* != 0 for SMBus PEC */
+
+#define I2C_SMBUS 0x0720 /* SMBus-level access */
+
+/* -- i2c.h -- */
+
+
+/* Note: 10-bit addresses are NOT supported! */
+
+/* This is the structure as used in the I2C_SMBUS ioctl call */
+struct i2c_smbus_ioctl_data
+{
+ char read_write;
+ __u8 command;
+ int size;
+ union i2c_smbus_data *data;
+};
+
+/* This is the structure as used in the I2C_RDWR ioctl call */
+struct i2c_rdwr_ioctl_data
+{
+ struct i2c_msg *msgs; /* pointers to i2c_msgs */
+ int nmsgs; /* number of i2c_msgs */
+};
+
+
+static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command,
+ int size, union i2c_smbus_data *data)
+{
+ struct i2c_smbus_ioctl_data args;
+
+ args.read_write = read_write;
+ args.command = command;
+ args.size = size;
+ args.data = data;
+ return ioctl(file, I2C_SMBUS, &args);
+}
+
+
+static inline __s32 i2c_smbus_write_quick(int file, __u8 value)
+{
+ return i2c_smbus_access(file, value, 0, I2C_SMBUS_QUICK, NULL);
+}
+
+static inline __s32 i2c_smbus_read_byte(int file)
+{
+ union i2c_smbus_data data;
+ if (i2c_smbus_access(file, I2C_SMBUS_READ, 0, I2C_SMBUS_BYTE, &data))
+ return -1;
+ else
+ return 0x0FF & data.byte;
+}
+
+static inline __s32 i2c_smbus_write_byte(int file, __u8 value)
+{
+ return i2c_smbus_access(file, I2C_SMBUS_WRITE, value,
+ I2C_SMBUS_BYTE, NULL);
+}
+
+static inline __s32 i2c_smbus_read_byte_data(int file, __u8 command)
+{
+ union i2c_smbus_data data;
+ if (i2c_smbus_access(file, I2C_SMBUS_READ, command,
+ I2C_SMBUS_BYTE_DATA, &data))
+ return -1;
+ else
+ return 0x0FF & data.byte;
+}
+
+static inline __s32 i2c_smbus_write_byte_data(int file, __u8 command,
+ __u8 value)
+{
+ union i2c_smbus_data data;
+ data.byte = value;
+ return i2c_smbus_access(file, I2C_SMBUS_WRITE, command,
+ I2C_SMBUS_BYTE_DATA, &data);
+}
+
+static inline __s32 i2c_smbus_read_word_data(int file, __u8 command)
+{
+ union i2c_smbus_data data;
+ if (i2c_smbus_access(file, I2C_SMBUS_READ, command,
+ I2C_SMBUS_WORD_DATA, &data))
+ return -1;
+ else
+ return 0x0FFFF & data.word;
+}
+
+static inline __s32 i2c_smbus_write_word_data(int file, __u8 command,
+ __u16 value)
+{
+ union i2c_smbus_data data;
+ data.word = value;
+ return i2c_smbus_access(file, I2C_SMBUS_WRITE, command,
+ I2C_SMBUS_WORD_DATA, &data);
+}
+
+static inline __s32 i2c_smbus_process_call(int file, __u8 command, __u16 value)
+{
+ union i2c_smbus_data data;
+ data.word = value;
+ if (i2c_smbus_access(file, I2C_SMBUS_WRITE, command,
+ I2C_SMBUS_PROC_CALL, &data))
+ return -1;
+ else
+ return 0x0FFFF & data.word;
+}
+
+
+/* Returns the number of read bytes */
+static inline __s32 i2c_smbus_read_block_data(int file, __u8 command,
+ __u8 *values)
+{
+ union i2c_smbus_data data;
+ int i;
+ if (i2c_smbus_access(file, I2C_SMBUS_READ, command,
+ I2C_SMBUS_BLOCK_DATA, &data))
+ return -1;
+ else
+ {
+ for (i = 1; i <= data.block[0]; i++)
+ values[i-1] = data.block[i];
+ return data.block[0];
+ }
+}
+
+static inline __s32 i2c_smbus_write_block_data(int file, __u8 command,
+ __u8 length, __u8 *values)
+{
+ union i2c_smbus_data data;
+ int i;
+ if (length > 32)
+ length = 32;
+ for (i = 1; i <= length; i++)
+ data.block[i] = values[i-1];
+ data.block[0] = length;
+ return i2c_smbus_access(file, I2C_SMBUS_WRITE, command,
+ I2C_SMBUS_BLOCK_DATA, &data);
+}
+
+/* Returns the number of read bytes */
+/* Until kernel 2.6.22, the length is hardcoded to 32 bytes. If you
+ ask for less than 32 bytes, your code will only work with kernels
+ 2.6.23 and later. */
+static inline __s32 i2c_smbus_read_i2c_block_data(int file, __u8 command,
+ __u8 length, __u8 *values)
+{
+ union i2c_smbus_data data;
+ int i;
+
+ if (length > 32)
+ length = 32;
+ data.block[0] = length;
+ if (i2c_smbus_access(file, I2C_SMBUS_READ, command,
+ length == 32 ? I2C_SMBUS_I2C_BLOCK_BROKEN :
+ I2C_SMBUS_I2C_BLOCK_DATA, &data))
+ return -1;
+ else
+ {
+ for (i = 1; i <= data.block[0]; i++)
+ values[i-1] = data.block[i];
+ return data.block[0];
+ }
+}
+
+static inline __s32 i2c_smbus_write_i2c_block_data(int file, __u8 command,
+ __u8 length, __u8 *values)
+{
+ union i2c_smbus_data data;
+ int i;
+ if (length > 32)
+ length = 32;
+ for (i = 1; i <= length; i++)
+ data.block[i] = values[i-1];
+ data.block[0] = length;
+ return i2c_smbus_access(file, I2C_SMBUS_WRITE, command,
+ I2C_SMBUS_I2C_BLOCK_BROKEN, &data);
+}
+
+/* Returns the number of read bytes */
+static inline __s32 i2c_smbus_block_process_call(int file, __u8 command,
+ __u8 length, __u8 *values)
+{
+ union i2c_smbus_data data;
+ int i;
+ if (length > 32)
+ length = 32;
+ for (i = 1; i <= length; i++)
+ data.block[i] = values[i-1];
+ data.block[0] = length;
+ if (i2c_smbus_access(file, I2C_SMBUS_WRITE, command,
+ I2C_SMBUS_BLOCK_PROC_CALL, &data))
+ return -1;
+ else
+ {
+ for (i = 1; i <= data.block[0]; i++)
+ values[i-1] = data.block[i];
+ return data.block[0];
+ }
+}
+
+
+#endif /* LIB_I2CDEV_H */
diff --git a/include/qhy/i2c.h b/include/qhy/i2c.h
new file mode 100644
index 0000000..0861239
--- /dev/null
+++ b/include/qhy/i2c.h
@@ -0,0 +1,60 @@
+/*___________________________________________________
+ | _____ _____ _ _ _ |
+ | | __ \ | __ (_) | | | |
+ | | |__) |__ _ __ __ _ _ _| |__) || | ___ | |_ |
+ | | ___/ _ \ '_ \ / _` | | | | ___/ | |/ _ \| __| |
+ | | | | __/ | | | (_| | |_| | | | | | (_) | |_ |
+ | |_| \___|_| |_|\__, |\__,_|_| |_|_|\___/ \__| |
+ | __/ | |
+ | GNU/Linux based |___/ Multi-Rotor UAV Autopilot |
+ |___________________________________________________|
+
+ Threadsafe Linux I2C Interface
+
+ Copyright (C) 2013 Tobias Simon, Ilmenau University of Technology
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details. */
+
+
+#ifndef __I2C_H__
+#define __I2C_H__
+
+
+#include <stdint.h>
+#include <stddef.h>
+
+
+/* bus type definition: */
+typedef int i2c_bus_t;
+
+
+/* device type definition: */
+typedef struct
+{
+ i2c_bus_t *bus;
+ uint8_t addr;
+}
+i2c_dev_t;
+
+
+int i2c_bus_open(i2c_bus_t *bus, char *path);
+int i2c_bus_close(i2c_bus_t *bus);
+void i2c_dev_init(i2c_dev_t *dev, i2c_bus_t *bus, uint8_t addr);
+int i2c_xfer(i2c_dev_t *dev, uint8_t len_wr, uint8_t *wr_data, uint8_t len_rd, uint8_t *rd_data);
+int i2c_write(i2c_dev_t *dev, uint8_t val);
+int i2c_write_reg(i2c_dev_t *dev, uint8_t reg, uint8_t val);
+int i2c_read(i2c_dev_t *dev);
+int i2c_read_reg(i2c_dev_t *dev, uint8_t reg);
+int i2c_read_block_reg(i2c_dev_t *dev, uint8_t reg, uint8_t *buf, size_t len);
+
+
+#endif /* __I2C_H__ */
+
diff --git a/include/qhy/ic16803.h b/include/qhy/ic16803.h
new file mode 100644
index 0000000..0d4ae42
--- /dev/null
+++ b/include/qhy/ic16803.h
@@ -0,0 +1,509 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file ic16803.h
+ * @brief IC16803 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __IC16803DEF_H__
+#define __IC16803DEF_H__
+
+/**
+ * @brief IC16803 class define
+ *
+ * include all functions for IC16803
+ */
+class IC16803:public QHYBASE
+{
+public:
+ IC16803();
+ ~IC16803();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin33 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+ /** @fn virtual uint32_t SetInterCamSerialParam(qhyccd_handle *h,uint32_t opt)
+ @brief Set InterCam serial2 params
+ @param h camera control handle
+ @param opt the param
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetInterCamSerialParam(qhyccd_handle *h,uint32_t opt);
+
+ /** @fn virtual uint32_t InterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length)
+ @brief Send data to InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @param length the length to send
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length);
+
+
+ /** @fn virtual uint32_t InterCamSerialRX(qhyccd_handle *h,char *buf)
+ @brief Get data from InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @return
+ on success,return the data number \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamSerialRX(qhyccd_handle *h,char *buf);
+
+ /** @fn virtual uint32_t Send2OledFast(qhyccd_handle *h,char *buffer)
+ @brief send data to show on InterCam's OLED
+ @param h camera control handle
+ @param buffer buffer for data
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2OledFast(qhyccd_handle *h,uint8_t *buffer);
+
+ /** @fn uint32_t InterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff)
+ @brief turn off or turn on the InterCam's Oled
+ @param handle camera control handle
+ @param onoff on or off the oled \n
+ 1:on \n
+ 0:off \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff);
+
+ /** @fn uint32_t SetInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness)
+ @brief send data to show on InterCam's OLED
+ @param handle camera control handle
+ @param brightness the oled's brightness
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness);
+
+ uint32_t SendFourLine2InterCamOled(qhyccd_handle *handle,char *messagetemp,char *messageinfo,char *messagetime,char *messagemode);
+
+ /** @fn uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom)
+ @brief spilit the message to two line,send to camera
+ @param handle camera control handle
+ @param messageTop message for the oled's 1st line
+ @param messageBottom message for the oled's 2nd line
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom);
+
+ /**
+ @fn uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle,char *messageTop)
+ @brief spilit the message to two line,send to camera
+ @param handle camera control handle
+ @param messageTop message for all the oled
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle,char *messageTop);
+
+ /**
+ @fn uint32_t GetCameraStatus(qhyccd_handle *h,uint8_t *buf)
+ @brief Get camera status
+ @param h camera control handle
+ @param buf camera's status save space
+ @return
+ on success,return the camera statu \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCameraStatus(qhyccd_handle *h,uint8_t *buf);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief control color filter wheel
+ @param handle camera control handle
+ @param order order send to color filter wheel
+ @param length the order string length
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status)
+ @brief control camera's shutter
+ @param handle camera control handle
+ @param status the shutter status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status);
+
+ /**
+ @fn uint32_t GetShutterStatus(qhyccd_handle *handle)
+ @brief get the camera's shutter status
+ @param handle camera control handle
+ @return
+ on success,return status \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetShutterStatus(qhyccd_handle *handle);
+
+ uint32_t GetHumidity(qhyccd_handle *handle,double *hd);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+};
+#endif
+
diff --git a/include/qhy/ic8300.h b/include/qhy/ic8300.h
new file mode 100644
index 0000000..ce4043b
--- /dev/null
+++ b/include/qhy/ic8300.h
@@ -0,0 +1,75 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file ic8300.h
+ * @brief IC8300 class define
+ */
+
+#include "qhyabase.h"
+
+#ifndef __IC8300DEF_H__
+#define __IC8300DEF_H__
+
+/**
+ * @brief IC8300 class define
+ *
+ * include all functions for ic8300
+ */
+class IC8300:public QHYABASE
+{
+public:
+ IC8300();
+ ~IC8300();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+
+ uint32_t SetFocusSetting(qhyccd_handle *h, uint32_t focusCenterX, uint32_t focusCenterY);
+
+};
+#endif
+
diff --git a/include/qhy/img0h.h b/include/qhy/img0h.h
new file mode 100644
index 0000000..42d1fb9
--- /dev/null
+++ b/include/qhy/img0h.h
@@ -0,0 +1,284 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file img0h.h
+ * @brief IMG0H class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __IMG0HDEF_H__
+#define __IMG0HDEF_H__
+
+#define GUIDE_EAST 0x00010010 /* 0 RA+ */
+#define GUIDE_NORTH 0x00020020 /* 1 DEC+ */
+#define GUIDE_SOUTH 0x00020040 /* 2 DEC- */
+#define GUIDE_WEST 0x00010080 /* 3 RA- */
+
+/**
+ * @brief IMG0H class define
+ *
+ * include all functions for qhy7
+ */
+class IMG0H:public QHYBASE
+{
+public:
+ IMG0H();
+ ~IMG0H();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime)
+ @brief send the command to camera's guide port
+ @param h camera control handle
+ @param Direction RA DEC
+ @param PulseTime the time last for command
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime);
+
+ uint32_t ImgX;
+ uint32_t ImgY;
+ uint32_t ShowImgX;
+ uint32_t ShowImgY;
+ uint32_t ShowImgX_Start;
+ uint32_t ShowImgY_Start;
+};
+#endif
+
diff --git a/include/qhy/img132e.h b/include/qhy/img132e.h
new file mode 100644
index 0000000..0e95864
--- /dev/null
+++ b/include/qhy/img132e.h
@@ -0,0 +1,257 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file img132e.h
+ * @brief IMG132E class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __IMG132EDEF_H__
+#define __IMG132EDEF_H__
+
+#define GUIDE_EAST 0x00010010 /* 0 RA+ */
+#define GUIDE_NORTH 0x00020020 /* 1 DEC+ */
+#define GUIDE_SOUTH 0x00020040 /* 2 DEC- */
+#define GUIDE_WEST 0x00010080 /* 3 RA- */
+
+/**
+ * @brief IMG132E class define
+ *
+ * include all functions for img132e
+ */
+class IMG132E:public QHYBASE
+{
+public:
+ IMG132E();
+ ~IMG132E();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double red);
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double red);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+
+ void w_i2c_imx035(qhyccd_handle *h,unsigned char addr,unsigned char dat);
+
+ uint32_t ReservedFunction(uint32_t width,uint32_t height,uint32_t bpp,uint32_t channels,uint8_t *ImgData);
+
+ uint32_t ImgX;
+ uint32_t ImgY;
+ uint32_t ShowImgX;
+ uint32_t ShowImgY;
+ uint32_t ShowImgX_Start;
+ uint32_t ShowImgY_Start;
+};
+#endif
+
diff --git a/include/qhy/img2p.h b/include/qhy/img2p.h
new file mode 100644
index 0000000..dddb970
--- /dev/null
+++ b/include/qhy/img2p.h
@@ -0,0 +1,335 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file img2p.h
+ * @brief ING2P class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __IMG2PDEF_H__
+#define __IMG2PDEF_H__
+
+/**
+ * @brief IC8300 class define
+ *
+ * include all functions for ic8300
+ */
+class IMG2P:public QHYBASE
+{
+public:
+ IMG2P();
+ ~IMG2P();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length.
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopSingleExposure(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+};
+#endif
+
diff --git a/include/qhy/log4z.h b/include/qhy/log4z.h
new file mode 100644
index 0000000..a1995f1
--- /dev/null
+++ b/include/qhy/log4z.h
@@ -0,0 +1,630 @@
+/*
+ * Log4z License
+ * -----------
+ *
+ * Log4z is licensed under the terms of the MIT license reproduced below.
+ * This means that Log4z is free software and can be used for both academic
+ * and commercial purposes at absolutely no cost.
+ *
+ *
+ * ===============================================================================
+ *
+ * Copyright (C) 2010-2014 YaweiZhang <yawei_zhang@foxmail.com>.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * ===============================================================================
+ *
+ * (end of COPYRIGHT)
+ */
+
+
+/*
+ * AUTHORS: YaweiZhang <yawei_zhang@foxmail.com>
+ * VERSION: 3.0.0
+ * PURPOSE: A lightweight library for error reporting and logging to file and screen .
+ * CREATION: 2010.10.4
+ * LCHANGE: 2014.12.19
+ * LICENSE: Expat/MIT License, See Copyright Notice at the begin of this file.
+ */
+
+
+/*
+ * contact me:
+ * tencent qq group: 19811947
+ * mail: yawei_zhang@foxmail.com
+ */
+
+
+/*
+ * UPDATES LOG
+ *
+ * VERSION 0.1.0 <DATE: 2010.10.4>
+ * create the first project.
+ * It support put log to screen and files,
+ * support log level, support one day one log file.
+ * support multi-thread, cross-platform.
+ *
+ * VERSION .... <DATE: ...>
+ * ...
+ *
+ * VERSION 0.9.0 <DATE: 2012.12.24>
+ * support config files.
+ * support color text in screen.
+ * support multiple output to different files.
+ *
+ * VERSION 1.0.0 <DATE: 2012.12.29>
+ * support comments in the config file.
+ * add a advanced demo in the ./project
+ * fix some details.
+ *
+ * VERSION 1.0.1 <DATE: 2013.01.01>
+ * change and add some Comments in the log4z
+ * simplify the 'fast_test' demo projects.
+ *
+ * VERSION 1.1.0 <DATE: 2013.01.24>
+ * the method Start will wait for the logger thread started.
+ * config and add method change.
+ * namespace change.
+ *
+ * VERSION 1.1.1 <DATE: 2013.02.23>
+ * add status info method.
+ * optimize.
+ *
+ * VERSION 1.2.0 <DATE: 2013.04.05>
+ * add stress test demo
+ * rewrite Stream module,better performance.
+ *
+ * VERSION 1.2.1 <DATE: 2013.04.13>
+ * fixed type name 'long' stream format on 64/32 operation system.
+ * logger will not loss any log on process normal exit.
+ *
+ * VERSION 2.0.0 <DATE: 2013.04.25>
+ * new interface:
+ * merge some Main interface and Dynamic interface
+ * add Change Logger Attribute method by thread-safe
+ * new config design.
+ * log file name append process id.
+ *
+ * VERSION 2.1 <DATE: 2013.05.22>
+ * support binary text output
+ * rewrite write file module, support vs2005 open Chinese characters path
+ *
+ * VERSION 2.2 <DATE: 2013.07.08>
+ * optimized binary stream output view
+ * support wchar * string.
+ *
+ * VERSION 2.3 <DATE: 2013.08.29>
+ * adjust output file named.
+ * support different month different directory.
+ * adjust some detail.
+ *
+ * VERSION 2.4 <DATE: 2013.10.07>
+ * support rolling log file.
+ * support hot update configure
+ * used precision time in log.
+ * micro set default logger attribute
+ * fix tls bug in windows xp dll
+ *
+ * VERSION 2.5 <DATE: 2014.03.25>
+ * screen output can choice synchronous or not
+ * fix sometimes color will disorder on windows.
+ * eliminate some compiler warning
+ * fix sem_timewait in linux
+ * add format-style method at input log, cannot support vs2003 and VC6.
+ * fix WCHAR String cannot output
+ * optimize std::string, binary log input, and support std::wstring.
+ * clean code, better readability
+ *
+ * VERSION 2.6 <DATE: 2014.08.19>
+ * add PrePushLog
+ * better performance when log is filter out.
+ * interface replace std::string because it's in shared library is unsafe.
+ * add log level 'trace'
+ *
+ * VERSION 2.6.1 <DATE: 2014.08.22>
+ * fix bug from defined _MSC_VER
+ *
+ * VERSION 2.7 <DATE: 2014.09.21>
+ * compatible mac machine, now log4z can working in linux/windows/mac.
+ *
+ * VERSION 2.8 <DATE: 2014.09.27>
+ * support synchronous written to file and thread-safe
+ * fix compatibility on MinGW. a constant value suffix.
+ * ignore utf-8 file BOM when load configure file
+ * use macro WIN32_LEAN_AND_MEAN replace head file winsock2.h
+ * new naming notations
+ *
+ * VERSION 3.0 <DATE: 2014.12.19>
+ * new naming notations
+ * support for reading config from a string.
+ * remove all TLS code, used dispatch_semaphore in apple OS.
+ * support system: windows, linux, mac, iOS
+ *
+ */
+
+
+#pragma once
+#ifndef _ZSUMMER_LOG4Z_H_
+#define _ZSUMMER_LOG4Z_H_
+
+#include <string>
+#include <sstream>
+#include <errno.h>
+#include <stdio.h>
+#ifdef WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <Windows.h>
+#endif
+
+//! logger ID type. DO NOT TOUCH
+typedef int LoggerId;
+
+//! the invalid logger id. DO NOT TOUCH
+const int LOG4Z_INVALID_LOGGER_ID = -1;
+
+//! the main logger id. DO NOT TOUCH
+//! can use this id to set the main logger's attribute.
+//! example:
+//! ILog4zManager::getPtr()->setLoggerLevel(LOG4Z_MAIN_LOGGER_ID, LOG_LEVEL_WARN);
+//! ILog4zManager::getPtr()->setLoggerDisplay(LOG4Z_MAIN_LOGGER_ID, false);
+const int LOG4Z_MAIN_LOGGER_ID = 0;
+
+//! the main logger name. DO NOT TOUCH
+const char*const LOG4Z_MAIN_LOGGER_KEY = "Main";
+
+//! check VC VERSION. DO NOT TOUCH
+//! format micro cannot support VC6 or VS2003, please use stream input log, like LOGI, LOGD, LOG_DEBUG, LOG_STREAM ...
+#if _MSC_VER >= 1400 //MSVC >= VS2005
+#define LOG4Z_FORMAT_INPUT_ENABLE
+#endif
+
+#ifndef WIN32
+#define LOG4Z_FORMAT_INPUT_ENABLE
+#endif
+
+//! LOG Level
+enum ENUM_LOG_LEVEL
+{
+ LOG_LEVEL_TRACE = 0,
+ LOG_LEVEL_DEBUG,
+ LOG_LEVEL_INFO,
+ LOG_LEVEL_WARN,
+ LOG_LEVEL_ERROR,
+ LOG_LEVEL_ALARM,
+ LOG_LEVEL_FATAL,
+};
+
+//////////////////////////////////////////////////////////////////////////
+//! -----------------default logger config, can change on this.-----------
+//////////////////////////////////////////////////////////////////////////
+//! the max logger count.
+const int LOG4Z_LOGGER_MAX = 10;
+//! the max log content length.
+const int LOG4Z_LOG_BUF_SIZE = 2048;
+
+//! all logger synchronous output or not
+const bool LOG4Z_ALL_SYNCHRONOUS_OUTPUT = false;
+//! all logger synchronous display to the windows debug output
+const bool LOG4Z_ALL_DEBUGOUTPUT_DISPLAY = false;
+
+//! default logger output file.
+const char* const LOG4Z_DEFAULT_PATH = "./log/";
+//! default log filter level
+const int LOG4Z_DEFAULT_LEVEL = LOG_LEVEL_DEBUG;
+//! default logger display
+const bool LOG4Z_DEFAULT_DISPLAY = true;
+//! default logger output to file
+const bool LOG4Z_DEFAULT_OUTFILE = true;
+//! default logger month dir used status
+const bool LOG4Z_DEFAULT_MONTHDIR = false;
+//! default logger output file limit size, unit M byte.
+const int LOG4Z_DEFAULT_LIMITSIZE = 100;
+//! default logger show suffix (file name and line number)
+const bool LOG4Z_DEFAULT_SHOWSUFFIX = true;
+
+///////////////////////////////////////////////////////////////////////////
+//! -----------------------------------------------------------------------
+//////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#ifndef _ZSUMMER_BEGIN
+#define _ZSUMMER_BEGIN namespace zsummer {
+#endif
+#ifndef _ZSUMMER_LOG4Z_BEGIN
+#define _ZSUMMER_LOG4Z_BEGIN namespace log4z {
+#endif
+_ZSUMMER_BEGIN
+_ZSUMMER_LOG4Z_BEGIN
+
+
+
+
+//! log4z class
+class ILog4zManager
+{
+public:
+ ILog4zManager(){};
+ virtual ~ILog4zManager(){};
+
+ //! Log4z Singleton
+
+ static ILog4zManager * getInstance();
+ inline static ILog4zManager & getRef(){return *getInstance();}
+ inline static ILog4zManager * getPtr(){return getInstance();}
+
+ //! Config or overwrite configure
+ //! Needs to be called before ILog4zManager::Start,, OR Do not call.
+ virtual bool config(const char * configPath) = 0;
+ virtual bool configFromString(const char * configContent) = 0;
+
+ //! Create or overwrite logger.
+ //! Needs to be called before ILog4zManager::Start, OR Do not call.
+ virtual LoggerId createLogger(const char* key) = 0;
+
+ //! Start Log Thread. This method can only be called once by one process.
+ virtual bool start() = 0;
+
+ //! Default the method will be calling at process exit auto.
+ //! Default no need to call and no recommended.
+ virtual bool stop() = 0;
+
+ //! Find logger. thread safe.
+ virtual LoggerId findLogger(const char* key) =0;
+
+ //pre-check the log filter. if filter out return false.
+ virtual bool prePushLog(LoggerId id, int level) = 0;
+ //! Push log, thread safe.
+ virtual bool pushLog(LoggerId id, int level, const char * log, const char * file = NULL, int line = 0) = 0;
+
+ //! set logger's attribute, thread safe.
+ virtual bool enableLogger(LoggerId id, bool enable) = 0;
+ virtual bool setLoggerName(LoggerId id, const char * name) = 0;
+ virtual bool setLoggerPath(LoggerId id, const char * path) = 0;
+ virtual bool setLoggerLevel(LoggerId id, int nLevel) = 0;
+ virtual bool setLoggerFileLine(LoggerId id, bool enable) = 0;
+ virtual bool setLoggerDisplay(LoggerId id, bool enable) = 0;
+ virtual bool setLoggerOutFile(LoggerId id, bool enable) = 0;
+ virtual bool setLoggerLimitsize(LoggerId id, unsigned int limitsize) = 0;
+ virtual bool setLoggerMonthdir(LoggerId id, bool enable) = 0;
+
+
+ //! Update logger's attribute from config file, thread safe.
+ virtual bool setAutoUpdate(int interval/*per second, 0 is disable auto update*/) = 0;
+ virtual bool updateConfig() = 0;
+
+ //! Log4z status statistics, thread safe.
+ virtual bool isLoggerEnable(LoggerId id) = 0;
+ virtual unsigned long long getStatusTotalWriteCount() = 0;
+ virtual unsigned long long getStatusTotalWriteBytes() = 0;
+ virtual unsigned long long getStatusWaitingCount() = 0;
+ virtual unsigned int getStatusActiveLoggers() = 0;
+};
+
+class Log4zStream;
+class Log4zBinary;
+
+#ifndef _ZSUMMER_END
+#define _ZSUMMER_END }
+#endif
+#ifndef _ZSUMMER_LOG4Z_END
+#define _ZSUMMER_LOG4Z_END }
+#endif
+
+_ZSUMMER_LOG4Z_END
+_ZSUMMER_END
+
+
+
+//! base micro.
+#define LOG_STREAM(id, level, log)\
+{\
+ if (zsummer::log4z::ILog4zManager::getPtr()->prePushLog(id,level)) \
+ {\
+ char logBuf[LOG4Z_LOG_BUF_SIZE];\
+ zsummer::log4z::Log4zStream ss(logBuf, LOG4Z_LOG_BUF_SIZE);\
+ ss << log;\
+ zsummer::log4z::ILog4zManager::getPtr()->pushLog(id, level, logBuf, __FILE__, __LINE__);\
+ }\
+}
+
+
+//! fast micro
+#define LOG_TRACE(id, log) LOG_STREAM(id, LOG_LEVEL_TRACE, log)
+#define LOG_DEBUG(id, log) LOG_STREAM(id, LOG_LEVEL_DEBUG, log)
+#define LOG_INFO(id, log) LOG_STREAM(id, LOG_LEVEL_INFO, log)
+#define LOG_WARN(id, log) LOG_STREAM(id, LOG_LEVEL_WARN, log)
+#define LOG_ERROR(id, log) LOG_STREAM(id, LOG_LEVEL_ERROR, log)
+#define LOG_ALARM(id, log) LOG_STREAM(id, LOG_LEVEL_ALARM, log)
+#define LOG_FATAL(id, log) LOG_STREAM(id, LOG_LEVEL_FATAL, log)
+
+//! super micro.
+#define LOGT( log ) LOG_TRACE(LOG4Z_MAIN_LOGGER_ID, log )
+#define LOGD( log ) LOG_DEBUG(LOG4Z_MAIN_LOGGER_ID, log )
+#define LOGI( log ) LOG_INFO(LOG4Z_MAIN_LOGGER_ID, log )
+#define LOGW( log ) LOG_WARN(LOG4Z_MAIN_LOGGER_ID, log )
+#define LOGE( log ) LOG_ERROR(LOG4Z_MAIN_LOGGER_ID, log )
+#define LOGA( log ) LOG_ALARM(LOG4Z_MAIN_LOGGER_ID, log )
+#define LOGF( log ) LOG_FATAL(LOG4Z_MAIN_LOGGER_ID, log )
+
+
+//! format input log.
+#ifdef LOG4Z_FORMAT_INPUT_ENABLE
+#ifdef WIN32
+#define LOG_FORMAT(id, level, logformat, ...) \
+{ \
+ if (zsummer::log4z::ILog4zManager::getPtr()->prePushLog(id,level)) \
+ {\
+ char logbuf[LOG4Z_LOG_BUF_SIZE]; \
+ _snprintf_s(logbuf, LOG4Z_LOG_BUF_SIZE, _TRUNCATE, logformat, ##__VA_ARGS__); \
+ zsummer::log4z::ILog4zManager::getPtr()->pushLog(id, level, logbuf, __FILE__, __LINE__); \
+ }\
+ }
+#else
+#define LOG_FORMAT(id, level, logformat, ...) \
+{ \
+ if (zsummer::log4z::ILog4zManager::getPtr()->prePushLog(id,level)) \
+ {\
+ char logbuf[LOG4Z_LOG_BUF_SIZE]; \
+ snprintf(logbuf, LOG4Z_LOG_BUF_SIZE,logformat, ##__VA_ARGS__); \
+ zsummer::log4z::ILog4zManager::getPtr()->pushLog(id, level, logbuf, __FILE__, __LINE__); \
+ } \
+}
+#endif
+//!format string
+#define LOGFMT_TRACE(id, fmt, ...) LOG_FORMAT(id, LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
+#define LOGFMT_DEBUG(id, fmt, ...) LOG_FORMAT(id, LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
+#define LOGFMT_INFO(id, fmt, ...) LOG_FORMAT(id, LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
+#define LOGFMT_WARN(id, fmt, ...) LOG_FORMAT(id, LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
+#define LOGFMT_ERROR(id, fmt, ...) LOG_FORMAT(id, LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
+#define LOGFMT_ALARM(id, fmt, ...) LOG_FORMAT(id, LOG_LEVEL_ALARM, fmt, ##__VA_ARGS__)
+#define LOGFMT_FATAL(id, fmt, ...) LOG_FORMAT(id, LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__)
+#define LOGFMTT( fmt, ...) LOGFMT_TRACE(LOG4Z_MAIN_LOGGER_ID, fmt, ##__VA_ARGS__)
+#define LOGFMTD( fmt, ...) LOGFMT_DEBUG(LOG4Z_MAIN_LOGGER_ID, fmt, ##__VA_ARGS__)
+#define LOGFMTI( fmt, ...) LOGFMT_INFO(LOG4Z_MAIN_LOGGER_ID, fmt, ##__VA_ARGS__)
+#define LOGFMTW( fmt, ...) LOGFMT_WARN(LOG4Z_MAIN_LOGGER_ID, fmt, ##__VA_ARGS__)
+#define LOGFMTE( fmt, ...) LOGFMT_ERROR(LOG4Z_MAIN_LOGGER_ID, fmt, ##__VA_ARGS__)
+#define LOGFMTA( fmt, ...) LOGFMT_ALARM(LOG4Z_MAIN_LOGGER_ID, fmt, ##__VA_ARGS__)
+#define LOGFMTF( fmt, ...) LOGFMT_FATAL(LOG4Z_MAIN_LOGGER_ID, fmt, ##__VA_ARGS__)
+#else
+inline void empty_log_format_function1(LoggerId id, const char*, ...){}
+inline void empty_log_format_function2(const char*, ...){}
+#define LOGFMT_TRACE empty_log_format_function1
+#define LOGFMT_DEBUG LOGFMT_TRACE
+#define LOGFMT_INFO LOGFMT_TRACE
+#define LOGFMT_WARN LOGFMT_TRACE
+#define LOGFMT_ERROR LOGFMT_TRACE
+#define LOGFMT_ALARM LOGFMT_TRACE
+#define LOGFMT_FATAL LOGFMT_TRACE
+#define LOGFMTT empty_log_format_function2
+#define LOGFMTD LOGFMTT
+#define LOGFMTI LOGFMTT
+#define LOGFMTW LOGFMTT
+#define LOGFMTE LOGFMTT
+#define LOGFMTA LOGFMTT
+#define LOGFMTF LOGFMTT
+#endif
+
+
+_ZSUMMER_BEGIN
+_ZSUMMER_LOG4Z_BEGIN
+
+//! optimze from std::stringstream to Log4zStream
+#ifdef WIN32
+#pragma warning(push)
+#pragma warning(disable:4996)
+#endif
+class Log4zBinary
+{
+public:
+ Log4zBinary(const char * buf, int len)
+ {
+ _buf = buf;
+ _len = len;
+ }
+ const char * _buf;
+ int _len;
+};
+class Log4zStream
+{
+public:
+ inline Log4zStream(char * buf, int len);
+ inline int getCurrentLen(){return (int)(_cur - _begin);}
+private:
+ template<class T>
+ inline Log4zStream & writeData(const char * ft, T t);
+ inline Log4zStream & writeLongLong(long long t);
+ inline Log4zStream & writeULongLong(unsigned long long t);
+ inline Log4zStream & writePointer(const void * t);
+ inline Log4zStream & writeString(const wchar_t* t){ return writeData("%s", t); }
+ inline Log4zStream & writeWString(const wchar_t* t);
+ inline Log4zStream & writeBinary(const Log4zBinary & t);
+public:
+ inline Log4zStream & operator <<(const void * t){ return writePointer(t); }
+
+ inline Log4zStream & operator <<(const char * t){return writeData("%s", t);}
+#ifdef WIN32
+ inline Log4zStream & operator <<(const wchar_t * t){ return writeWString(t);}
+#endif
+ inline Log4zStream & operator <<(bool t){ return (t ? writeData("%s", "true") : writeData("%s", "false"));}
+
+ inline Log4zStream & operator <<(char t){return writeData("%c", t);}
+
+ inline Log4zStream & operator <<(unsigned char t){return writeData("%u",(unsigned int)t);}
+
+ inline Log4zStream & operator <<(short t){ return writeData("%d", (int)t); }
+
+ inline Log4zStream & operator <<(unsigned short t){ return writeData("%u", (unsigned int)t); }
+
+ inline Log4zStream & operator <<(int t){return writeData("%d", t);}
+
+ inline Log4zStream & operator <<(unsigned int t){return writeData("%u", t);}
+
+ inline Log4zStream & operator <<(long t) { return writeLongLong(t); }
+
+ inline Log4zStream & operator <<(unsigned long t){ return writeULongLong(t); }
+
+ inline Log4zStream & operator <<(long long t) { return writeLongLong(t); }
+
+ inline Log4zStream & operator <<(unsigned long long t){ return writeULongLong(t); }
+
+ inline Log4zStream & operator <<(float t){return writeData("%.4f", t);}
+
+ inline Log4zStream & operator <<(double t){return writeData("%.4lf", t);}
+
+ template<class _Elem,class _Traits,class _Alloc> //support std::string, std::wstring
+ inline Log4zStream & operator <<(const std::basic_string<_Elem, _Traits, _Alloc> & t){ return *this << t.c_str(); }
+
+ inline Log4zStream & operator << (const zsummer::log4z::Log4zBinary & binary){ return writeBinary(binary); }
+
+private:
+ Log4zStream(){}
+ Log4zStream(Log4zStream &){}
+ char * _begin;
+ char * _end;
+ char * _cur;
+};
+
+inline Log4zStream::Log4zStream(char * buf, int len)
+{
+ _begin = buf;
+ _end = buf + len;
+ _cur = _begin;
+}
+
+template<class T>
+inline Log4zStream& Log4zStream::writeData(const char * ft, T t)
+{
+ if (_cur < _end)
+ {
+ int len = 0;
+ int count = (int)(_end - _cur);
+#ifdef WIN32
+ len = _snprintf(_cur, count, ft, t);
+ if (len == count || (len == -1 && errno == ERANGE))
+ {
+ len = count;
+ *(_end - 1) = '\0';
+ }
+ else if (len < 0)
+ {
+ *_cur = '\0';
+ len = 0;
+ }
+#else
+ len = snprintf(_cur, count, ft, t);
+ if (len < 0)
+ {
+ *_cur = '\0';
+ len = 0;
+ }
+ else if (len >= count)
+ {
+ len = count;
+ *(_end - 1) = '\0';
+ }
+#endif
+ _cur += len;
+ }
+ return *this;
+}
+
+inline Log4zStream & Log4zStream::writeLongLong(long long t)
+{
+#ifdef WIN32
+ writeData("%I64d", t);
+#else
+ writeData("%lld", t);
+#endif
+ return *this;
+}
+
+inline Log4zStream & Log4zStream::writeULongLong(unsigned long long t)
+{
+#ifdef WIN32
+ writeData("%I64u", t);
+#else
+ writeData("%llu", t);
+#endif
+ return *this;
+}
+
+inline Log4zStream & Log4zStream::writePointer(const void * t)
+{
+#ifdef WIN32
+ sizeof(t) == 8 ? writeData("%016I64x", (unsigned long long)t) : writeData("%08I64x", (unsigned long long)t);
+#else
+ sizeof(t) == 8 ? writeData("%016llx", (unsigned long long)t) : writeData("%08llx", (unsigned long long)t);
+#endif
+ return *this;
+}
+
+inline Log4zStream & Log4zStream::writeBinary(const Log4zBinary & t)
+{
+ writeData("%s", "\r\n\t[");
+ for (int i = 0; i < t._len; i++)
+ {
+ if (i % 16 == 0)
+ {
+ writeData("%s", "\r\n\t");
+ *this << (void*)(t._buf + i);
+ writeData("%s", ": ");
+ }
+ writeData("%02x ", (unsigned char)t._buf[i]);
+ }
+ writeData("%s", "\r\n\t]\r\n\t");
+ return *this;
+}
+
+inline zsummer::log4z::Log4zStream & zsummer::log4z::Log4zStream::writeWString(const wchar_t* t)
+{
+#ifdef WIN32
+ DWORD dwLen = WideCharToMultiByte(CP_ACP, 0, t, -1, NULL, 0, NULL, NULL);
+ if (dwLen < LOG4Z_LOG_BUF_SIZE)
+ {
+ std::string str;
+ str.resize(dwLen, '\0');
+ dwLen = WideCharToMultiByte(CP_ACP, 0, t, -1, &str[0], dwLen, NULL, NULL);
+ if (dwLen > 0)
+ {
+ writeData("%s", str.c_str());
+ }
+ }
+#else
+ //not support
+#endif
+ return *this;
+}
+
+
+#ifdef WIN32
+#pragma warning(pop)
+#endif
+
+_ZSUMMER_LOG4Z_END
+_ZSUMMER_END
+
+#endif
+
+
+
+
diff --git a/include/qhy/minicam5base.h b/include/qhy/minicam5base.h
new file mode 100644
index 0000000..874b606
--- /dev/null
+++ b/include/qhy/minicam5base.h
@@ -0,0 +1,137 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file minicam5f_m.h
+ * @brief MINICAM5S_M class define
+ */
+
+#include "qhy5liibase.h"
+
+#ifndef MINICAM5BASE_DEF
+#define MINICAM5BASE_DEF
+
+
+/**
+ * @brief MINICAM5S_M class define
+ *
+ * include all functions for miniCam5s-m
+ */
+class MINICAM5BASE:public QHY5LIIBASE
+{
+public:
+ MINICAM5BASE();
+ ~MINICAM5BASE();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+
+ /**
+ @fn void SetAnalogGain(double gain)
+ @brief set gain to camera,here it is the bottom
+ @param gain gain value
+ */
+ void SetAnalogGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief control color filter wheel
+ @param handle camera control handle
+ @param order order send to color filter wheel
+ @param length the order string length
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+private:
+ //uint32_t expmode; //!< expose time mode
+ //double pllratio; //!< inter pll ratio
+ //uint32_t longtimeflag;
+
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
diff --git a/include/qhy/minicam5f_m.h b/include/qhy/minicam5f_m.h
new file mode 100644
index 0000000..2209013
--- /dev/null
+++ b/include/qhy/minicam5f_m.h
@@ -0,0 +1,82 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file minicam5f_m.h
+ * @brief MINICAM5S_M class define
+ */
+
+#include "minicam5base.h"
+
+#ifndef MINICAM5F_M_DEF
+#define MINICAM5F_M_DEF
+
+
+/**
+ * @brief MINICAM5S_M class define
+ *
+ * include all functions for miniCam5s-m
+ */
+class MINICAM5F_M:public MINICAM5BASE
+{
+public:
+ MINICAM5F_M();
+ ~MINICAM5F_M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ uint32_t IsCFWPlugged(qhyccd_handle *handle);
+
+private:
+};
+#endif
diff --git a/include/qhy/minicam5s_c.h b/include/qhy/minicam5s_c.h
new file mode 100644
index 0000000..154ae9e
--- /dev/null
+++ b/include/qhy/minicam5s_c.h
@@ -0,0 +1,91 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file minicam5s_c.h
+ * @brief MINICAM5S_C class define
+ */
+
+#include "minicam5base.h"
+
+#ifndef MINICAM5S_C_DEF
+#define MINICAM5S_C_DEF
+
+
+/**
+ * @brief MINICAM5S_C class define
+ *
+ * include all functions for miniCam5s-c
+ */
+class MINICAM5S_C:public MINICAM5BASE
+{
+public:
+ MINICAM5S_C();
+ ~MINICAM5S_C();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+};
+#endif
diff --git a/include/qhy/minicam5s_m.h b/include/qhy/minicam5s_m.h
new file mode 100644
index 0000000..e7daf03
--- /dev/null
+++ b/include/qhy/minicam5s_m.h
@@ -0,0 +1,84 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file minicam5s_m.h
+ * @brief MINICAM5S_M class define
+ */
+
+#include "minicam5base.h"
+
+
+#ifndef MINICAM5S_M_DEF
+#define MINICAM5S_M_DEF
+
+
+/**
+ * @brief MINICAM5S_M class define
+ *
+ * include all functions for miniCam5s-m
+ */
+class MINICAM5S_M:public MINICAM5BASE
+{
+public:
+ MINICAM5S_M();
+ ~MINICAM5S_M();
+
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+private:
+
+
+};
+#endif
diff --git a/include/qhy/minicam6f.h b/include/qhy/minicam6f.h
new file mode 100644
index 0000000..a6c4294
--- /dev/null
+++ b/include/qhy/minicam6f.h
@@ -0,0 +1,65 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file minicam6f.h
+ * @brief MINICAM6F class define
+ */
+
+#include "qhy5iii178coolbase.h"
+
+#ifndef MINICAM6F_DEF
+#define MINICAM6F_DEF
+
+
+/**
+ * @brief MINICAM6F class define
+ *
+ * include all functions for MINICAM6F
+ */
+class MINICAM6F:public QHY5III178COOLBASE
+{
+public:
+ MINICAM6F();
+ ~MINICAM6F();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/plugins.h b/include/qhy/plugins.h
new file mode 100644
index 0000000..642d6e0
--- /dev/null
+++ b/include/qhy/plugins.h
@@ -0,0 +1,165 @@
+#ifndef f_PLUGINS_H
+#define f_PLUGINS_H
+
+#include <vd2/system/vdtypes.h>
+#include <vd2/system/VDString.h>
+#include <vd2/plugin/vdvideofilt.h>
+#include <vector>
+#include <map>
+
+class VDExternalModule;
+struct VDXPluginInfo;
+typedef VDXPluginInfo VDPluginInfo;
+
+struct VDPluginDescription {
+ VDStringW mName;
+ VDStringW mAuthor;
+ VDStringW mDescription;
+ uint32 mVersion;
+ uint32 mType;
+ VDExternalModule *mpModule;
+ const VDPluginInfo *mpInfo;
+ const VDPluginInfo *mpShadowedInfo;
+ bool mbHasStaticAbout;
+ bool mbHasStaticConfigure;
+};
+
+struct VDXFilterModule { // formerly FilterModule
+ struct VDXFilterModule *next, *prev;
+ VDXHINSTANCE hInstModule;
+ VDXFilterModuleInitProc initProc;
+ VDXFilterModuleDeinitProc deinitProc;
+};
+
+class VDExternalModule {
+public:
+ VDExternalModule(const VDStringW& filename);
+ ~VDExternalModule();
+
+ bool Lock();
+ void Unlock();
+
+ bool IsConfigureSupported() const;
+ bool IsAboutSupported() const;
+
+ int GetVideoFilterAPIVersion() const { return mVFHighVersion; }
+
+ const VDStringW& GetFilename() const { return mFilename; }
+ VDXFilterModule& GetFilterModuleInfo() { return mModuleInfo; }
+
+protected:
+ void DisconnectOldPlugins();
+ void ReconnectOldPlugins();
+ bool ReconnectPlugins();
+
+ VDStringW mFilename;
+ HMODULE mhModule;
+ int mModuleRefCount;
+ int mVFHighVersion; // video filter high version (from module init)
+ VDXFilterModule mModuleInfo;
+};
+
+void VDDeinitPluginSystem();
+
+bool VDAddPluginModule(const wchar_t *pFilename);
+void VDAddInternalPlugins(const VDPluginInfo *const *ppInfo);
+
+VDExternalModule * VDGetExternalModuleByFilterModule(const VDXFilterModule *);
+
+VDPluginDescription * VDGetPluginDescription(const wchar_t *pName, uint32 mType);
+void VDEnumeratePluginDescriptions(std::vector<VDPluginDescription *>& plugins, uint32 type);
+
+void VDLoadPlugins(const VDStringW& path, int& succeeded, int& failed);
+const VDPluginInfo * VDLockPlugin(VDPluginDescription *pDesc);
+void VDUnlockPlugin(VDPluginDescription *pDesc);
+
+void VDConnectPluginDescription(const VDPluginInfo *pInfo, VDExternalModule *pModule);
+
+class VDPluginPtr {
+public:
+ VDPluginPtr() : mpDesc(NULL) {}
+ VDPluginPtr(VDPluginDescription *pDesc);
+ VDPluginPtr(const VDPluginPtr& src);
+ ~VDPluginPtr();
+
+ VDPluginPtr& operator=(const VDPluginPtr& src);
+ VDPluginPtr& operator=(VDPluginDescription *pDesc);
+
+ bool operator!() const { return !mpDesc; }
+ VDPluginDescription *operator->() const { return mpDesc; }
+ VDPluginDescription& operator*() const { return *mpDesc; }
+
+protected:
+ VDPluginDescription *mpDesc;
+};
+
+union VDPluginConfigVariantData {
+ uint32 vu32;
+ sint32 vs32;
+ uint64 vu64;
+ sint64 vs64;
+ double vfd;
+ struct NarrowString {
+ char *s;
+ } vsa;
+ struct WideString {
+ wchar_t *s;
+ } vsw;
+ struct Block {
+ uint32 len;
+ char *s;
+ } vb;
+};
+
+class VDPluginConfigVariant {
+public:
+ enum {
+ kTypeInvalid = 0,
+ kTypeU32 = 1,
+ kTypeS32,
+ kTypeU64,
+ kTypeS64,
+ kTypeDouble,
+ kTypeAStr,
+ kTypeWStr,
+ kTypeBlock
+ };
+
+ VDPluginConfigVariant() : mType(kTypeInvalid) {}
+ VDPluginConfigVariant(const VDPluginConfigVariant&);
+ ~VDPluginConfigVariant();
+
+ VDPluginConfigVariant& operator=(const VDPluginConfigVariant&);
+
+ unsigned GetType() const { return mType; }
+
+ void Clear();
+
+ void SetU32(uint32 v) { Clear(); mType = kTypeU32; mData.vu32 = v; }
+ void SetS32(sint32 v) { Clear(); mType = kTypeS32; mData.vs32 = v; }
+ void SetU64(uint64 v) { Clear(); mType = kTypeU64; mData.vu64 = v; }
+ void SetS64(sint64 v) { Clear(); mType = kTypeS64; mData.vs64 = v; }
+ void SetDouble(double v) { Clear(); mType = kTypeDouble; mData.vfd = v; }
+ void SetAStr(const char *s);
+ void SetWStr(const wchar_t *s);
+ void SetBlock(const void *s, unsigned b);
+
+ const uint32& GetU32() const { return mData.vu32; }
+ const sint32& GetS32() const { return mData.vs32; }
+ const uint64& GetU64() const { return mData.vu64; }
+ const sint64& GetS64() const { return mData.vs64; }
+ const double& GetDouble() const { return mData.vfd; }
+ const char *GetAStr() const { return mData.vsa.s; }
+ const wchar_t *GetWStr() const { return mData.vsw.s; }
+ const void *GetBlockPtr() const { return mData.vb.s; }
+ const unsigned GetBlockLen() const { return mData.vb.len; }
+
+protected:
+ unsigned mType;
+
+ VDPluginConfigVariantData mData;
+};
+
+typedef std::map<unsigned, VDPluginConfigVariant> VDPluginConfig;
+
+#endif
diff --git a/include/qhy/polemaster.h b/include/qhy/polemaster.h
new file mode 100644
index 0000000..09d2058
--- /dev/null
+++ b/include/qhy/polemaster.h
@@ -0,0 +1,114 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file polemaster.h
+ * @brief POLEMASTER class define
+ */
+
+#include "qhy5liibase.h"
+
+#ifndef POLEMASTER_DEF
+#define POLEMASTER_DEF
+
+/**
+ * @brief POLEMASTER class define
+ *
+ * include all functions for polemaster
+ */
+class POLEMASTER:public QHY5LIIBASE
+{
+public:
+ POLEMASTER();
+ ~POLEMASTER();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+//private:
+// double pllratio; //!< inter pll ratio
+// uint32_t longtimeflag;
+};
+#endif
diff --git a/include/qhy/qhy08050g.h b/include/qhy/qhy08050g.h
new file mode 100644
index 0000000..7e93c4d
--- /dev/null
+++ b/include/qhy/qhy08050g.h
@@ -0,0 +1,367 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy08050g.h
+ * @brief QHY08050G class define
+ */
+
+#include "qhybase.h"
+
+
+#ifndef __QHY08050GDEF_H__
+#define __QHY08050GDEF_H__
+
+/**
+ * @brief QHY08050G class define
+ *
+ * include all functions for QHY08050G
+ */
+class QHY08050G:public QHYBASE
+{
+public:
+ QHY08050G();
+ ~QHY08050G();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+
+ */
+ uint32_t SetChipDepth(qhyccd_handle *h,uint32_t depth);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t GetChipMemoryLength()
+ @brief get the min cost memory for the image
+ @return
+ success return the total memory space(unit:byte) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn double GetChipExposeTime()
+ @brief get the current exposetime
+ @return
+ success return the current expose time (unit:us) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipExposeTime();
+
+ /**
+ @fn double GetChipGain()
+ @brief get the current gain
+ @return
+ success return the current expose gain\n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipGain();
+
+ /**
+ @fn double GetChipSpeed()
+ @brief get the current transfer speed
+ @return
+ success return the current speed level \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipSpeed();
+
+
+ /**
+ @fn double GetChipBitsMode()
+ @brief get the current camera depth bits
+ @return
+ success return the current camera depth bits \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipBitsMode();
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode)
+ @brief Set the camera's mode to chose the way reading data from camera
+ @param handle camera control handle
+ @param mode the stream mode \n
+ 0x00:default mode,single frame mode \n
+ 0x01:live mode \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+
+};
+#endif
+
diff --git a/include/qhy/qhy10.h b/include/qhy/qhy10.h
new file mode 100644
index 0000000..2623904
--- /dev/null
+++ b/include/qhy/qhy10.h
@@ -0,0 +1,362 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy10.h
+ * @brief QHY10 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY10DEF_H__
+#define __QHY10DEF_H__
+
+/**
+ * @brief QHY10 class define
+ *
+ * include all functions for QHY10
+ */
+class QHY10 : public QHYBASE {
+public:
+ QHY10();
+ ~QHY10();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ void ConvertQHY10DataFocus(uint8_t *Data,uint32_t PixShift);
+};
+#endif
+
diff --git a/include/qhy/qhy11.h b/include/qhy/qhy11.h
new file mode 100644
index 0000000..738fa50
--- /dev/null
+++ b/include/qhy/qhy11.h
@@ -0,0 +1,337 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy11.h
+ * @brief QHY11 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY11DEF_H__
+#define __QHY11DEF_H__
+
+/**
+ * @brief QHY11 class define
+ *
+ * include all functions for QHY11
+ */
+class QHY11:public QHYBASE
+{
+public:
+ QHY11();
+ ~QHY11();
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin33 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
+
diff --git a/include/qhy/qhy12.h b/include/qhy/qhy12.h
new file mode 100644
index 0000000..02de395
--- /dev/null
+++ b/include/qhy/qhy12.h
@@ -0,0 +1,328 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy12.h
+ * @brief QHY12 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY12DEF_H__
+#define __QHY12DEF_H__
+
+/**
+ * @brief QHY12 class define
+ *
+ * include all functions for QHY12
+ */
+class QHY12:public QHYBASE
+{
+public:
+ QHY12();
+ ~QHY12();
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ void ConvertQHY12DataFocus(uint8_t *Data,uint32_t PixShift);
+
+
+};
+#endif
+
diff --git a/include/qhy/qhy128c.h b/include/qhy/qhy128c.h
new file mode 100644
index 0000000..9a84534
--- /dev/null
+++ b/include/qhy/qhy128c.h
@@ -0,0 +1,37 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii128base.h"
+
+#ifndef _QHY128C_
+#define _QHY128C_
+
+class QHY128C:public QHY5III128BASE {
+public:
+ QHY128C();
+ ~QHY128C();
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy15.h b/include/qhy/qhy15.h
new file mode 100644
index 0000000..4c50621
--- /dev/null
+++ b/include/qhy/qhy15.h
@@ -0,0 +1,333 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy15.h
+ * @brief QHY15 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY15DEF_H__
+#define __QHY15DEF_H__
+
+/**
+ * @brief QHY15 class define
+ *
+ * include all functions for QHY11
+ */
+class QHY15:public QHYBASE
+{
+public:
+ QHY15();
+ ~QHY15();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin33 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy16.h b/include/qhy/qhy16.h
new file mode 100644
index 0000000..b01a274
--- /dev/null
+++ b/include/qhy/qhy16.h
@@ -0,0 +1,335 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy16.h
+ * @brief QHY16 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY16DEF_H__
+#define __QHY16DEF_H__
+
+/**
+ * @brief QHY16 class define
+ *
+ * include all functions for QHY11
+ */
+class QHY16:public QHYBASE
+{
+public:
+ QHY16();
+ ~QHY16();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin33 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+};
+#endif
+
diff --git a/include/qhy/qhy16000.h b/include/qhy/qhy16000.h
new file mode 100644
index 0000000..a270399
--- /dev/null
+++ b/include/qhy/qhy16000.h
@@ -0,0 +1,232 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy16000.h
+ * @brief QHY16000 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY16000DEF_H__
+#define __QHY16000DEF_H__
+
+/**
+ * @brief QHY16000 class define
+ *
+ * include all functions for QHY16000
+ */
+class QHY16000:public QHYBASE
+{
+public:
+ QHY16000();
+ ~QHY16000();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double InitBIN11Mode(qhyccd_handle *h)
+ @brief init the bin11 mode setting
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(qhyccd_handle *h);
+
+ /**
+ @fn double InitBIN44Mode(qhyccd_handle *h)
+ @brief init the bin44 mode setting
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopSingleExposure(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ uint32_t I2CWriteByte(qhyccd_handle *h,uint8_t index, uint8_t value);
+
+ uint32_t I2CWriteWord(qhyccd_handle *h,uint8_t index, uint16_t value);
+
+ bool flagbin44;
+ uint8_t *rawarray2;
+};
+#endif
+
diff --git a/include/qhy/qhy160002ad.h b/include/qhy/qhy160002ad.h
new file mode 100644
index 0000000..0df0d72
--- /dev/null
+++ b/include/qhy/qhy160002ad.h
@@ -0,0 +1,266 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy160002ad.h
+ * @brief QHY160002AD class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY160002ADDEF_H__
+#define __QHY160002ADDEF_H__
+
+/**
+ * @brief QHY160002AD class define
+ *
+ * include all functions for QHY160002AD
+ */
+class QHY160002AD:public QHYBASE
+{
+public:
+ QHY160002AD();
+ ~QHY160002AD();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double InitBIN11Mode(qhyccd_handle *h)
+ @brief init the bin11 mode setting
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(qhyccd_handle *h);
+
+ /**
+ @fn double InitBIN44Mode(qhyccd_handle *h)
+ @brief init the bin44 mode setting
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ uint32_t I2CWriteByte(qhyccd_handle *h,uint8_t index, uint8_t value);
+
+ uint32_t I2CWriteWord(qhyccd_handle *h,uint8_t index, uint16_t value);
+
+
+ uint32_t SetFineTone(qhyccd_handle *h,uint8_t setshporshd,uint8_t shdloc,uint8_t shploc,uint8_t shwidth);
+};
+#endif
+
diff --git a/include/qhy/qhy16000g.h b/include/qhy/qhy16000g.h
new file mode 100644
index 0000000..1e855db
--- /dev/null
+++ b/include/qhy/qhy16000g.h
@@ -0,0 +1,292 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy08050g.h
+ * @brief QHY08050G class define
+ */
+
+#include "qhybase.h"
+
+
+#ifndef __QHY16000GDEF_H__
+#define __QHY16000GDEF_H__
+
+/**
+ * @brief QHY16000G class define
+ *
+ * include all functions for QHY16000G
+ */
+class QHY16000G:public QHYBASE
+{
+public:
+ QHY16000G();
+ ~QHY16000G();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+
+ */
+ uint32_t SetChipDepth(qhyccd_handle *h,uint32_t depth);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ uint32_t InitBIN88Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode)
+ @brief Set the camera's mode to chose the way reading data from camera
+ @param handle camera control handle
+ @param mode the stream mode \n
+ 0x00:default mode,single frame mode \n
+ 0x01:live mode \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+
+};
+#endif
+
diff --git a/include/qhy/qhy16200a.h b/include/qhy/qhy16200a.h
new file mode 100644
index 0000000..1ada74b
--- /dev/null
+++ b/include/qhy/qhy16200a.h
@@ -0,0 +1,83 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy16200a.h
+ * @brief QHY16200A class define
+ */
+
+#ifndef __QHY16200ADEF_H__
+#define __QHY16200ADEF_H__
+
+#include "qhyabase.h"
+
+/**
+ * @brief QHY16200A class define
+ *
+ * include all functions for QHY16200A
+ */
+class QHY16200A:public QHYABASE
+{
+public:
+ QHY16200A();
+ ~QHY16200A();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ double GetChipCoolPWM();
+
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
+
diff --git a/include/qhy/qhy163c.h b/include/qhy/qhy163c.h
new file mode 100644
index 0000000..a1fd7cc
--- /dev/null
+++ b/include/qhy/qhy163c.h
@@ -0,0 +1,65 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy163c.h
+ * @brief QHY163C class define
+ */
+
+#include "qhy5iii163base.h"
+
+#ifndef QHY163_C_DEF
+#define QHY163_C_DEF
+
+
+/**
+ * @brief QHY163C class define
+ *
+ * include all functions for qhy163c
+ */
+class QHY163C:public QHY5III163BASE
+{
+public:
+ QHY163C();
+ virtual ~QHY163C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy163m.h b/include/qhy/qhy163m.h
new file mode 100644
index 0000000..ce32937
--- /dev/null
+++ b/include/qhy/qhy163m.h
@@ -0,0 +1,64 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy163m.h
+ * @brief QHY163M class define
+ */
+
+#include "qhy5iii163base.h"
+
+#ifndef QHY163_M_DEF
+#define QHY163_M_DEF
+
+
+/**
+ * @brief QHY163M class define
+ *
+ * include all functions for qhy163m
+ */
+class QHY163M : public QHY5III163BASE {
+public:
+ QHY163M();
+ virtual ~QHY163M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy165c.h b/include/qhy/qhy165c.h
new file mode 100644
index 0000000..8b47477
--- /dev/null
+++ b/include/qhy/qhy165c.h
@@ -0,0 +1,65 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy163c.h
+ * @brief QHY163C class define
+ */
+
+#include "qhy5iii165base.h"
+
+#ifndef QHY165_C_DEF
+#define QHY165_C_DEF
+
+
+/**
+ * @brief QHY165C class define
+ *
+ * include all functions for qhy165c
+ */
+class QHY165C:public QHY5III165BASE
+{
+public:
+ QHY165C();
+ ~QHY165C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy16803a.h b/include/qhy/qhy16803a.h
new file mode 100644
index 0000000..bca6244
--- /dev/null
+++ b/include/qhy/qhy16803a.h
@@ -0,0 +1,83 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy16803a.h
+ * @brief QHY16803A class define
+ */
+
+#ifndef __QHY16803ADEF_H__
+#define __QHY16803ADEF_H__
+
+#include "qhyabase.h"
+
+/**
+ * @brief QHY16803A class define
+ *
+ * include all functions for QHY16803A
+ */
+class QHY16803A:public QHYABASE
+{
+public:
+ QHY16803A();
+ ~QHY16803A();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ double GetChipCoolPWM();
+
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
+
diff --git a/include/qhy/qhy168c.h b/include/qhy/qhy168c.h
new file mode 100644
index 0000000..6a9d911
--- /dev/null
+++ b/include/qhy/qhy168c.h
@@ -0,0 +1,58 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy168c.h
+ * @brief QHY168C class define
+ */
+
+#include "qhy5iii168base.h"
+
+#ifndef QHY168_C_DEF
+#define QHY168_C_DEF
+
+
+/**
+ * @brief QHY168C class define
+ *
+ * include all functions for qhy168c
+ */
+class QHY168C:public QHY5III168BASE
+{
+public:
+ QHY168C();
+ ~QHY168C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy174c.h b/include/qhy/qhy174c.h
new file mode 100644
index 0000000..e0f144d
--- /dev/null
+++ b/include/qhy/qhy174c.h
@@ -0,0 +1,61 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii174base.h"
+
+#ifndef QHY174_C_DEF
+#define QHY174_C_DEF
+
+
+/**
+ * @brief QHY224C class define
+ *
+ * include all functions for qhy174c
+ */
+class QHY174C:public QHY5III174BASE
+{
+public:
+ QHY174C();
+ ~QHY174C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy174m.h b/include/qhy/qhy174m.h
new file mode 100644
index 0000000..e242f6a
--- /dev/null
+++ b/include/qhy/qhy174m.h
@@ -0,0 +1,60 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii174base.h"
+
+#ifndef QHY174_M_DEF
+#define QHY174_M_DEF
+
+
+/**
+ * @brief QHY174M class define
+ *
+ * include all functions for qhy174m
+ */
+class QHY174M:public QHY5III174BASE {
+public:
+ QHY174M();
+ ~QHY174M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy178c.h b/include/qhy/qhy178c.h
new file mode 100644
index 0000000..6cbe1ed
--- /dev/null
+++ b/include/qhy/qhy178c.h
@@ -0,0 +1,54 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii178coolbase.h"
+
+#ifndef QHY178_C_DEF
+#define QHY178_C_DEF
+
+class QHY178C:public QHY5III178COOLBASE {
+public:
+ QHY178C();
+ ~QHY178C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy178m.h b/include/qhy/qhy178m.h
new file mode 100644
index 0000000..045470d
--- /dev/null
+++ b/include/qhy/qhy178m.h
@@ -0,0 +1,54 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii178coolbase.h"
+
+#ifndef QHY178_M_DEF
+#define QHY178_M_DEF
+
+class QHY178M:public QHY5III178COOLBASE {
+public:
+ QHY178M();
+ ~QHY178M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy183.h b/include/qhy/qhy183.h
new file mode 100644
index 0000000..bedce48
--- /dev/null
+++ b/include/qhy/qhy183.h
@@ -0,0 +1,73 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii183base.h"
+
+#ifndef _QHY183_
+#define _QHY183_
+
+#define SINGLE_FRAME_USB_PACKET_SIZE (2048 * 20)
+
+class QHY183:public QHY5III183BASE {
+
+public:
+ QHY183();
+ ~QHY183();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t *pBpp, uint32_t *pChannels, uint8_t *pImgData);
+
+// uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+// uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t GetLiveFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t *pBpp, uint32_t *pChannels, uint8_t *pImgData);
+
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+ uint32_t GetChipMemoryLength();
+
+private:
+ double pllratio,oldpllratio;
+ double oldtotalcamred2green,totalcamred2green,oldtotalcamgreen,totalcamgreen,oldtotalcamblue2green,totalcamblue2green,oldcamgain;
+
+ uint8_t oldcamddr;
+ uint8_t oldreg08,reg08,oldreg01,reg01;
+ uint8_t oldlockframe,lockframe;
+ uint8_t oldampv_onff,ampv_onff;
+ uint8_t forcestop;
+
+ uint16_t vwinpos,oldvwinpos,vwidcut,oldvwidcut;
+ uint16_t chiproiy,oldchiproiy,chiproiysize,oldchiproiysize;
+
+ uint32_t hmax_ref,vmax_ref;
+ uint32_t vmax,hmax,oldvmax,oldhmax;
+ uint32_t framelength,oldframelength;
+ uint32_t oldchipoutputsizex,oldchipoutputsizey,oldchipoutputbits;
+ uint32_t patchvnumber,oldpatchvnumber;
+ uint32_t oldcamoffset;
+ uint32_t oldusbtraffic;
+ uint32_t oldampv_min,ampv_min,oldampv_max,ampv_max;
+ uint32_t ApproxDDR, ApproxDDR_Target;
+
+ int32_t shr,svr,spl,oldshr,oldsvr,oldspl;
+};
+#endif
diff --git a/include/qhy/qhy183c.h b/include/qhy/qhy183c.h
new file mode 100644
index 0000000..dce2d27
--- /dev/null
+++ b/include/qhy/qhy183c.h
@@ -0,0 +1,45 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii183base.h"
+
+#ifndef _QHY183C_
+#define _QHY183C_
+
+class QHY183C:public QHY5III183BASE {
+public:
+ QHY183C();
+ ~QHY183C();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t *pBpp, uint32_t *pChannels, uint8_t *pImgData);
+
+// uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+// uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+// uint32_t GetLiveFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t *pBpp, uint32_t *pChannels, uint8_t *pImgData);
+
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy21.h b/include/qhy/qhy21.h
new file mode 100644
index 0000000..91ad202
--- /dev/null
+++ b/include/qhy/qhy21.h
@@ -0,0 +1,349 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy21.h
+ * @brief QHY21 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY21DEF_H__
+#define __QHY21DEF_H__
+
+/**
+ * @brief QHY21 class define
+ *
+ * include all functions for QHY21
+ */
+class QHY21:public QHYBASE
+{
+public:
+ QHY21();
+ ~QHY21();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy22.h b/include/qhy/qhy22.h
new file mode 100644
index 0000000..e8130bf
--- /dev/null
+++ b/include/qhy/qhy22.h
@@ -0,0 +1,349 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy22.h
+ * @brief QHY22 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY22DEF_H__
+#define __QHY22DEF_H__
+
+/**
+ * @brief QHY22 class define
+ *
+ * include all functions for QHY22
+ */
+class QHY22:public QHYBASE
+{
+public:
+ QHY22();
+ ~QHY22();
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+};
+#endif
+
diff --git a/include/qhy/qhy224c.h b/include/qhy/qhy224c.h
new file mode 100644
index 0000000..efc0281
--- /dev/null
+++ b/include/qhy/qhy224c.h
@@ -0,0 +1,65 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy224c.h
+ * @brief QHY224C class define
+ */
+
+#include "qhy5iii224coolbase.h"
+
+#ifndef QHY224_C_DEF
+#define QHY224_C_DEF
+
+
+/**
+ * @brief QHY224C class define
+ *
+ * include all functions for qhy224c
+ */
+class QHY224C:public QHY5III224COOLBASE
+{
+public:
+ QHY224C();
+ ~QHY224C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy23.h b/include/qhy/qhy23.h
new file mode 100644
index 0000000..08e4d57
--- /dev/null
+++ b/include/qhy/qhy23.h
@@ -0,0 +1,371 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy23.h
+ * @brief QHY23 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY23DEF_H__
+#define __QHY23DEF_H__
+
+/**
+ * @brief QHY23 class define
+ *
+ * include all functions for QHY23
+ */
+class QHY23:public QHYBASE
+{
+public:
+ QHY23();
+ ~QHY23();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh)
+ @brief get the camera's ccd/cmos chip info
+ @param h camera control handle
+ @param chipw chip size width
+ @param chiph chip size height
+ @param imagew chip output image width
+ @param imageh chip output image height
+ @param pixelw chip pixel size width
+ @param pixelh chip pixel size height
+ @param bpp chip pixel depth
+ */
+ uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh,uint32_t *bpp);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn double GetReadingProgress(qhyccd_handle *handle)
+ @brief get reading data from camera progress
+ @param handle camera control handle
+ @return current progress
+ */
+ double GetReadingProgress(qhyccd_handle *handle);
+
+};
+#endif
+
diff --git a/include/qhy/qhy247c.h b/include/qhy/qhy247c.h
new file mode 100644
index 0000000..3e5fb38
--- /dev/null
+++ b/include/qhy/qhy247c.h
@@ -0,0 +1,58 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy163c.h
+ * @brief QHY163C class define
+ */
+
+#include "qhy5iii247base.h"
+
+#ifndef QHY247_C_DEF
+#define QHY247_C_DEF
+
+
+/**
+ * @brief QHY247C class define
+ *
+ * include all functions for qhy247c
+ */
+class QHY247C:public QHY5III247BASE
+{
+public:
+ QHY247C();
+ ~QHY247C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy27.h b/include/qhy/qhy27.h
new file mode 100644
index 0000000..14b9abe
--- /dev/null
+++ b/include/qhy/qhy27.h
@@ -0,0 +1,95 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy27.h
+ * @brief QHY27 class define
+ */
+
+#include "qhyabase.h"
+
+#ifndef __QHY27DEF_H__
+#define __QHY27DEF_H__
+
+/**
+ * @brief QHY27 class define
+ *
+ * include all functions for QHY27
+ */
+class QHY27:public QHYABASE
+{
+public:
+ QHY27();
+ ~QHY27();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ double GetChipCoolPWM();
+
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief control color filter wheel
+ @param handle camera control handle
+ @param order order send to color filter wheel
+ @param length the order string length
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
+
diff --git a/include/qhy/qhy28.h b/include/qhy/qhy28.h
new file mode 100644
index 0000000..07c300f
--- /dev/null
+++ b/include/qhy/qhy28.h
@@ -0,0 +1,74 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy28.h
+ * @brief QHY28 class define
+ */
+
+#include "qhyabase.h"
+
+#ifndef __QHY28DEF_H__
+#define __QHY28DEF_H__
+
+/**
+ * @brief QHY28 class define
+ *
+ * include all functions for QHY27
+ */
+class QHY28:public QHYABASE
+{
+public:
+ QHY28();
+ ~QHY28();
+
+ uint32_t SetChipResolution(qhyccd_handle *h,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ uint32_t SetFocusSetting(qhyccd_handle *h, uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy29.h b/include/qhy/qhy29.h
new file mode 100644
index 0000000..b1355cb
--- /dev/null
+++ b/include/qhy/qhy29.h
@@ -0,0 +1,95 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy29.h
+ * @brief QHY29 class define
+ */
+
+#include "qhyabase.h"
+
+#ifndef __QHY29DEF_H__
+#define __QHY29DEF_H__
+
+/**
+ * @brief QHY29 class define
+ *
+ * include all functions for QHY29
+ */
+class QHY29:public QHYABASE
+{
+public:
+ QHY29();
+ ~QHY29();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ double GetChipCoolPWM();
+
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief control color filter wheel
+ @param handle camera control handle
+ @param order order send to color filter wheel
+ @param length the order string length
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
+
diff --git a/include/qhy/qhy290c.h b/include/qhy/qhy290c.h
new file mode 100644
index 0000000..0fb631e
--- /dev/null
+++ b/include/qhy/qhy290c.h
@@ -0,0 +1,54 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii290coolbase.h"
+
+#ifndef QHY290_C_DEF
+#define QHY290_C_DEF
+
+class QHY290C:public QHY5III290COOLBASE {
+public:
+ QHY290C();
+ ~QHY290C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy290m.h b/include/qhy/qhy290m.h
new file mode 100644
index 0000000..1f673e2
--- /dev/null
+++ b/include/qhy/qhy290m.h
@@ -0,0 +1,53 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii290coolbase.h"
+
+#ifndef QHY290_M_DEF
+#define QHY290_M_DEF
+class QHY290M:public QHY5III290COOLBASE {
+public:
+ QHY290M();
+ ~QHY290M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy2pro.h b/include/qhy/qhy2pro.h
new file mode 100644
index 0000000..41cb193
--- /dev/null
+++ b/include/qhy/qhy2pro.h
@@ -0,0 +1,328 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy2pro.h
+ * @brief QHY2PRO class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY2PRODEF_H__
+#define __QHY2PRODEF_H__
+
+/**
+ * @brief QHY2PRO class define
+ *
+ * include all functions for QHY2PRO
+ */
+class QHY2PRO:public QHYBASE
+{
+public:
+ QHY2PRO();
+ ~QHY2PRO();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the top left x
+ @param y the top left y
+ @param xsize x size
+ @param ysize y size
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the top left x
+ @param y the top left y
+ @param xsize x size
+ @param ysize y size
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the top left x
+ @param y the top left y
+ @param xsize x size
+ @param ysize y size
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy367c.h b/include/qhy/qhy367c.h
new file mode 100644
index 0000000..75f53df
--- /dev/null
+++ b/include/qhy/qhy367c.h
@@ -0,0 +1,65 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy367c.h
+ * @brief QHY367C class define
+ */
+
+#include "qhy5iii367base.h"
+
+#ifndef QHY367_C_DEF
+#define QHY367_C_DEF
+
+
+/**
+ * @brief QHY367C class define
+ *
+ * include all functions for qhy367c
+ */
+class QHY367C:public QHY5III367BASE
+{
+public:
+ QHY367C();
+ ~QHY367C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy45gx.h b/include/qhy/qhy45gx.h
new file mode 100644
index 0000000..34f8a5c
--- /dev/null
+++ b/include/qhy/qhy45gx.h
@@ -0,0 +1,311 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy45gx.h
+ * @brief QHY45GX class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY45GXDEF_H__
+#define __QHY45GXDEF_H__
+
+/**
+ * @brief QHY16000G class define
+ *
+ * include all functions for QHY45GX
+ */
+class QHY45GX:public QHYBASE
+{
+public:
+ QHY45GX();
+ ~QHY45GX();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+
+ */
+ uint32_t SetChipDepth(qhyccd_handle *h,uint32_t depth);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode)
+ @brief Set the camera's mode to chose the way reading data from camera
+ @param handle camera control handle
+ @param mode the stream mode \n
+ 0x00:default mode,single frame mode \n
+ 0x01:live mode \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+
+};
+#endif
+
diff --git a/include/qhy/qhy5.h b/include/qhy/qhy5.h
new file mode 100644
index 0000000..277ce45
--- /dev/null
+++ b/include/qhy/qhy5.h
@@ -0,0 +1,229 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5.h
+ * @brief QHY5 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef QHY5_DEF
+#define QHY5_DEF
+
+#define GUIDE_EAST 0x00010010 /* 0 RA+ */
+#define GUIDE_NORTH 0x00020020 /* 1 DEC+ */
+#define GUIDE_SOUTH 0x00020040 /* 2 DEC- */
+#define GUIDE_WEST 0x00010080 /* 3 RA- */
+
+#define STORE_WORD_BE(var, val) *(var) = ((val) >> 8) & 0xff; *((var) + 1) = (val) & 0xff
+static const uint32_t qhy5_gain_map[] = { 0x000, 0x004, 0x005, 0x006, 0x007, 0x008, 0x009, 0x00A, 0x00B, 0x00C, 0x00D, 0x00E, 0x00F, 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x019, 0x01A, 0x01B, 0x01C, 0x01D, 0x01E, 0x01F, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, 0x058, 0x059, 0x05A, 0x05B, 0x05C, 0x05D, 0x05E, 0x05F, 0x6CE, 0x6CF, 0x6D0, 0x6D1, 0x6D2, 0x6D3, 0x6D4, 0x6D5, 0x6D6, 0x6D7, 0x6D8, 0x6D9, 0x6DA, 0x6DB, 0x6DC, 0x6DD, 0x6DE, 0x6DF, 0x6E0, 0x6E1, 0x6E2, 0x6E3, 0x6E4, 0x6E5, 0x6E6, 0x6E7, 0x6FC, 0x6FD, 0x6FE, 0x6FF };
+static const uint32_t qhy5_gain_map_size = (sizeof(qhy5_gain_map) / sizeof(uint32_t));
+
+/**
+ * @brief QHY5 class define
+ *
+ * include all functions for miniCam5s-m
+ */
+class QHY5:public QHYBASE
+{
+public:
+ QHY5();
+ ~QHY5();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera image bin mode
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopSingleExposure(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime)
+ @brief send the command to camera's guide port
+ @param h camera control handle
+ @param Direction RA DEC
+ @param PulseTime the time last for command
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime);
+
+ /**
+ @fn void SetGainMonoQHY5LII(double gain)
+ @brief set gain to camera,here it is the bottom
+ @param gain gain value
+ */
+ void SetGainMonoQHY5LII(qhyccd_handle *h,double gain);
+
+ /** @fn uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh)
+ @brief get the camera's ccd/cmos chip info
+ @param h camera control handle
+ @param chipw chip size width
+ @param chiph chip size height
+ @param imagew chip output image width
+ @param imageh chip output image height
+ @param pixelw chip pixel size width
+ @param pixelh chip pixel size height
+ @param bpp chip pixel depth
+ */
+ uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh,uint32_t *bpp);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ bool setParameters(qhyccd_handle *h,unsigned left, unsigned top, unsigned width, unsigned height, unsigned gain);
+private:
+ uint32_t bufferSize;
+ uint32_t flagquit,ryread;
+};
+#endif
diff --git a/include/qhy/qhy5hii.h b/include/qhy/qhy5hii.h
new file mode 100644
index 0000000..f429f04
--- /dev/null
+++ b/include/qhy/qhy5hii.h
@@ -0,0 +1,177 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5hii.h
+ * @brief QHY5HII class define
+ */
+
+#include "qhy5iibase.h"
+
+
+#ifndef QHY5HII_DEF
+#define QHY5HII_DEF
+
+/**
+ * @brief QHY5HII class define
+ *
+ * include all functions for QHY5HII-m
+ */
+class QHY5HII:public QHY5IIBASE
+{
+public:
+ QHY5HII();
+ ~QHY5HII();
+ /**
+ @fn void InitCmos(qhyccd_handle *h)
+ @brief Init the registers
+ @param h camera control handle
+ */
+ void InitCmos(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetPll(qhyccd_handle *h,uint8_t clk)
+ @brief set the cmos inter pll
+ @param h camera control handle
+ @param clk clock
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetPll(qhyccd_handle *h,uint8_t clk);
+
+private:
+ uint32_t expmode; //!< expose time mode
+ uint32_t pllratio; //!< inter pll ratio
+ uint32_t longtimeflag;
+
+};
+#endif
diff --git a/include/qhy/qhy5ii.h b/include/qhy/qhy5ii.h
new file mode 100644
index 0000000..73dc7ef
--- /dev/null
+++ b/include/qhy/qhy5ii.h
@@ -0,0 +1,169 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5ii.h
+ * @brief QHY5II class define
+ */
+
+#include "qhy5iibase.h"
+
+#ifndef QHY5II_DEF
+#define QHY5II_DEF
+
+/**
+ * @brief QHY5II class define
+ *
+ * include all functions for qhy5ii
+ */
+class QHY5II:public QHY5IIBASE
+{
+public:
+ QHY5II();
+ virtual ~QHY5II();
+
+ uint32_t IsChipHasFunction(CONTROL_ID controlId);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetPll(qhyccd_handle *h,uint8_t clk)
+ @brief set the cmos inter pll
+ @param h camera control handle
+ @param clk clock
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetPll(qhyccd_handle *h,uint8_t clk);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ uint32_t DeChipRowNoise(qhyccd_handle *h,uint32_t value);
+
+private:
+
+private:
+ //uint32_t pllratio; //!< inter pll ratio
+ //uint32_t longtimeflag;
+ bool lastDelRoiNoise;
+};
+#endif
diff --git a/include/qhy/qhy5iibase.h b/include/qhy/qhy5iibase.h
new file mode 100644
index 0000000..0e19efb
--- /dev/null
+++ b/include/qhy/qhy5iibase.h
@@ -0,0 +1,172 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5iibase.h
+ * @brief QHY5IIBASE class define
+ */
+
+#include "qhybase.h"
+
+#ifndef QHY5IIBASE_DEF
+#define QHY5IIBASE_DEF
+
+
+/**
+ * @brief QHY5RII_M class define
+ *
+ * include all functions for miniCam5s-m
+ */
+class QHY5IIBASE:public QHYBASE {
+public:
+ QHY5IIBASE();
+ virtual ~QHY5IIBASE();
+
+ static void ThreadCountExposureTime(void *p);
+ static void ThreadCancelExposingAndReadout(void *p);
+
+ virtual uint32_t BeginSingleExposure(qhyccd_handle *h);
+ virtual uint32_t CancelExposing(qhyccd_handle *handle);
+ virtual uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+ virtual uint32_t BeginLiveExposure(qhyccd_handle *h);
+ virtual uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ virtual uint32_t GetSingleFrame(qhyccd_handle *h, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+ virtual uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ void ThreadCountExposureTimeStart(void *p);
+ void ThreadCancelExposingAndReadoutStart(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera image bin mode
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime)
+ @brief send the command to camera's guide port
+ @param h camera control handle
+ @param Direction RA DEC
+ @param PulseTime the time last for command
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime);
+
+
+ /** @fn uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh)
+ @brief get the camera's ccd/cmos chip info
+ @param h camera control handle
+ @param chipw chip size width
+ @param chiph chip size height
+ @param imagew chip output image width
+ @param imageh chip output image height
+ @param pixelw chip pixel size width
+ @param pixelh chip pixel size height
+ @param bpp chip pixel depth
+ */
+ uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh,uint32_t *bpp);
+
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+
+ uint32_t SetGuideModeOnOff(qhyccd_handle *h,double mode);
+
+public:
+#ifdef WIN32
+ HANDLE hCountExpTimeThread;
+ HANDLE hCancelExposingAndReadoutThread;
+#endif
+ //uint32_t pllratio; //!< inter pll ratio
+ //uint32_t longtimeflag;
+ //uint32_t reg300c;
+ //uint32_t rgbgainb,rgbgainc;
+ //uint32_t rgbgainbluea,rgbgainreda;
+ //double wbred,wbblue,wbgreen;
+ //uint8_t islive;
+ uint8_t specialdropbychip;
+ uint8_t useGuideIn16bitMode;
+};
+#endif
diff --git a/include/qhy/qhy5iii128base.h b/include/qhy/qhy5iii128base.h
new file mode 100644
index 0000000..6e65941
--- /dev/null
+++ b/include/qhy/qhy5iii128base.h
@@ -0,0 +1,129 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy367m.h
+ * @brief QHY367M class define
+ */
+
+
+#ifndef _QHY5III128BASE_
+#define _QHY5III128BASE_
+
+#include "qhy5iiicoolbase.h"
+
+class QHY5III128BASE:public QHY5IIICOOLBASE {
+
+public:
+ QHY5III128BASE();
+ ~QHY5III128BASE();
+
+#ifdef WIN32
+ static void ExposureThreadRoutine(void *pDevHandle);
+#else
+ static void *ExposureThreadRoutine(void *pDevHandle);
+#endif
+ void StartExposureThread(qhyccd_handle *pDevHandle);
+
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+ uint32_t DisConnectCamera(qhyccd_handle *pHandle);
+
+ void CMOS_TakePhoto(qhyccd_handle *h);
+ uint32_t InitChipRegs(qhyccd_handle *h);
+ void SpiPath(qhyccd_handle *handle,uint8_t val);
+ void CMOSReset(qhyccd_handle *handle);
+ void FX3SPIMode(qhyccd_handle *handle);
+ void FPGASPIMode(qhyccd_handle *handle);
+ void SetFreqDiv(qhyccd_handle *handle,uint8_t val);
+ void IMX193_TakePhoto(qhyccd_handle *handle);
+ void SetFPGACrop(qhyccd_handle *handle,uint32_t x,uint32_t y);
+ void SetFPGAOutputBits(qhyccd_handle *handle,uint32_t val);
+ void WriteCMOSOffset(qhyccd_handle *handle,uint32_t val);
+ void WriteCMOSGain(qhyccd_handle *handle,uint32_t val);
+ void WriteFPGADigitalGain(qhyccd_handle *handle,uint32_t val);
+ void WriteCMOSAnalogGainRed(qhyccd_handle *handle,uint32_t val);
+ void WriteCMOSAnalogGainBlue(qhyccd_handle *handle,uint32_t val);
+ void WriteCMOSAnalogGainGreen(qhyccd_handle *handle,uint32_t val);
+ void AMPVControl(qhyccd_handle *handle,uint8_t val);
+ void InitSPISleep(qhyccd_handle *handle);
+ void WriteCMOS(qhyccd_handle *handle,uint16_t index,uint16_t val);
+ void WriteCMOSSHS(qhyccd_handle *handle,uint32_t val);
+ void SetCMOSCrop(qhyccd_handle *handle,uint32_t ystart,uint32_t ysize);
+ void SetSleepStart(qhyccd_handle *handle,uint16_t val);
+ void SetSleepEnd(qhyccd_handle *handle,uint16_t val);
+ void SetSleepFrames(qhyccd_handle *handle,uint16_t val);
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+ uint32_t SetChipBinMode(qhyccd_handle *h, uint32_t wbin, uint32_t hbin) ;
+
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+ void Sensor14bit_V_1_3(qhyccd_handle *h);
+ void Sensor10bit_V_1_3_h_3bin(qhyccd_handle *h);
+ void ResetParameters();
+ void UpdateParameters(qhyccd_handle *h);
+ uint32_t GeDDRBufferThreshold();
+ uint32_t GetUsedDdr(qhyccd_handle *pDevHandle, uint32_t *pDdr);
+private:
+#ifdef WIN32
+ HANDLE hCountExpTimeThread;
+#endif
+
+#ifdef LINUX
+ pthread_t m_expThreadHandle;
+#endif
+
+ double pllratio,oldpllratio; //!< inter pll ratio
+ uint32_t hmax_ref,vmax_ref;
+ uint32_t vmax,hmax,oldvmax,oldhmax;
+ uint32_t framelength,oldframelength;
+ uint32_t oldchipoutputsizex,oldchipoutputsizey,oldchipoutputbits;
+ uint32_t patchvnumber,oldpatchvnumber;
+ uint32_t shr,svr,spl,oldshr,oldsvr,oldspl;
+ double oldcamgain;
+ uint32_t oldcamoffset;
+ uint32_t oldusbtraffic;
+ uint8_t oldreg08,reg08,oldreg01,reg01;
+ uint8_t oldlockframe,lockframe;
+ uint8_t oldcamviewmode;
+ uint8_t oldcamampv;
+ uint16_t oldcamddr;
+ uint8_t forceupdate;
+ uint8_t locknum,oldlocknum;
+ double oldcamred2green,oldcamgreen,oldcamblue2green;
+ uint32_t sleepframes,oldsleepframes,initsingleframe;
+ uint32_t cutleftsize,cutrightsize,cuttopsize,cutbottomsize;
+ uint32_t ApproxDDR, ApproxDDR_Target;
+};
+#endif
diff --git a/include/qhy/qhy5iii163base.h b/include/qhy/qhy5iii163base.h
new file mode 100644
index 0000000..8562b52
--- /dev/null
+++ b/include/qhy/qhy5iii163base.h
@@ -0,0 +1,95 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iiiddrcoolbase.h"
+
+#ifndef _QHY5III163BASE_
+#define _QHY5III163BASE_
+
+class QHY5III163BASE : public QHY5IIIDDRCOOLBASE {
+public:
+ QHY5III163BASE();
+ virtual ~QHY5III163BASE();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposing(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t *pBpp, uint32_t *pChannels, uint8_t *pImgData);
+ static void ExposureThreadRoutine(void *pDevHandle);
+ void StartExposureThread(qhyccd_handle *pDevHandle);
+
+ void writeCMOS(qhyccd_handle *pDevHandle, int addr, int value);
+ uint32_t GetUsedDdr(qhyccd_handle *pDevHandle, uint32_t *pDdr);
+ uint32_t SetChipGain(qhyccd_handle *pDevHandle, double gain);
+ uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+ uint32_t SetChipWBRed(qhyccd_handle *pDevHandle, double red);
+ uint32_t SetChipWBBlue(qhyccd_handle *pDevHandle, double blue);
+ uint32_t SetChipExposeTime(qhyccd_handle *pDevHandle, double i);
+ void SetChipExposeTime_Internal(qhyccd_handle *pDevHandle,double i);
+
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId, double *min, double *max, double *step);
+ uint32_t SetChipOffset(qhyccd_handle *pDevHandle, double offset);
+ uint32_t SetChipBitsMode(qhyccd_handle *pDevHandle, uint32_t bits);
+ uint32_t SetChipResolution(qhyccd_handle *pDevHandle, uint32_t x, uint32_t y, uint32_t xsize, uint32_t ysize);
+ uint32_t SetFocusSetting(qhyccd_handle *pDevHandle, uint32_t focusCenterX, uint32_t focusCenterY);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *pDevHandle,uint32_t i);
+ uint32_t GeDDRBufferThreshold();
+ void initcmos(qhyccd_handle *pDevHandle);
+ void UpdateParameters(qhyccd_handle *pDevHandle);
+ void ResetParameters();
+ void WriteCMOS(qhyccd_handle *pDevHandle,uint16_t index,uint16_t val);
+ void WriteCMOSSHS(qhyccd_handle *pDevHandle,uint32_t val);
+
+private:
+ uint8_t oldcamddr;
+ uint8_t oldlockframe, lockframe;
+ uint8_t oldampv_onff, ampv_onff;
+
+ uint16_t digital_gain, analog_gain;
+
+ uint32_t hmax_ref, vmax_ref;
+ uint32_t vmax, hmax, oldvmax, oldhmax;
+ uint32_t framelength, oldframelength;
+ uint32_t oldchipoutputsizex, oldchipoutputsizey, oldchipoutputbits;
+ uint32_t patchvnumber, oldpatchvnumber;
+ uint32_t oldeleshutter, eleshutter;
+ uint32_t oldcamoffset;
+ uint32_t oldusbtraffic;
+ uint32_t oldampv_min, ampv_min, oldampv_max, ampv_max;
+ uint32_t ApproxDDR;
+ uint32_t ApproxDDR_Target;
+ uint32_t shr,svr,spl; //,oldshr,oldsvr,oldspl; // not used
+ uint32_t sleepframes; //,oldsleepframes,sleepmode,initsingleframe; // not used
+ int imageY;
+ double pllratio, oldpllratio; //!< inter pll ratio
+ double m_oldcamgain;
+
+//#ifdef LINUX
+// pthread_t m_expThreadHandle;
+//#endif
+
+};
+#endif
diff --git a/include/qhy/qhy5iii165base.h b/include/qhy/qhy5iii165base.h
new file mode 100644
index 0000000..d98637d
--- /dev/null
+++ b/include/qhy/qhy5iii165base.h
@@ -0,0 +1,171 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#ifndef _QHY5III165BASE_
+#define _QHY5III165BASE_
+
+#include "qhy5iiicoolbase.h"
+
+class QHY5III165BASE : public QHY5IIICOOLBASE {
+public:
+ QHY5III165BASE();
+ ~QHY5III165BASE();
+
+#ifdef WIN32
+ static void ExposureThreadRoutine(void *pDevHandle);
+#else
+ static void *ExposureThreadRoutine(void *pDevHandle);
+#endif
+ void StartExposureThread(qhyccd_handle *pDevHandle);
+
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+ uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+
+ uint32_t GetUsedDdr(qhyccd_handle *pDevHandle, uint32_t *pDdr);
+ uint32_t InitChipRegs(qhyccd_handle *pDevHandle);
+ void InitRegs(qhyccd_handle *pDevHandle);
+ void UpdateParameters(qhyccd_handle *pDevHandle);
+ void ResetParameters();
+ void InitSPISleep(qhyccd_handle *pDevHandle);
+ void WriteCMOSSHS(qhyccd_handle *pDevHandle, int32_t val);
+ void SetCMOSCrop(qhyccd_handle *pDevHandle, uint32_t ystart, uint32_t ysize);
+ uint32_t SetDDR(qhyccd_handle *pDevHandle, double value);
+ void SetFreqDiv(qhyccd_handle *pDevHandle, uint8_t val);
+ void CalcFreqDiv(qhyccd_handle *pDevHandle);
+ void WriteCMOSAnalogGainRed(qhyccd_handle *pDevHandle, uint16_t val);
+ void WriteCMOSAnalogGainGreen(qhyccd_handle *pDevHandle, uint16_t val);
+ void WriteCMOSAnalogGainBlue(qhyccd_handle *pDevHandle, uint16_t val);
+ void WriteCMOSOffset(qhyccd_handle *pDevHandle, uint16_t val);
+ void WriteFPGADigitalGain(qhyccd_handle *pDevHandle, uint16_t val);
+
+ uint32_t GeDDRBufferThreshold();
+ void FX3SPIMode(qhyccd_handle *pDevHandle);
+ void FPGASPIMode(qhyccd_handle *pDevHandle);
+ void WriteCMOS(qhyccd_handle *pDevHandle, uint16_t index, uint16_t val);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *pDevHandle, double gain);
+ uint32_t SetChipWBRed(qhyccd_handle *pDevHandle, double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *pDevHandle, double green);
+ uint32_t SetChipWBBlue(qhyccd_handle *pDevHandle, double blue);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *pDevHandle, double i);
+
+ void SetChipExposeTime_Internal(qhyccd_handle *pDevHandle, double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+ uint32_t SetChipOffset(qhyccd_handle *pDevHandle, double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *pDevHandle, uint32_t bits);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *pDevHandle, uint32_t i);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *pDevHandle, uint32_t x, uint32_t y, uint32_t xsize, uint32_t ysize);
+
+private:
+//#ifdef WIN32
+// HANDLE hCountExpTimeThread;
+//#endif
+
+#ifdef LINUX
+ pthread_t m_expThreadHandle;
+#endif
+
+ double pllratio,oldpllratio;
+ double oldcamred2green,oldcamgreen,oldcamblue2green,oldcamgain;
+ double oldcamampv;
+ // double oldframetime,frametime;
+ // double oldcamtime;
+
+ uint32_t hmax_ref,vmax_ref;
+ uint32_t vmax,hmax,oldvmax,oldhmax;
+ uint32_t framelength,oldframelength;
+ uint32_t oldchipoutputsizex,oldchipoutputsizey,oldchipoutputbits;
+ uint32_t patchvnumber,oldpatchvnumber;
+ uint32_t oldcamoffset;
+ //uint32_t oldusbtraffic;
+ uint32_t initsingleframe;
+ uint32_t cutleftsize,cutrightsize,cuttopsize,cutbottomsize;
+
+ uint32_t shr,svr,spl,oldshr,oldsvr,oldspl;
+
+ uint16_t oldsleepframes, sleepframes, oldcamddr;
+
+ uint8_t oldreg08,reg08,oldreg01,reg01;
+ uint8_t oldlockframe,lockframe;
+ //uint32_t ApproxDDR, ApproxDDR_Target;
+};
+#endif
diff --git a/include/qhy/qhy5iii168base.h b/include/qhy/qhy5iii168base.h
new file mode 100644
index 0000000..e05012d
--- /dev/null
+++ b/include/qhy/qhy5iii168base.h
@@ -0,0 +1,157 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#ifndef _QHY5III168BASE_
+#define _QHY5III168BASE_
+
+#include "qhy5iiicoolbase.h"
+
+class QHY5III168BASE:public QHY5IIICOOLBASE {
+public:
+ QHY5III168BASE();
+ ~QHY5III168BASE();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+
+ static void ThreadCountExposureTime(void *pDevHandle);
+ void ThreadCountExposureTimeStart(qhyccd_handle *pDevHandle);
+
+ uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+ void UpdateParameters(qhyccd_handle *pDevHandle);
+ void ResetParameters();
+ uint32_t GeDDRBufferThreshold() ;
+ uint32_t GetUsedDdr(qhyccd_handle *pDevHandle, uint32_t *pDdr);
+ uint32_t InitChipRegs(qhyccd_handle *pDevHandle);
+ void SetFreqDiv(qhyccd_handle *pDevHandle,uint8_t val);
+ void IMX071_TakePhoto(qhyccd_handle *pDevHandle);
+ void WriteCMOSOffset(qhyccd_handle *pDevHandle,uint32_t val);
+ void WriteCMOSAnalogGainRed(qhyccd_handle *pDevHandle,uint32_t val);
+ void WriteCMOSAnalogGainBlue(qhyccd_handle *pDevHandle,uint32_t val);
+ void WriteCMOSAnalogGainGreen(qhyccd_handle *pDevHandle,uint32_t val);
+ void InitSPISleep(qhyccd_handle *pDevHandle);
+ void FX3SPIMode(qhyccd_handle *pDevHandle);
+ void FPGASPIMode(qhyccd_handle *pDevHandle);
+ void WriteCMOS(qhyccd_handle *pDevHandle,uint16_t index,uint16_t val);
+ void WriteCMOSSHS(qhyccd_handle *pDevHandle,uint32_t val);
+ void SetCMOSCrop(qhyccd_handle *pDevHandle,uint32_t ystart,uint32_t ysize);
+ uint32_t SetDDR(qhyccd_handle *pDevHandle, double value);
+ void CalcFreqDiv(qhyccd_handle *pDevHandle);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *pDevHandle,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *pDevHandle,double gain);
+ uint32_t SetChipWBRed(qhyccd_handle *pDevHandle,double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *pDevHandle,double green);
+ uint32_t SetChipWBBlue(qhyccd_handle *pDevHandle,double blue);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *pDevHandle,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *pDevHandle,double i);
+ void SetChipExposeTime_Internal(qhyccd_handle *pDevHandle,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId, double *min,double *max,double *step);
+ uint32_t SetChipOffset(qhyccd_handle *pDevHandle,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *pDevHandle,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *pDevHandle,uint32_t bits);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *pDevHandle,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *pDevHandle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *pDevHandle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+private:
+ uint8_t oldlockframe,lockframe;
+ uint8_t digitalgain,olddigitalgain;
+ uint8_t oldcamviewmode;
+
+ uint32_t hmax_ref,vmax_ref;
+ uint32_t vmax,hmax,oldvmax,oldhmax;
+ uint32_t vmax_valid,oldvmax_valid,hmax_valid,oldhmax_valid;
+ uint32_t framelength,oldframelength;
+ uint32_t oldchipoutputsizex,oldchipoutputsizey,oldchipoutputbits;
+ uint32_t patchvnumber,oldpatchvnumber;
+ uint32_t oldcamoffset;
+ uint32_t oldusbtraffic;
+ uint32_t sleepframes,initsingleframe; //,oldsleepframes,sleepmode
+ uint32_t cutleftsize,cutrightsize1,cutrightsize2,cuttopsize1,cuttopsize2,cutbottomsize; //,cutbuttomsize;
+
+ uint32_t shr,svr,spl,oldshr,oldsvr,oldspl;
+ uint16_t oldcamddr;
+ uint32_t ApproxDDR;
+ uint32_t ApproxDDR_Target;
+ int flag_after_roi_change;
+
+ double oldcamgain; // oldcamblue2green,oldcamred2green,oldcamgreen,
+ double pllratio,oldpllratio; //!< inter pll ratio
+};
+
+#endif
diff --git a/include/qhy/qhy5iii174base.h b/include/qhy/qhy5iii174base.h
new file mode 100644
index 0000000..3326836
--- /dev/null
+++ b/include/qhy/qhy5iii174base.h
@@ -0,0 +1,114 @@
+ /*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iiicoolbase.h"
+
+#ifndef QHY5III174BASE_DEF
+#define QHY5III174BASE_DEF
+
+class QHY5III174BASE : public QHY5IIICOOLBASE {
+public:
+ QHY5III174BASE();
+ ~QHY5III174BASE();
+
+ //uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ double pllratio;
+ uint32_t hmax_ref, vmax_ref;
+};
+#endif
diff --git a/include/qhy/qhy5iii174c.h b/include/qhy/qhy5iii174c.h
new file mode 100644
index 0000000..946ae29
--- /dev/null
+++ b/include/qhy/qhy5iii174c.h
@@ -0,0 +1,54 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii174base.h"
+
+#ifndef QHY5III174_C_DEF
+#define QHY5III174_C_DEF
+
+class QHY5III174C : public QHY5III174BASE {
+public:
+ QHY5III174C();
+ ~QHY5III174C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy5iii174m.h b/include/qhy/qhy5iii174m.h
new file mode 100644
index 0000000..267ef5a
--- /dev/null
+++ b/include/qhy/qhy5iii174m.h
@@ -0,0 +1,54 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii174base.h"
+
+#ifndef QHY5III174_M_DEF
+#define QHY5III174_M_DEF
+
+class QHY5III174M : public QHY5III174BASE {
+public:
+ QHY5III174M();
+ ~QHY5III174M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy5iii178base.h b/include/qhy/qhy5iii178base.h
new file mode 100644
index 0000000..3cb14d0
--- /dev/null
+++ b/include/qhy/qhy5iii178base.h
@@ -0,0 +1,116 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iiicoolbase.h"
+
+#ifndef QHY5III178BASE_DEF
+#define QHY5III178BASE_DEF
+
+class QHY5III178BASE:public QHY5IIICOOLBASE {
+public:
+ QHY5III178BASE();
+ ~QHY5III178BASE();
+
+ //uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+private:
+ double pllratio;
+ uint32_t hmax_ref, vmax_ref;
+};
+#endif
diff --git a/include/qhy/qhy5iii178c.h b/include/qhy/qhy5iii178c.h
new file mode 100644
index 0000000..107e3c9
--- /dev/null
+++ b/include/qhy/qhy5iii178c.h
@@ -0,0 +1,47 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii178base.h"
+
+#ifndef QHY5III178C_DEF
+#define QHY5III178C_DEF
+
+class QHY5III178C:public QHY5III178BASE {
+public:
+ QHY5III178C();
+ ~QHY5III178C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy5iii178coolbase.h b/include/qhy/qhy5iii178coolbase.h
new file mode 100644
index 0000000..48a85d3
--- /dev/null
+++ b/include/qhy/qhy5iii178coolbase.h
@@ -0,0 +1,73 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5iii178coolbase.h
+ * @brief QHY5III178COOLBASE_DEF class define
+ */
+
+#ifndef _QHY5III178COOLBASE_
+#define _QHY5III178COOLBASE_
+
+#include "qhy5iiiddrcoolbase.h"
+
+/**
+ * @brief QHY5III178COOLBASE_DEF class define
+ *
+ * include all functions for qhy5iii178base
+ */
+class QHY5III178COOLBASE:public QHY5IIIDDRCOOLBASE {
+public:
+ QHY5III178COOLBASE();
+ ~QHY5III178COOLBASE();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+ uint32_t CancelExposing(qhyccd_handle *h);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+ uint32_t GetSingleFrame(qhyccd_handle *h, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ void WriteCMOS(qhyccd_handle *handle,uint16_t index,uint16_t val);
+ void WriteCMOSSHS(qhyccd_handle *handle,uint32_t val);
+ void WriteCMOSOffset(qhyccd_handle *handle,uint32_t val);
+ void WriteCMOSGain(qhyccd_handle *handle,uint32_t val);
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+ static void ThreadCountExposureTime(void *p);
+ void ThreadCountExposureTimeStart(qhyccd_handle *h);
+ uint32_t GeDDRBufferThreshold();
+
+private:
+ unsigned int ApproxDDR;
+ unsigned int ApproxDDR_Target;
+};
+
+#endif
diff --git a/include/qhy/qhy5iii178m.h b/include/qhy/qhy5iii178m.h
new file mode 100644
index 0000000..4fb28cb
--- /dev/null
+++ b/include/qhy/qhy5iii178m.h
@@ -0,0 +1,47 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii178base.h"
+
+#ifndef QHY5III178M_DEF
+#define QHY5III178M_DEF
+
+class QHY5III178M:public QHY5III178BASE {
+public:
+ QHY5III178M();
+ ~QHY5III178M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy5iii183base.h b/include/qhy/qhy5iii183base.h
new file mode 100644
index 0000000..c37b4c6
--- /dev/null
+++ b/include/qhy/qhy5iii183base.h
@@ -0,0 +1,99 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#ifndef _QHY5III183BASE_
+#define _QHY5III183BASE_
+
+#include "qhy5iiicoolbase.h"
+
+#define TOTAL_PIXELS_WIDTH 5640
+#define TOTAL_PIXELS_HEIGHT 3710
+
+class QHY5III183BASE:public QHY5IIICOOLBASE {
+public:
+ QHY5III183BASE();
+ ~QHY5III183BASE();
+/*
+ #ifdef WIN32
+ static void ExposureThreadRoutine(void *pDevHandle);
+ #else
+ static void *ExposureThreadRoutine(void *pDevHandle);
+ #endif
+ void StartExposureThread(qhyccd_handle *pDevHandle);
+*/
+// uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposing(qhyccd_handle *pDevHandle);
+
+ uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+
+// uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t *pBpp, uint32_t *pChannels, uint8_t *pImgData);
+ uint32_t GetLiveFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t *pBpp, uint32_t *pChannels, uint8_t *pImgData);
+
+ uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+
+ uint32_t InitChipRegs(qhyccd_handle *pDevHandle);
+ uint32_t SetChipGain(qhyccd_handle *pDevHandle,double gain);
+ uint32_t SetChipExposeTime(qhyccd_handle *pDevHandle, double i);
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min, double *max, double *step);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *pDevHandle,uint32_t i);
+ uint32_t SetChipOffset(qhyccd_handle *pDevHandle,double offset);
+ uint32_t SetChipBitsMode(qhyccd_handle *pDevHandle,uint32_t bits);
+ uint32_t SetChipResolution(qhyccd_handle *pDevHandle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+ uint32_t SetFocusSetting(qhyccd_handle *pDevHandle,uint32_t focusCenterX, uint32_t focusCenterY);
+ uint32_t SetStreamMode(qhyccd_handle *pDevHandle,uint8_t mode);
+ uint32_t GetUsedDdr(qhyccd_handle *pDevHandle, uint32_t *pDdr);
+ void UpdateParameters(qhyccd_handle *pDevHandle);
+ void ResetParameters();
+ void WriteCMOS(qhyccd_handle *pDevHandle,uint16_t index,uint16_t val);
+
+protected:
+
+#ifdef LINUX
+ pthread_t m_expThreadHandle;
+#endif
+
+ double oldcamgain;
+ double pllratio, oldpllratio;
+
+ uint8_t oldcamddr;
+ uint8_t oldlockframe, lockframe;
+ uint8_t oldampv_onff, ampv_onff;
+ uint8_t forcestop;
+
+ uint16_t vwinpos, oldvwinpos, vwidcut, oldvwidcut;
+
+ uint32_t hmax_ref, vmax_ref;
+ uint32_t vmax,hmax, oldvmax, oldhmax;
+ uint32_t framelength, oldframelength;
+ uint32_t oldchipoutputsizex, oldchipoutputsizey, oldchipoutputbits;
+ uint32_t patchvnumber, oldpatchvnumber;
+ uint32_t shr, svr, spl, oldshr, oldsvr, oldspl;
+ uint32_t oldcamoffset;
+ uint32_t oldusbtraffic;
+ uint32_t oldampv_min, ampv_min, oldampv_max, ampv_max;
+ uint32_t ApproxDDR, ApproxDDR_Target;
+};
+#endif
diff --git a/include/qhy/qhy5iii185base.h b/include/qhy/qhy5iii185base.h
new file mode 100644
index 0000000..754b146
--- /dev/null
+++ b/include/qhy/qhy5iii185base.h
@@ -0,0 +1,124 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5iii185c.h
+ * @brief QHY5III185C class define
+ */
+
+#include "qhy5iiicoolbase.h"
+
+#ifndef QHY5III185BASE_DEF
+#define QHY5III185BASE_DEF
+
+
+/**
+ * @brief QHY5III185C class define
+ *
+ * include all functions for qhy5iii185c
+ */
+class QHY5III185BASE:public QHY5IIICOOLBASE
+{
+public:
+ QHY5III185BASE();
+ ~QHY5III185BASE();
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ double pllratio; //!< inter pll ratio
+ uint32_t longtimeflag;
+ uint32_t hmax_ref,vmax_ref;
+};
+#endif
diff --git a/include/qhy/qhy5iii185c.h b/include/qhy/qhy5iii185c.h
new file mode 100644
index 0000000..f1c9090
--- /dev/null
+++ b/include/qhy/qhy5iii185c.h
@@ -0,0 +1,65 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5iii185c.h
+ * @brief QHY5III185C class define
+ */
+
+#include "qhy5iii185base.h"
+
+#ifndef QHY5III185_C_DEF
+#define QHY5III185_C_DEF
+
+
+/**
+ * @brief QHY5III185C class define
+ *
+ * include all functions for qhy5iii185c
+ */
+class QHY5III185C:public QHY5III185BASE
+{
+public:
+ QHY5III185C();
+ ~QHY5III185C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy5iii224base.h b/include/qhy/qhy5iii224base.h
new file mode 100644
index 0000000..963924d
--- /dev/null
+++ b/include/qhy/qhy5iii224base.h
@@ -0,0 +1,126 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy224c.h
+ * @brief QHY224C class define
+ */
+
+#include "qhy5iiicoolbase.h"
+
+#ifndef QHY5III224BASE_DEF
+#define QHY5III224BASE_DEF
+
+
+/**
+ * @brief QHY224C class define
+ *
+ * include all functions for qhy224c
+ */
+class QHY5III224BASE:public QHY5IIICOOLBASE
+{
+public:
+ QHY5III224BASE();
+ ~QHY5III224BASE();
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ double pllratio; //!< inter pll ratio
+ uint32_t longtimeflag;
+
+ uint32_t hmax_ref,vmax_ref;
+};
+#endif
diff --git a/include/qhy/qhy5iii224c.h b/include/qhy/qhy5iii224c.h
new file mode 100644
index 0000000..6bca143
--- /dev/null
+++ b/include/qhy/qhy5iii224c.h
@@ -0,0 +1,66 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5iii224c.h
+ * @brief QHY5III224C class define
+ */
+
+#include "qhy5iii224base.h"
+
+#ifndef QHY5III224_C_DEF
+#define QHY5III224_C_DEF
+
+
+/**
+ * @brief QHY5III224C class define
+ *
+ * include all functions for qhy5iii174m
+ */
+class QHY5III224C:public QHY5III224BASE
+{
+public:
+ QHY5III224C();
+ ~QHY5III224C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+};
+#endif
diff --git a/include/qhy/qhy5iii224coolbase.h b/include/qhy/qhy5iii224coolbase.h
new file mode 100644
index 0000000..9c4e3e8
--- /dev/null
+++ b/include/qhy/qhy5iii224coolbase.h
@@ -0,0 +1,121 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy224c.h
+ * @brief QHY224C class define
+ */
+
+#include "qhy5iiiddrcoolbase.h"
+
+#ifndef QHY5III224COOLBASE_DEF
+#define QHY5III224COOLBASE_DEF
+
+
+/**
+ * @brief QHY224C class define
+ *
+ * include all functions for qhy224c
+ */
+class QHY5III224COOLBASE:public QHY5IIIDDRCOOLBASE
+{
+public:
+ QHY5III224COOLBASE();
+ ~QHY5III224COOLBASE();
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+};
+#endif
diff --git a/include/qhy/qhy5iii236c.h b/include/qhy/qhy5iii236c.h
new file mode 100644
index 0000000..12ecb1e
--- /dev/null
+++ b/include/qhy/qhy5iii236c.h
@@ -0,0 +1,131 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5iii236c.h
+ * @brief QHY5III236C class define
+ */
+
+#include "qhybase.h"
+
+#ifndef QHY5III236C_DEF
+#define QHY5III236C_DEF
+
+
+/**
+ * @brief QHY5III236C class define
+ *
+ * include all functions for qhy5iii236c
+ */
+class QHY5III236C:public QHYBASE
+{
+public:
+ QHY5III236C();
+ ~QHY5III236C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+};
+#endif
diff --git a/include/qhy/qhy5iii247base.h b/include/qhy/qhy5iii247base.h
new file mode 100644
index 0000000..f0644d1
--- /dev/null
+++ b/include/qhy/qhy5iii247base.h
@@ -0,0 +1,149 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#ifndef _QHY5III247BASE_
+#define _QHY5III247BASE_
+
+#include "qhy5iiicoolbase.h"
+
+class QHY5III247BASE:public QHY5IIICOOLBASE {
+public:
+ QHY5III247BASE();
+ ~QHY5III247BASE();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t BeginLiveExposure(qhyccd_handle *pDeviceHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDeviceHandle);
+ uint32_t GetSingleFrame(qhyccd_handle *pDeviceHandle, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+
+ static void ThreadCountExposureTime(void *p);
+ void ThreadCountExposureTimeStart(qhyccd_handle *pDeviceHandle);
+ uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+
+ uint32_t InitChipRegs(qhyccd_handle *pDeviceHandle);
+ void UpdateParameters(qhyccd_handle *pDeviceHandle);
+ void ResetParameters();
+ void FX3SPIMode(qhyccd_handle *pDeviceHandle);
+ void FPGASPIMode(qhyccd_handle *pDeviceHandle);
+ void SetFreqDiv(qhyccd_handle *pDeviceHandle, uint8_t val);
+ void IMX193_TakePhoto(qhyccd_handle *pDeviceHandle);
+ void SetFPGACrop(qhyccd_handle *pDeviceHandle, uint32_t x, uint32_t y);
+ void WriteCMOSOffset(qhyccd_handle *pDeviceHandle, uint32_t val);
+ void WriteCMOSGain(qhyccd_handle *pDeviceHandle, uint32_t val);
+ void InitSPISleep(qhyccd_handle *pDeviceHandle);
+ void WriteCMOS(qhyccd_handle *pDeviceHandle, uint16_t index, uint16_t val);
+ void WriteCMOSSHS(qhyccd_handle *pDeviceHandle, uint32_t val);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *pDeviceHandle, double gain);
+ uint32_t SetChipWBRed(qhyccd_handle *pDeviceHandle, double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *pDeviceHandle, double green);
+ uint32_t SetChipWBBlue(qhyccd_handle *pDeviceHandle, double blue);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *pDeviceHandle,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ void SetChipExposeTime_Internal(qhyccd_handle *pDeviceHandle, double i);
+ uint32_t SetChipExposeTime(qhyccd_handle *pDeviceHandle, double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min, double *max, double *step);
+
+ uint32_t SetChipOffset(qhyccd_handle *pDeviceHandle, double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *pDeviceHandle,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *pDeviceHandle, uint32_t bits);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *pDeviceHandle, uint32_t i);
+ void SetCMOSCrop(qhyccd_handle *pDeviceHandle, uint32_t ystart, uint32_t ysize);
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *pDeviceHandle, uint32_t x, uint32_t y, uint32_t xsize, uint32_t ysize);
+
+private:
+ double pllratio,oldpllratio;
+ double /*oldcamblue2green,oldcamred2green,oldcamgreen,*/ oldcamgain;
+ uint32_t hmax_ref,vmax_ref;
+ uint32_t vmax,hmax,oldvmax,oldhmax;
+ uint32_t vmax_valid,oldvmax_valid,hmax_valid,oldhmax_valid;
+ uint32_t framelength,oldframelength;
+ uint32_t oldchipoutputsizex,oldchipoutputsizey,oldchipoutputbits;
+ uint32_t patchvnumber,oldpatchvnumber;
+ uint32_t oldcamoffset;
+ uint32_t oldusbtraffic;
+ uint32_t sleepframes,oldsleepframes,initsingleframe;
+ uint32_t cutleftsize,cutrightsize,cuttopsize,cutbottomsize;
+ uint32_t shr,svr,spl,oldshr,oldsvr,oldspl;
+ uint16_t oldcamddr;
+ uint8_t oldlockframe,lockframe;
+ uint8_t digitalgain,olddigitalgain;
+ uint8_t oldcamviewmode;
+ uint32_t ApproxDDR;
+ uint32_t ApproxDDR_Target;
+ int flag_after_roi_change;
+};
+
+#endif
diff --git a/include/qhy/qhy5iii290base.h b/include/qhy/qhy5iii290base.h
new file mode 100644
index 0000000..5914065
--- /dev/null
+++ b/include/qhy/qhy5iii290base.h
@@ -0,0 +1,151 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#define JS
+
+#include "qhy5iiicoolbase.h"
+
+#ifndef QHY5III290BASE_DEF
+#define QHY5III290BASE_DEF
+
+class QHY5III290BASE:public QHY5IIICOOLBASE {
+public:
+ QHY5III290BASE();
+ ~QHY5III290BASE();
+
+#ifndef JS
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposing(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+#endif
+
+ //uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+ void ResetParameters();
+ void UpdateParameters(qhyccd_handle *pDevHandle);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *pDevHandle, double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *pDevHandle, double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId, double *min, double *max, double *step);
+
+ uint32_t SetChipOffset(qhyccd_handle *pDevHandle, double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *pDevHandle, uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *pDevHandle, uint32_t x, uint32_t y, uint32_t xsize, uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *pDevHandle, uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ double pllratio;
+ uint32_t hmax_ref, vmax_ref;
+
+
+ double oldpllratio;
+ //double oldtotalcamred2green, totalcamred2green, oldtotalcamgreen, totalcamgreen;
+ double /*oldtotalcamblue2green, totalcamblue2green,*/ oldcamgain;
+ double oldcamampv;
+
+ int32_t shs, oldshs; //svr, spl, oldsvr, oldspl not used
+
+ uint32_t vmax, hmax, oldvmax, oldhmax;
+ //uint32_t vmax_valid, hmax_valid, oldvmax_valid, oldhmax_valid;
+ //uint32_t framelength, oldframelength;
+ uint32_t oldchipoutputsizex, oldchipoutputsizey, oldchipoutputbits;
+ //uint32_t patchvnumber, oldpatchvnumber;
+ uint32_t oldcamoffset;
+ //uint32_t oldusbtraffic;
+ uint32_t ampv_min, oldampv_min, ampv_max, oldampv_max;
+
+ //uint16_t chiproiy, oldchiproiy, chiproiysize, oldchiproiysize;
+ uint16_t winph, oldwinph, winwh, oldwinwh, winpv, oldwinpv, winwv, oldwinwv;
+
+ //uint8_t oldreg08, reg08, oldreg01, reg01;
+ //uint8_t oldlockframe, lockframe;
+ //uint8_t oldcamviewmode;
+
+};
+#endif
diff --git a/include/qhy/qhy5iii290c.h b/include/qhy/qhy5iii290c.h
new file mode 100644
index 0000000..03e1398
--- /dev/null
+++ b/include/qhy/qhy5iii290c.h
@@ -0,0 +1,47 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii290base.h"
+
+#ifndef QHY5III290C_DEF
+#define QHY5III290C_DEF
+
+class QHY5III290C:public QHY5III290BASE {
+public:
+ QHY5III290C();
+ ~QHY5III290C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ uint32_t GetChipMemoryLength();
+};
+#endif
diff --git a/include/qhy/qhy5iii290coolbase.h b/include/qhy/qhy5iii290coolbase.h
new file mode 100644
index 0000000..edd779e
--- /dev/null
+++ b/include/qhy/qhy5iii290coolbase.h
@@ -0,0 +1,110 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iiiddrcoolbase.h"
+
+#ifndef QHY5III290COOLBASE_DEF
+#define QHY5III290COOLBASE_DEF
+
+class QHY5III290COOLBASE:public QHY5IIIDDRCOOLBASE {
+public:
+ QHY5III290COOLBASE();
+ ~QHY5III290COOLBASE();
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+ void writeCMOS(qhyccd_handle *h,unsigned short index,unsigned char value);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
diff --git a/include/qhy/qhy5iii290m.h b/include/qhy/qhy5iii290m.h
new file mode 100644
index 0000000..1cf9457
--- /dev/null
+++ b/include/qhy/qhy5iii290m.h
@@ -0,0 +1,48 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iii290base.h"
+
+#ifndef QHY5III290M_DEF
+#define QHY5III290M_DEF
+
+class QHY5III290M:public QHY5III290BASE {
+public:
+ QHY5III290M();
+ ~QHY5III290M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ uint32_t GetChipMemoryLength();
+
+};
+#endif
diff --git a/include/qhy/qhy5iii367base.h b/include/qhy/qhy5iii367base.h
new file mode 100644
index 0000000..5b619d9
--- /dev/null
+++ b/include/qhy/qhy5iii367base.h
@@ -0,0 +1,189 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#ifndef _QHY5III367BASE_
+#define _QHY5III367BASE_
+
+#include "qhy5iiicoolbase.h"
+
+class QHY5III367BASE:public QHY5IIICOOLBASE {
+public:
+ QHY5III367BASE();
+ ~QHY5III367BASE();
+
+#ifdef WIN32
+ static void ExposureThreadRoutine(void *pDevHandle);
+#else
+ static void *ExposureThreadRoutine(void *pDevHandle);
+#endif
+ void StartExposureThread(qhyccd_handle *pDevHandle);
+
+ uint32_t GetSingleFrame(qhyccd_handle *pDevHandle, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+ uint32_t BeginSingleExposure(qhyccd_handle *pDevHandle);
+ uint32_t BeginLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t StopLiveExposure(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+ uint32_t DisConnectCamera(qhyccd_handle *pDevHandle);
+
+ void CMOS_TakePhoto(qhyccd_handle *pDevHandle);
+ uint32_t InitChipRegs(qhyccd_handle *pDevHandle);
+ void SpiPath(qhyccd_handle *pDevHandle, uint8_t val);
+ void CMOSReset(qhyccd_handle *pDevHandle);
+ void FX3SPIMode(qhyccd_handle *pDevHandle);
+ void FPGASPIMode(qhyccd_handle *pDevHandle);
+ void SetFreqDiv(qhyccd_handle *pDevHandle, uint8_t val);
+ void IMX193_TakePhoto(qhyccd_handle *pDevHandle);
+ void SetFPGACrop(qhyccd_handle *pDevHandle, uint32_t x, uint32_t y);
+ void SetFPGAOutputBits(qhyccd_handle *pDevHandle, uint32_t val);
+ void WriteCMOSOffset(qhyccd_handle *pDevHandle, uint32_t val);
+ void WriteCMOSGain(qhyccd_handle *pDevHandle, uint32_t val);
+ void WriteFPGADigitalGain(qhyccd_handle *pDevHandle, uint32_t val);
+ void WriteCMOSAnalogGainRed(qhyccd_handle *pDevHandle, uint32_t val);
+ void WriteCMOSAnalogGainBlue(qhyccd_handle *pDevHandle, uint32_t val);
+ void WriteCMOSAnalogGainGreen(qhyccd_handle *pDevHandle, uint32_t val);
+ void AMPVControl(qhyccd_handle *pDevHandle, uint8_t val);
+ void InitSPISleep(qhyccd_handle *pDevHandle);
+ void WriteCMOS(qhyccd_handle *pDevHandle, uint16_t index, uint16_t val);
+ void WriteCMOSSHS(qhyccd_handle *pDevHandle, uint32_t val);
+ void SetCMOSCrop(qhyccd_handle *pDevHandle, uint32_t ystart, uint32_t ysize);
+ void SetSleepStart(qhyccd_handle *pDevHandle, uint16_t val);
+ void SetSleepEnd(qhyccd_handle *pDevHandle, uint16_t val);
+ void SetSleepFrames(qhyccd_handle *pDevHandle, uint16_t val);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *pDevHandle, double gain);
+ uint32_t SetChipWBRed(qhyccd_handle *pDevHandle, double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *pDevHandle, double green);
+ uint32_t SetChipWBBlue(qhyccd_handle *pDevHandle, double blue);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *pDevHandle, uint32_t i);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *pDevHandle, double i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId, double *min, double *max, double *step);
+ uint32_t SetChipOffset(qhyccd_handle *pDevHandle, double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *pDevHandle, uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *pDevHandle, uint32_t x, uint32_t y, uint32_t xsize, uint32_t ysize);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *pDevHandle, uint32_t focusCenterX, uint32_t focusCenterY);
+ void Sensor14bit_V_1_3(qhyccd_handle *pDevHandle);
+ void Sensor10bit_V_1_3_h_3bin(qhyccd_handle *pDevHandle);
+ void ResetParameters();
+ void UpdateParameters(qhyccd_handle *pDevHandle);
+ uint32_t GeDDRBufferThreshold();
+
+private:
+#ifdef WIN32
+ HANDLE hCountExpTimeThread;
+#endif
+
+#ifdef LINUX
+ pthread_t m_expThreadHandle;
+#endif
+
+ double pllratio, oldpllratio;
+ double oldcamgain;
+ double oldcamred2green, oldcamgreen, oldcamblue2green;
+
+ uint32_t hmax_ref, vmax_ref;
+ uint32_t vmax,hmax, oldvmax, oldhmax;
+ uint32_t framelength, oldframelength;
+ uint32_t oldchipoutputsizex, oldchipoutputsizey, oldchipoutputbits;
+ uint32_t patchvnumber, oldpatchvnumber;
+ uint32_t oldcamoffset;
+ uint32_t oldusbtraffic;
+ uint32_t sleepframes, oldsleepframes, initsingleframe;
+ uint32_t cutleftsize, cutrightsize, cuttopsize, cutbottomsize;
+
+ uint32_t shr, svr, spl, oldshr, oldsvr, oldspl;
+
+ uint16_t oldcamddr;
+
+ uint8_t oldreg08, reg08, oldreg01, reg01;
+ uint8_t oldlockframe, lockframe;
+ uint8_t oldcamviewmode;
+ uint8_t oldcamampv;
+ uint8_t forceupdate;
+ uint8_t locknum, oldlocknum;
+};
+#endif
diff --git a/include/qhy/qhy5iiibase.h b/include/qhy/qhy5iiibase.h
new file mode 100644
index 0000000..acfd912
--- /dev/null
+++ b/include/qhy/qhy5iiibase.h
@@ -0,0 +1,116 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy5iiibase.h
+ * @brief QHYCCD QHY5IIIBASE class define
+ */
+
+#include "qhycam.h"
+#include "qhyccdcamdef.h"
+#include "qhyccderr.h"
+#include "log4z.h"
+#include "cmosdll.h"
+#include "stdint.h"
+#include "qhybase.h"
+
+#ifdef LINUX
+#include <pthread.h>
+#endif
+
+#ifndef __QHY5IIIBASEDEF_H__
+#define __QHY5IIIBASEDEF_H__
+
+/**
+ * the QHY5IIIBASE class description
+ */
+class QHY5IIIBASE : public QHYBASE {
+public:
+ QHY5IIIBASE();
+ virtual ~QHY5IIIBASE();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+ uint32_t CancelExposing(qhyccd_handle *handle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+ uint32_t InitChipRegs(qhyccd_handle *h);
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+ static void ThreadCancelExposingAndReadout(void *p);
+ void ThreadCancelExposingAndReadoutStart(qhyccd_handle *h);
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+ uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime);
+ void DDRResetControl(qhyccd_handle *handle,uint8_t val);
+ void ClearDDRPulse(qhyccd_handle *handle);
+ void SetDDRFullSize(qhyccd_handle *handle,uint32_t val);
+ void WriteFPGA(qhyccd_handle *handle,uint16_t index,uint16_t val);
+ void SetSleepStart(qhyccd_handle *handle,uint16_t val);
+ void SetSleepEnd(qhyccd_handle *handle,uint16_t val);
+ void SetSleepFrames(qhyccd_handle *handle,uint16_t val);
+ void SpiPath(qhyccd_handle *handle,uint8_t val);
+ void SetIDLE(qhyccd_handle *handle);
+ void ReleaseIDLE(qhyccd_handle *handle);
+ void CMOSReset(qhyccd_handle *handle);
+ void EnableLock(qhyccd_handle *handle);
+ void DisableLock(qhyccd_handle *handle);
+ void SetLockFrames(qhyccd_handle *handle,uint16_t val);
+ void IgnoreFrames(qhyccd_handle *handle,uint8_t val);
+ void SetPatchVPosition(qhyccd_handle *handle,uint32_t val);
+ void SetPatchFramePosition(qhyccd_handle *handle,uint8_t val);
+ void EnableDDR(qhyccd_handle *handle);
+ void DisableDDR(qhyccd_handle *handle);
+ void EnableReadFromDDR(qhyccd_handle *handle);
+ void DisableReadFromDDR(qhyccd_handle *handle);
+ unsigned int readDDRNum(qhyccd_handle *handle);
+ void SetHMAX(qhyccd_handle *handle,uint32_t val);
+ void SetVMAX(qhyccd_handle *handle,uint32_t val);
+ void AMPVControl(qhyccd_handle *handle,uint8_t val);
+ void SetAMPVStartPosition(qhyccd_handle *handle,uint32_t val);
+ void SetAMPVEndPosition(qhyccd_handle *handle,uint32_t val);
+ void SetFPGAOutputBits(qhyccd_handle *handle,uint32_t val);
+ void SetFPGACrop(qhyccd_handle *handle,uint32_t x,uint32_t y);
+ void WriteFPGADigitalGain(qhyccd_handle *handle,uint32_t val);
+ void ManualAMPON(qhyccd_handle *handle);
+ void ManualAMPOFF(qhyccd_handle *handle);
+
+public:
+#ifdef WIN32
+ HANDLE hCancelExposingAndReadoutThread;
+#endif
+ uint8_t specialdropbychip;
+ uint8_t readnum;
+ bool qhy367sleepthread;
+};
+
+#endif
diff --git a/include/qhy/qhy5iiicommon.h b/include/qhy/qhy5iiicommon.h
new file mode 100644
index 0000000..e837545
--- /dev/null
+++ b/include/qhy/qhy5iiicommon.h
@@ -0,0 +1,61 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy367m.h
+ * @brief QHY367M class define
+ */
+
+#include "qhy5iiibase.h"
+
+#ifndef QHY5IIICOMMONBASE_DEF
+#define QHY5IIICOMMONBASE_DEF
+
+/**
+ * @brief QHY367M class define
+ *
+ * include all functions for qhy367m
+ */
+class QHY5IIICOMMON:public QHY5IIIBASE {
+public:
+ QHY5IIICOMMON();
+ virtual ~QHY5IIICOMMON();
+
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ uint32_t InitChipRegs(qhyccd_handle *h);
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+ uint32_t GetChipMemoryLength();
+ uint32_t IsChipHasFunction(CONTROL_ID controlId);
+};
+#endif
diff --git a/include/qhy/qhy5iiicoolbase.h b/include/qhy/qhy5iiicoolbase.h
new file mode 100644
index 0000000..9a80123
--- /dev/null
+++ b/include/qhy/qhy5iiicoolbase.h
@@ -0,0 +1,57 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhycam.h"
+#include "qhyccdcamdef.h"
+#include "qhyccderr.h"
+#include "log4z.h"
+#include "cmosdll.h"
+#include "stdint.h"
+#include "qhy5iiibase.h"
+
+#ifndef __QHY5IIICOOLBASEDEF_H__
+#define __QHY5IIICOOLBASEDEF_H__
+
+class QHY5IIICOOLBASE : public QHY5IIIBASE {
+
+public:
+ uint8_t firstcheckfilters;
+
+public:
+ QHY5IIICOOLBASE();
+ virtual ~QHY5IIICOOLBASE();
+
+ double GetChipCoolTemp(qhyccd_handle *pDevHandle);
+ double GetChipCoolPWM();
+ uint32_t AutoTempControl(qhyccd_handle *pDevHandle,double ttemp);
+ uint32_t SetChipCoolPWM(qhyccd_handle *pDevHandle,double PWM);
+ uint32_t SendOrder2CFW(qhyccd_handle *pDevHandle,char *order,uint32_t length);
+ uint32_t GetCFWStatus(qhyccd_handle *pDevHandle,char *status);
+ uint32_t IsCFWPlugged(qhyccd_handle *pDevHandle);
+ uint32_t GetCFWSlotsNum(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposing(qhyccd_handle *pDevHandle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *pDevHandle);
+};
+
+#endif
diff --git a/include/qhy/qhy5iiiddrcoolbase.h b/include/qhy/qhy5iiiddrcoolbase.h
new file mode 100644
index 0000000..ebcee9b
--- /dev/null
+++ b/include/qhy/qhy5iiiddrcoolbase.h
@@ -0,0 +1,51 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhy5iiicoolbase.h"
+
+#ifndef QHY5IIIDDRCOOLBASE_DEF
+#define QHY5IIIDDRCOOLBASE_DEF
+
+class QHY5IIIDDRCOOLBASE : public QHY5IIICOOLBASE {
+public:
+ double pllratio;
+ uint32_t hmax_ref,vmax_ref;
+ uint32_t hmax,vmax;
+ uint16_t vwinpos,vwidcut;
+ uint32_t patchvnumberstart;
+
+ public:
+ QHY5IIIDDRCOOLBASE();
+ virtual ~QHY5IIIDDRCOOLBASE();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+ uint32_t CancelExposing(qhyccd_handle *h);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+};
+
+#endif
diff --git a/include/qhy/qhy5iiig400m.h b/include/qhy/qhy5iiig400m.h
new file mode 100644
index 0000000..83f2e2a
--- /dev/null
+++ b/include/qhy/qhy5iiig400m.h
@@ -0,0 +1,150 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5iiig400m.h
+ * @brief QHY5IIIG400M class define
+ */
+
+#include "qhy5iiibase.h"
+
+#ifndef QHY5IIIG400_M_DEF
+#define QHY5IIIG400_M_DEF
+
+
+/**
+ * @brief QHY5IIIG400M class define
+ *
+ * include all functions for qhy5iiig400m
+ */
+class QHY5IIIG400M:public QHY5IIIBASE
+{
+public:
+ QHY5IIIG400M();
+ ~QHY5IIIG400M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ uint32_t GetChipMemoryLength();
+
+//private:
+// double pllratio; //!< inter pll ratio
+// uint32_t longtimeflag;
+};
+#endif
diff --git a/include/qhy/qhy5lii_c.h b/include/qhy/qhy5lii_c.h
new file mode 100644
index 0000000..a24f61f
--- /dev/null
+++ b/include/qhy/qhy5lii_c.h
@@ -0,0 +1,70 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5lii_c.h
+ * @brief QHY5LII_C class define
+ */
+
+#include "qhy5liibase.h"
+
+#ifndef QHY5LII_C_DEF
+#define QHY5LII_C_DEF
+
+/**
+ * @brief QHY5LII_C class define
+ *
+ * include all functions for qhy5lii-c
+ */
+class QHY5LII_C:public QHY5LIIBASE
+{
+public:
+ QHY5LII_C();
+ virtual ~QHY5LII_C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+
+
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+private:
+};
+#endif
diff --git a/include/qhy/qhy5lii_lowlevel.h b/include/qhy/qhy5lii_lowlevel.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/include/qhy/qhy5lii_lowlevel.h
diff --git a/include/qhy/qhy5lii_m.h b/include/qhy/qhy5lii_m.h
new file mode 100644
index 0000000..109d4fa
--- /dev/null
+++ b/include/qhy/qhy5lii_m.h
@@ -0,0 +1,65 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5lii_m.h
+ * @brief QHY5LII_M class define
+ */
+
+#include "qhy5liibase.h"
+
+#ifndef QHY5LII_M_DEF
+#define QHY5LII_M_DEF
+
+/**
+ * @brief QHY5LII_M class define
+ *
+ * include all functions for qhy5lii-m
+ */
+class QHY5LII_M:public QHY5LIIBASE
+{
+public:
+ QHY5LII_M();
+ virtual ~QHY5LII_M();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+};
+#endif
diff --git a/include/qhy/qhy5liibase.h b/include/qhy/qhy5liibase.h
new file mode 100644
index 0000000..4e50926
--- /dev/null
+++ b/include/qhy/qhy5liibase.h
@@ -0,0 +1,210 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5lii_c.h
+ * @brief QHY5LII_C class define
+ */
+
+#include "qhy5iibase.h"
+
+#ifndef QHY5LIIBASE_DEF
+#define QHY5LIIBASE_DEF
+
+/**
+ * @brief QHY5LII_C class define
+ *
+ * include all functions for qhy5lii-c
+ */
+class QHY5LIIBASE:public QHY5IIBASE {
+public:
+ QHY5LIIBASE();
+ virtual ~QHY5LIIBASE();
+
+ virtual uint32_t BeginSingleExposure(qhyccd_handle *h);
+ virtual uint32_t CancelExposing(qhyccd_handle *h);
+ virtual uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+ virtual uint32_t BeginLiveExposure(qhyccd_handle *h);
+ virtual uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ virtual uint32_t GetSingleFrame(qhyccd_handle *h, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+ virtual uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn void InitCmos(qhyccd_handle *h)
+ @brief Init the registers
+ @param h camera control handle
+ */
+ void InitCmos(qhyccd_handle *h);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double time)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param time expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double time);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera image bin mode
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn double SetPll(qhyccd_handle *h,uint8_t clk)
+ @brief set the cmos inter pll
+ @param h camera control handle
+ @param clk clock
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double SetPll(qhyccd_handle *h,uint8_t clk);
+
+ /**
+ @fn void SWIFT_MSBLSB(uint8_t *ImgData)
+ @brief switch the image pixel data to right position
+ @param ImgData image buffer
+ */
+ void SWIFT_MSBLSB(uint8_t *ImgData);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ void UpdateParameters(qhyccd_handle *h);
+ void ResetParameters();
+
+ uint32_t expmode; //!< expose time mode
+ double pllratio; //!< inter pll ratio
+ uint32_t longtimeflag;
+
+ uint32_t timerregs,oldtimerregs,reg3012,oldreg3012,reg300c,oldreg300c;
+ uint32_t reg30b0,oldreg30b0,reg3ee4,oldreg3ee4;
+ uint32_t reg3058,oldreg3058,reg305a,oldreg305a,reg305c,oldreg305c,reg3056,oldreg3056;
+ uint32_t reg305e,oldreg305e;
+ uint32_t reg3064,oldreg3064;
+ uint32_t reg302a,oldreg302a,reg302c,oldreg302c,reg302e,oldreg302e,reg3030,oldreg3030,reg3082,oldreg3082;
+ uint32_t reg3002,oldreg3002,reg3004,oldreg3004,reg3006,oldreg3006,reg3008,oldreg3008,reg300a,oldreg300a,reg301a,oldreg301a;
+
+ uint32_t oldchipoutputsizex,oldchipoutputsizey,oldchipoutputbits;
+ uint32_t oldusbspeed;
+ uint32_t oldlongtimeflag;
+};
+#endif
diff --git a/include/qhy/qhy5pii_c.h b/include/qhy/qhy5pii_c.h
new file mode 100644
index 0000000..25f7846
--- /dev/null
+++ b/include/qhy/qhy5pii_c.h
@@ -0,0 +1,191 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5pii_c.h
+ * @brief QHY5II class define
+ */
+
+#include "qhy5iibase.h"
+
+#ifndef QHY5PII_C_DEF
+#define QHY5PII_C_DEF
+
+/**
+ * @brief QHY5PII_C class define
+ *
+ * include all functions for qhy5pii_c
+ */
+class QHY5PII_C:public QHY5IIBASE
+{
+public:
+ QHY5PII_C();
+ ~QHY5PII_C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+
+ /**
+ @fn uint32_t SetColorGain(qhyccd_handle *h,double gain, double RG, double BG)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @param RG red color gain
+ @param BG blue color gain
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetColorGain(qhyccd_handle *h,double gain, double RG, double BG);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetPll(qhyccd_handle *h,uint8_t clk)
+ @brief set the cmos inter pll
+ @param h camera control handle
+ @param clk clock
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ //uint32_t SetPll(qhyccd_handle *h,uint8_t clk);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ //uint32_t pllratio; //!< inter pll ratio
+ //uint32_t longtimeflag;
+};
+#endif
diff --git a/include/qhy/qhy5pii_m.h b/include/qhy/qhy5pii_m.h
new file mode 100644
index 0000000..af5f883
--- /dev/null
+++ b/include/qhy/qhy5pii_m.h
@@ -0,0 +1,172 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5pii_m.h
+ * @brief QHY5II class define
+ */
+
+#include "qhy5iibase.h"
+
+#ifndef QHY5PII_M_DEF
+#define QHY5PII_M_DEF
+
+/**
+ * @brief QHY5PII_M class define
+ *
+ * include all functions for qhy5pii_m
+ */
+class QHY5PII_M:public QHY5IIBASE
+{
+public:
+ QHY5PII_M();
+ ~QHY5PII_M();
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetPll(qhyccd_handle *h,uint8_t clk)
+ @brief set the cmos inter pll
+ @param h camera control handle
+ @param clk clock
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ //uint32_t SetPll(qhyccd_handle *h,uint8_t clk);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ //double pllratio; //!< inter pll ratio
+ //uint32_t longtimeflag;
+
+};
+#endif
diff --git a/include/qhy/qhy5rii_m.h b/include/qhy/qhy5rii_m.h
new file mode 100644
index 0000000..2e9217d
--- /dev/null
+++ b/include/qhy/qhy5rii_m.h
@@ -0,0 +1,182 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5rii_m.h
+ * @brief MINICAM5S_M class define
+ */
+
+#include "qhy5iibase.h"
+
+
+#ifndef QHY5RII_M_DEF
+#define QHY5RII_M_DEF
+
+
+/**
+ * @brief QHY5RII_M class define
+ *
+ * include all functions for miniCam5s-m
+ */
+class QHY5RII_M:public QHY5IIBASE {
+public:
+ QHY5RII_M();
+ ~QHY5RII_M();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn void InitCmos(qhyccd_handle *h)
+ @brief Init the registers
+ @param h camera control handle
+ */
+ void InitCmos(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ uint32_t SetChipOffset(qhyccd_handle *h, double offset);
+
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ //uint32_t longtimeflag;
+ uint32_t reg300c;
+ uint32_t rgbgainb,rgbgainc;
+ uint32_t rgbgainbluea,rgbgainreda;
+};
+#endif
diff --git a/include/qhy/qhy5tii_c.h b/include/qhy/qhy5tii_c.h
new file mode 100644
index 0000000..25490e2
--- /dev/null
+++ b/include/qhy/qhy5tii_c.h
@@ -0,0 +1,191 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file qhy5pii_c.h
+ * @brief QHY5II class define
+ */
+
+#include "qhy5iibase.h"
+
+#ifndef QHY5TII_C_DEF
+#define QHY5TII_C_DEF
+
+/**
+ * @brief QHY5TII_C class define
+ *
+ * include all functions for qhy5tii_c
+ */
+class QHY5TII_C:public QHY5IIBASE
+{
+public:
+ QHY5TII_C();
+ ~QHY5TII_C();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ uint32_t SetChipWBRed(qhyccd_handle *h,double red);
+
+ uint32_t SetChipWBGreen(qhyccd_handle *h,double green);
+
+ uint32_t SetChipWBBlue(qhyccd_handle *h,double blue);
+
+ /**
+ @fn uint32_t SetColorGain(qhyccd_handle *h,double gain, double RG, double BG)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @param RG red color gain
+ @param BG blue color gain
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetColorGain(qhyccd_handle *h,double gain, double RG, double BG);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetPll(qhyccd_handle *h,uint8_t clk)
+ @brief set the cmos inter pll
+ @param h camera control handle
+ @param clk clock
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ //uint32_t SetPll(qhyccd_handle *h,uint8_t clk);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+private:
+ //uint32_t pllratio; //!< inter pll ratio
+ //uint32_t longtimeflag;
+};
+#endif
diff --git a/include/qhy/qhy6.h b/include/qhy/qhy6.h
new file mode 100644
index 0000000..6a82daf
--- /dev/null
+++ b/include/qhy/qhy6.h
@@ -0,0 +1,298 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy6.h
+ * @brief QHY6 class define
+ */
+
+#include "qhybase.h"
+
+
+#ifndef __QHY6DEF_H__
+#define __QHY6DEF_H__
+
+#define GUIDE_EAST 0x00010010 /* 0 RA+ */
+#define GUIDE_NORTH 0x00020020 /* 1 DEC+ */
+#define GUIDE_SOUTH 0x00020040 /* 2 DEC- */
+#define GUIDE_WEST 0x00010080 /* 3 RA- */
+
+/**
+ * @brief QHY6 class define
+ *
+ * include all functions for QHY6
+ */
+class QHY6:public QHYBASE
+{
+public:
+ QHY6();
+ ~QHY6();
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopSingleExposure(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime)
+ @brief send the command to camera's guide port
+ @param h camera control handle
+ @param Direction RA DEC
+ @param PulseTime the time last for command
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime);
+};
+#endif
+
diff --git a/include/qhy/qhy695a.h b/include/qhy/qhy695a.h
new file mode 100644
index 0000000..6c4ce5a
--- /dev/null
+++ b/include/qhy/qhy695a.h
@@ -0,0 +1,98 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy695a.h
+ * @brief QHY695A class define
+ */
+
+#include "qhyabase.h"
+
+#ifndef __QHY695ADEF_H__
+#define __QHY695ADEF_H__
+
+/**
+ * @brief QHY695A class define
+ *
+ * include all functions for QHY695A
+ */
+class QHY695A:public QHYABASE
+{
+public:
+ QHY695A();
+ ~QHY695A();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ double GetChipCoolPWM();
+
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+
+};
+#endif
+
diff --git a/include/qhy/qhy7.h b/include/qhy/qhy7.h
new file mode 100644
index 0000000..fac6e9b
--- /dev/null
+++ b/include/qhy/qhy7.h
@@ -0,0 +1,362 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy7.h
+ * @brief QHY7 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY7DEF_H__
+#define __QHY7DEF_H__
+
+/**
+ * @brief QHY7 class define
+ *
+ * include all functions for qhy7
+ */
+class QHY7:public QHYBASE
+{
+public:
+ QHY7();
+ ~QHY7();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy8.h b/include/qhy/qhy8.h
new file mode 100644
index 0000000..c1448f2
--- /dev/null
+++ b/include/qhy/qhy8.h
@@ -0,0 +1,363 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy8.h
+ * @brief QHY8 class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY8DEF_H__
+#define __QHY8DEF_H__
+
+/**
+ * @brief QHY8 class define
+ *
+ * include all functions for QHY8
+ */
+class QHY8:public QHYBASE
+{
+public:
+ QHY8();
+ ~QHY8();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopSingleExposure(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy814a.h b/include/qhy/qhy814a.h
new file mode 100644
index 0000000..0584fc4
--- /dev/null
+++ b/include/qhy/qhy814a.h
@@ -0,0 +1,74 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy814a.h
+ * @brief QHY814A class define
+ */
+
+#include "qhyabase.h"
+
+#ifndef __QHY814ADEF_H__
+#define __QHY814ADEF_H__
+
+/**
+ * @brief IC8300 class define
+ *
+ * include all functions for ic8300
+ */
+class QHY814A:public QHYABASE
+{
+public:
+ QHY814A();
+ ~QHY814A();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+
+ uint32_t SetFocusSetting(qhyccd_handle *h, uint32_t focusCenterX, uint32_t focusCenterY);
+
+ double GetChipCoolPWM();
+
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
+
diff --git a/include/qhy/qhy814g.h b/include/qhy/qhy814g.h
new file mode 100644
index 0000000..32371af
--- /dev/null
+++ b/include/qhy/qhy814g.h
@@ -0,0 +1,311 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy814g.h
+ * @brief QHY814G class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY814GDEF_H__
+#define __QHY814GDEF_H__
+
+/**
+ * @brief QHY16000G class define
+ *
+ * include all functions for QHY814G
+ */
+class QHY814G:public QHYBASE
+{
+public:
+ QHY814G();
+ ~QHY814G();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+
+ */
+ uint32_t SetChipDepth(qhyccd_handle *h,uint32_t depth);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode)
+ @brief Set the camera's mode to chose the way reading data from camera
+ @param handle camera control handle
+ @param mode the stream mode \n
+ 0x00:default mode,single frame mode \n
+ 0x01:live mode \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+
+};
+#endif
+
diff --git a/include/qhy/qhy8l.h b/include/qhy/qhy8l.h
new file mode 100644
index 0000000..99d13c7
--- /dev/null
+++ b/include/qhy/qhy8l.h
@@ -0,0 +1,326 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy8l.h
+ * @brief QHY8L class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY8LDEF_H__
+#define __QHY8LDEF_H__
+
+/**
+ * @brief QHY8L class define
+ *
+ * include all functions for ic8300
+ */
+class QHY8L:public QHYBASE
+{
+public:
+ QHY8L();
+ ~QHY8L();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy8pro.h b/include/qhy/qhy8pro.h
new file mode 100644
index 0000000..908fb0f
--- /dev/null
+++ b/include/qhy/qhy8pro.h
@@ -0,0 +1,363 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy8pro.h
+ * @brief QHY8PRO class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY8PRODEF_H__
+#define __QHY8PRODEF_H__
+
+/**
+ * @brief QHY8PRO class define
+ *
+ * include all functions for QHY8PRO
+ */
+class QHY8PRO:public QHYBASE
+{
+public:
+ QHY8PRO();
+ ~QHY8PRO();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopSingleExposure(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+};
+#endif
+
diff --git a/include/qhy/qhy90a.h b/include/qhy/qhy90a.h
new file mode 100644
index 0000000..b556375
--- /dev/null
+++ b/include/qhy/qhy90a.h
@@ -0,0 +1,83 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy90a.h
+ * @brief QHY90A class define
+ */
+
+#ifndef __QHY90ADEF_H__
+#define __QHY90ADEF_H__
+
+#include "qhyabase.h"
+
+/**
+ * @brief QHY90A class define
+ *
+ * include all functions for QHY90A
+ */
+class QHY90A:public QHYABASE
+{
+public:
+ QHY90A();
+ ~QHY90A();
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ double GetChipCoolPWM();
+
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+private:
+ double lastTargetTemp;
+ double lastPWM;
+};
+#endif
+
diff --git a/include/qhy/qhy9s.h b/include/qhy/qhy9s.h
new file mode 100644
index 0000000..93ffada
--- /dev/null
+++ b/include/qhy/qhy9s.h
@@ -0,0 +1,344 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy9s.h
+ * @brief QHY9S class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY9SDEF_H__
+#define __QHY9SDEF_H__
+
+/**
+ * @brief QHY9S class define
+ *
+ * include all functions for QHY9S
+ */
+class QHY9S:public QHYBASE
+{
+public:
+ QHY9S();
+ ~QHY9S();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the char* order string length. eg: char* = "12". length = 2
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin33 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status)
+ @brief control camera's shutter
+ @param handle camera control handle
+ @param status the shutter status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status);
+};
+#endif
+
diff --git a/include/qhy/qhy9t.h b/include/qhy/qhy9t.h
new file mode 100644
index 0000000..37fca4e
--- /dev/null
+++ b/include/qhy/qhy9t.h
@@ -0,0 +1,323 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhy9t.h
+ * @brief QHY9T class define
+ */
+
+#include "qhybase.h"
+
+#ifndef __QHY9TDEF_H__
+#define __QHY9TDEF_H__
+
+/**
+ * @brief QHY9T class define
+ *
+ * include all functions for QHY9T
+ */
+class QHY9T:public QHYBASE
+{
+public:
+ QHY9T();
+ ~QHY9T();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin11 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin22 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn double InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin33 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN33Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+
+ /**
+ @fn double InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief init the bin44 mode setting
+ @param x the image top left x position
+ @param y the image top left y position
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode(uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+};
+#endif
+
diff --git a/include/qhy/qhyabase.h b/include/qhy/qhyabase.h
new file mode 100644
index 0000000..3eface8
--- /dev/null
+++ b/include/qhy/qhyabase.h
@@ -0,0 +1,427 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhyabase.h
+ * @brief QHYABASE class define
+ */
+
+#ifndef QHYABASE_CLASS
+#define QHYABASE_CLASS
+
+#include "qhybase.h"
+
+/**
+ * @brief QHYABASE class define
+ *
+ * include all functions for QHYABASE
+ */
+class QHYABASE:public QHYBASE
+{
+public:
+ QHYABASE();
+ ~QHYABASE();
+
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+ uint32_t CancelExposing(qhyccd_handle *handle);
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ static void ThreadCancelExposingAndReadout(void *p);
+ void ThreadCancelExposingAndReadoutStart(qhyccd_handle *h);
+
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ static void ThreadCountExposureTime(void *p);
+
+ void ThreadCountExposureTimeStart(void *p);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+ /** @fn virtual uint32_t SetInterCamSerialParam(qhyccd_handle *h,uint32_t opt)
+ @brief Set InterCam serial2 params
+ @param h camera control handle
+ @param opt the param
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetInterCamSerialParam(qhyccd_handle *h,uint32_t opt);
+
+ /** @fn virtual uint32_t InterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length)
+ @brief Send data to InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @param length the length to send
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length);
+
+
+ /** @fn virtual uint32_t InterCamSerialRX(qhyccd_handle *h,char *buf)
+ @brief Get data from InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @return
+ on success,return the data number \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamSerialRX(qhyccd_handle *h,char *buf);
+
+ /** @fn virtual uint32_t Send2OledFast(qhyccd_handle *h,char *buffer)
+ @brief send data to show on InterCam's OLED
+ @param h camera control handle
+ @param buffer buffer for data
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2OledFast(qhyccd_handle *h,uint8_t *buffer);
+
+ /** @fn uint32_t InterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff)
+ @brief turn off or turn on the InterCam's Oled
+ @param handle camera control handle
+ @param onoff on or off the oled \n
+ 1:on \n
+ 0:off \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff);
+
+ /** @fn uint32_t SetInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness)
+ @brief send data to show on InterCam's OLED
+ @param handle camera control handle
+ @param brightness the oled's brightness
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness);
+
+ uint32_t SendFourLine2InterCamOled(qhyccd_handle *handle,char *messagetemp,char *messageinfo,char *messagetime,char *messagemode);
+
+ /** @fn uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom)
+ @brief spilit the message to two line,send to camera
+ @param handle camera control handle
+ @param messageTop message for the oled's 1st line
+ @param messageBottom message for the oled's 2nd line
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom);
+
+ /**
+ @fn uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle,char *messageTop)
+ @brief spilit the message to two line,send to camera
+ @param handle camera control handle
+ @param messageTop message for all the oled
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle,char *messageTop);
+
+ /**
+ @fn uint32_t GetCameraStatus(qhyccd_handle *h,uint8_t *buf)
+ @brief Get camera status
+ @param h camera control handle
+ @param buf camera's status save space
+ @return
+ on success,return the camera statu \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCameraStatus(qhyccd_handle *h,uint8_t *buf);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief control color filter wheel
+ @param handle camera control handle
+ @param order order send to color filter wheel
+ @param length the order string length
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status)
+ @brief control camera's shutter
+ @param handle camera control handle
+ @param status the shutter status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status);
+
+ /**
+ @fn uint32_t GetShutterStatus(qhyccd_handle *handle)
+ @brief get the camera's shutter status
+ @param handle camera control handle
+ @return
+ on success,return status \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetShutterStatus(qhyccd_handle *handle);
+
+ uint32_t GetHumidity(qhyccd_handle *handle,double *hd);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+
+ double GetReadingProgress(qhyccd_handle *handle);
+
+ uint32_t GetPreProcessInfoFromEEPROM(qhyccd_handle *h);
+
+ uint32_t widthmax;
+ uint32_t heightmax;
+
+ uint32_t curOverScanX;
+ uint32_t curOverScanY;
+ uint32_t curOverScanSizeX;
+ uint32_t curOverScanSizeY;
+#ifdef WIN32
+ HANDLE hCountExpTimeThread;
+ HANDLE hCancelExposingAndReadoutThread;
+#endif
+ uint32_t isReadoutTemp;
+
+ uint8_t flagquitgetsingleframe;
+
+ bool isbin22Tobin33;
+ uint32_t wantedWidth;
+ uint32_t wantedHeight;
+
+ uint8_t badlinenum;
+ uint16_t badlinex[32];
+ uint16_t badliney[32];
+ uint8_t badlinewidth[32];
+ uint16_t badlineendy[32];
+};
+#endif
+
diff --git a/include/qhy/qhybase.h b/include/qhy/qhybase.h
new file mode 100644
index 0000000..93fc1d5
--- /dev/null
+++ b/include/qhy/qhybase.h
@@ -0,0 +1,1189 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhycam.h"
+#include "qhyccdcamdef.h"
+#include "qhyccderr.h"
+#include "log4z.h"
+#include "cmosdll.h"
+#include "stdint.h"
+#include "debugview.h"
+
+#ifdef WIN32
+#include "opencv2/opencv.hpp"
+#else // Linux & Mac
+#include <pthread.h>
+#include <string.h>
+#endif // WIN32
+
+#ifndef __QHYBASEDEF_H__
+#define __QHYBASEDEF_H__
+
+using namespace zsummer::log4z;
+
+#define Min2(a, b) ((a) < (b) ? (a) : (b))
+#define Max2(a, b) ((a) > (b) ? (a) : (b))
+#define LimitByte(v) ((uint8_t)Min2(Max2(v, 0), 0xFF))
+#define LimitShort(v) ((uint16_t)Min2(Max2(v, 0), 0xFFFF))
+
+/**
+ * the QHYBASE class description
+ */
+class QHYBASE : public QHYCAM {
+public:
+ QHYBASE();
+ virtual ~QHYBASE();
+
+ virtual void InitCmos(qhyccd_handle *h) {
+ };
+
+ virtual uint32_t BeginSingleExposure(qhyccd_handle *h);
+ virtual uint32_t CancelExposing(qhyccd_handle *handle);
+ virtual uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+ virtual uint32_t BeginLiveExposure(qhyccd_handle *h);
+ virtual uint32_t StopLiveExposure(qhyccd_handle *h);
+ virtual uint32_t GetSingleFrame(qhyccd_handle *h, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+ virtual uint32_t GetLiveFrame(qhyccd_handle *h, uint32_t *pW, uint32_t *pH, uint32_t * pBpp, uint32_t *pChannels, uint8_t *ImgData);
+
+ virtual void SetFlagQuit(bool val);
+ virtual bool IsFlagQuit();
+
+ virtual void SetExposureThreadRunFlag(bool val);
+ virtual bool IsExposureThreadRunning();
+
+ virtual void SetDdrnum(uint32_t val);
+ virtual uint32_t GetDdrnum();
+
+ virtual void SetTotalDataLength(uint32_t val);
+ virtual void TotalDataLengthAdd(uint32_t val);
+ virtual uint32_t GetTotalDataLength();
+
+ /**
+ @fn virtual uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect camera,get the control handle
+ @param d deivce
+ @param h camera control handle pointer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t ConnectCamera(qhyccd_device *d, qhyccd_handle **h);
+
+ /**
+ @fn virtual uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn virtual uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn virtual uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn virtual uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipOffset(qhyccd_handle *h, double offset) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipExposeTime(qhyccd_handle *h, double i) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipGain(qhyccd_handle *h, double gain) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipWBRed(qhyccd_handle *h,double red)
+ @brief set the red gain value of white balance
+ @param h camera control handle
+ @param red red gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipWBRed(qhyccd_handle *h, double red) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipWBGreen(qhyccd_handle *h,double green)
+ @brief set the red gain value of white balance
+ @param h camera control handle
+ @param green green gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipWBGreen(qhyccd_handle *h, double green) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipWBBlue(qhyccd_handle *h,double blue)
+ @brief set the red gain value of white balance
+ @param h camera control handle
+ @param blue blue gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipWBBlue(qhyccd_handle *h, double blue) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual double GetChipWBRed()
+ @brief get the red gain value of white balance
+ @return
+ success return red gain value \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipWBRed() {
+ return camred2green;
+ }
+
+ /**
+ @fn double GetChipWBBlue()
+ @brief get the blue gain value of white balance
+ @return
+ success return blue gain value \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipWBBlue() {
+ return camblue2green;
+ }
+
+ /**
+ @fn double GetChipWBGreen()
+ @brief get the green gain value of white balance
+ @return
+ success return green gain value \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipWBGreen() {
+ return camgreen;
+ }
+
+ /**
+ @fn virtual double GetChipExposeTime()
+ @brief get the current exposetime
+ @return
+ success return the current expose time (unit:us) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipExposeTime();
+
+ /**
+ @fn virtual double GetChipGain()
+ @brief get the current gain
+ @return
+ success return the current expose gain\n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipGain();
+
+ /**
+ @fn virtual double GetChipOffset()
+ @brief get the current offset
+ @return
+ success return the current camera offset \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipOffset();
+
+ /**
+ @fn virtual double GetChipSpeed()
+ @brief get the current transfer speed
+ @return
+ success return the current speed level \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipSpeed();
+
+ /**
+ @fn virtual double GetChipUSBTraffic()
+ @brief get the hblank value
+ @return
+ success return the hblank value \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipUSBTraffic();
+
+ /**
+ @fn virtual double GetChipBitsMode()
+ @brief get the current camera depth bits
+ @return
+ success return the current camera depth bits \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipBitsMode();
+
+ /**
+ @fn virtual double GetChipChannels()
+ @brief get the current camera image channels
+ @return
+ success return the current camera image channels \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipChannels() {
+ return 1;
+ }
+
+ /**
+ @fn virtual double GetChipCoolTemp()
+ @brief get the current ccd/cmos chip temprature
+ @return
+ success return the current chip temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipCoolTemp(qhyccd_handle *h) {
+ return m_CurrentTemp;
+ }
+
+ /**
+ @fn virtual double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipCoolPWM() {
+ return m_CurrentPwm;
+ }
+
+ /**
+ @fn virtual double GetChipCoolTargetTemp()
+ @brief get the current ccd/cmos target temperature
+ @return
+ success return the current cool target temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual double GetChipCoolTargetTemp() {
+ return m_TargetTemp;
+ }
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId, double *min, double *max, double *step) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t CorrectWH(uint32_t *w, uint32_t *h) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipResolution(qhyccd_handle *handle, uint32_t x, uint32_t y, uint32_t xsize, uint32_t ysize) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipUSBTraffic(qhyccd_handle *h, uint32_t i) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t DeChipRowNoise(qhyccd_handle *h,uint32_t value)
+ @brief enable the function to reduce the row noise
+ @param h camera control handle
+ @param value enable or disable
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t DeChipRowNoise(qhyccd_handle *h, uint32_t value) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t GetChipMemoryLength()
+ @brief get the image cost memory length
+ @return
+ success return memory length \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t GetChipMemoryLength();
+
+ /**
+ @fn virtual bool IsSupportHighSpeed()
+ @brief check the camera support high speed transfer or not
+ @return
+ support return true \n
+ not support return false
+ */
+ virtual bool IsSupportHighSpeed() {
+ return false;
+ }
+
+ /**
+ @fn virtual uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_SUCCESS \n
+ NOT HAVE return QHYCCD_ERROR_NOTSUPPORT
+ */
+ virtual uint32_t IsChipHasFunction(CONTROL_ID id) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipCoolPWM(qhyccd_handle *h, double PWM) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t AutoTempControl(qhyccd_handle *h, double ttemp) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipSpeed(qhyccd_handle *h, uint32_t i) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipBitsMode(qhyccd_handle *h, uint32_t bits) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipChannels(qhyccd_handle *h,uint32_t channels)
+ @brief set the image channels,it means the image is color one
+ @param h camera control handle
+ @param channels image channels
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipChannels(qhyccd_handle *h, uint32_t channels) {
+ return QHYCCD_SUCCESS;
+ }
+
+ /**
+ @fn virtual uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera image bin mode
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetChipBinMode(qhyccd_handle *h, uint32_t wbin, uint32_t hbin);
+
+ /**
+ @fn virtual void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ virtual void ConvertDataBIN11(uint8_t *Data, uint32_t x, uint32_t y, uint16_t PixShift) {
+ }
+
+ /**
+ @fn virtual void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ virtual void ConvertDataBIN22(uint8_t *Data, uint32_t x, uint32_t y, uint16_t TopSkipPix) {
+ }
+
+ /**
+ @fn void ConvertDataBIN33(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ virtual void ConvertDataBIN33(uint8_t *Data, uint32_t x, uint32_t y, uint16_t TopSkipPix) {
+ }
+
+ /**
+ @fn virtual void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ virtual void ConvertDataBIN44(uint8_t *Data, uint32_t x, uint32_t y, uint16_t TopSkipPix) {
+ }
+
+ /**
+ @fn virtual uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime)
+ @brief send the command to camera's guide port
+ @param h camera control handle
+ @param Direction RA DEC
+ @param PulseTime the time last for command
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t Send2GuiderPort(qhyccd_handle *h, uint32_t Direction, uint16_t PulseTime) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetFocusSetting(qhyccd_handle *h, uint32_t focusCenterX, uint32_t focusCenterY) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t ExposureRemaining(qhyccd_handle *h)
+ @brief Get remaining ccd/cmos expose time
+ @param h camera control handle
+ @return
+ 100 or less 100,it means exposoure is over \n
+ another is remaining time
+ */
+ virtual uint32_t ExposureRemaining(qhyccd_handle *h) {
+ return 100;
+ }
+
+ /**
+ @fn uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode)
+ @brief Set the camera's mode to chose the way reading data from camera
+ @param handle camera control handle
+ @param mode the stream mode \n
+ 0x00:default mode,single frame mode \n
+ 0x01:live mode \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetStreamMode(qhyccd_handle *handle, uint8_t mode);
+
+ /** @fn virtual uint32_t SetInterCamSerialParam(qhyccd_handle *h,uint32_t opt)
+ @brief Set InterCam serial2 params
+ @param h camera control handle
+ @param opt the param
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetInterCamSerialParam(qhyccd_handle *h, uint32_t opt) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t InterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length)
+ @brief Send data to InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @param length the length to send
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t InterCamSerialTX(qhyccd_handle *h, char *buf, uint32_t length) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t InterCamSerialRX(qhyccd_handle *h,char *buf)
+ @brief Get data from InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @return
+ on success,return the data number \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t InterCamSerialRX(qhyccd_handle *h, char *buf) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t Send2OledFast(qhyccd_handle *h,char *buffer)
+ @brief send data to show on InterCam's OLED
+ @param h camera control handle
+ @param buffer buffer for data
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t Send2OledFast(qhyccd_handle *h, uint8_t *buffer) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t InterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff)
+ @brief turn off or turn on the InterCam's Oled
+ @param h camera control handle
+ @param onoff on or off the oled \n
+ 1:on \n
+ 0:off \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t InterCamOledOnOff(qhyccd_handle *handle, uint8_t onoff) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t SetInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness)
+ @brief send data to show on InterCam's OLED
+ @param h camera control handle
+ @param brightness the oled's brightness
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SetInterCamOledBrightness(qhyccd_handle *handle, uint8_t brightness) {
+ return QHYCCD_ERROR;
+ }
+
+ virtual uint32_t SendFourLine2InterCamOled(qhyccd_handle *handle, char *messagetemp, char *messageinfo, char *messagetime, char *messagemode) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom)
+ @brief spilit the message to two line,send to camera
+ @param h camera control handle
+ @param messageTop message for the oled's 1st line
+ @param messageBottom message for the oled's 2nd line
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle, char *messageTop, char *messageBottom) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle,char *messageTop)
+ @brief spilit the message to two line,send to camera
+ @param h camera control handle
+ @param messageTop message for all the oled
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle, char *messageTop) {
+ return QHYCCD_ERROR;
+ }
+
+ /** @fn virtual uint32_t GetCameraStatus(qhyccd_handle *h,uint8_t *buf)
+ @brief Get camera status
+ @param h camera control handle
+ @param buf camera's status save space
+ @return
+ on success,return the camera statu \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t GetCameraStatus(qhyccd_handle *h, uint8_t *buf) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief control color filter wheel
+ @param handle camera control handle
+ @param order order send to color filter wheel
+ @param length the order string length
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t SendOrder2CFW(qhyccd_handle *handle, char *order, uint32_t length) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t GetCFWStatus(qhyccd_handle *handle, char *status) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t GetCFWSlotsNum()
+ @brief get the hole number of color filter wheel
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t GetCFWSlotsNum(qhyccd_handle *handle) {
+ return 9;
+ }
+
+ /**
+ @fn virtual uint32_t IsCFWPlugged(qhyccd_handle *handle)
+ @brief if CFW plugged in to the port or not.
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t IsCFWPlugged(qhyccd_handle *handle) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status)
+ @brief control camera's shutter
+ @param handle camera control handle
+ @param status the shutter status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t ControlShutter(qhyccd_handle *handle, uint8_t status) {
+ return QHYCCD_ERROR;
+ }
+
+ /**
+ @fn virtual uint32_t GetShutterStatus(qhyccd_handle *handle)
+ @brief get the camera's shutter status
+ @param handle camera control handle
+ @return
+ on success,return status \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t GetShutterStatus(qhyccd_handle *handle) {
+ return QHYCCD_ERROR;
+ }
+
+ virtual uint32_t GetHumidity(qhyccd_handle *handle, double *hd) {
+ return QHYCCD_ERROR;
+ }
+
+ virtual uint32_t SetTrigerFunction(qhyccd_handle *handle, bool value) {
+ return QHYCCD_ERROR;
+ }
+
+ //---------just for debugging-------------
+
+ virtual uint32_t I2C_Write(qhyccd_handle *handle, uint8_t req, uint16_t value, uint16_t index, uint8_t* data, uint16_t length) {
+ return QHYCCD_ERROR;
+ }
+
+ virtual uint32_t I2C_Read(qhyccd_handle *handle, uint8_t req, uint16_t value, uint16_t index, uint8_t* data, uint16_t length) {
+ return QHYCCD_ERROR;
+ }
+ //----------------------------------------
+
+ virtual uint32_t SetFineTone(qhyccd_handle *h, uint8_t setshporshd, uint8_t shdloc, uint8_t shploc, uint8_t shwidth) {
+ return QHYCCD_ERROR;
+ }
+
+ virtual uint32_t ReservedFunction(uint32_t width, uint32_t height, uint32_t bpp, uint32_t channels, uint8_t *ImgData) {
+ return QHYCCD_SUCCESS;
+ }
+
+ virtual uint32_t IsExposing() {
+ return QHYCCD_SUCCESS;
+ }
+
+ virtual void UpdateParameters(qhyccd_handle *h) {
+
+ }
+ /**
+ @fn virtual uint32_t GetFWVersion(qhyccd_handle *h,uint8_t *buf)
+ @brief Get the QHYCCD's firmware version
+ @param h camera control handle
+ @param buf buffer for version info
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ virtual uint32_t GetFWVersion(qhyccd_handle *h, uint8_t *buf);
+
+ virtual uint32_t SetGuideModeOnOff(qhyccd_handle *h, double mode) {
+ return QHYCCD_ERROR;
+ }
+
+ virtual uint32_t GeDDRBufferThreshold() {
+ return 0;
+ }
+public:
+
+ /**
+ @fn void ControlCamTemp(qhyccd_handle *h,double MAXPWM)
+ @brief control the ccd/cmos temprature
+ @param h camera control handle
+ @param MAXPWM the max power of cool
+ */
+ void ControlCamTemp(qhyccd_handle *h, double MAXPWM);
+
+ /**
+ @fn void Bit16To8_Stretch(uint8_t *InputData16,uint8_t \ *OutputData8,uint32_t imageX,uint32_t imageY,uint16_t B,uint16_t W)
+ @brief turn 16bits data into 8bits
+ @param InputData16 for 16bits data memory
+ @param OutputData8 for 8bits data memory
+ @param imageX image width
+ @param imageY image height
+ @param B for stretch balck
+ @param W for stretch white
+ */
+ void Bit16To8_Stretch(uint8_t *InputData16, uint8_t *OutputData8, uint32_t imageX, uint32_t imageY, uint16_t B, uint16_t W);
+
+ /**
+ @fn void HistInfo(uint32_t x,uint32_t y,uint8_t *InBuf,uint8_t *OutBuf)
+ @brief make the hist info
+ @param x image width
+ @param y image height
+ @param InBuf for the raw image data
+ @param OutBuf for 192x130 8bits 3 channels image
+ */
+ void HistInfo(uint32_t x, uint32_t y, uint8_t *InBuf, uint8_t *OutBuf);
+
+ void calibration_difference(uint8_t *inbuf, uint8_t *outbuf, uint32_t width, uint32_t height, uint32_t depth, uint32_t areax1, uint32_t areay1, uint32_t areasizex1, uint32_t areasizey1, uint32_t areax2, uint32_t areay2, uint32_t areasizex2, uint32_t areasizey2);
+ /**
+ @fn void CalibrateOverScan(uint8_t inbuf, uint8_t outbuf, uint32_t ImgW, uint32_t ImgH, uint32_t OSStartX, uint32_t OSStartY, uint32_t OSSizeX, uint32_t OSSizeY);
+ @brief calibrate the image with its overscan arean
+ @param x image width
+ @param y image height
+ @param OSStartX the start X for overscan arean
+ @param OSStartY the start Y for overscan arean
+ @param OSSizeX the X size for overscan arean
+ @param OSSizeY the Y size for overscan arean
+ @param InBuf for the raw image data
+ @param OutBuf for the image data after calibrated
+ */
+ void CalibrateOverScan(uint8_t *inbuf, uint8_t *outbuf, uint32_t ImgW, uint32_t ImgH, uint32_t OSStartX, uint32_t OSStartY, uint32_t OSSizeX, uint32_t OSSizeY);
+
+
+ /**
+ @fn void IgnoreOverscanArea(qhyccd_handle *h, bool value);
+ @brief set camera to ignore overscan area
+ @param h camera control handle
+ @param value ignore overscan area or not
+ */
+ uint32_t IgnoreOverscanArea(qhyccd_handle *h, bool value);
+
+ /** @fn uint32_t GetOverScanArea(uint32_t *startX, uint32_t *startY, uint32_t *sizeX, uint32_t *sizeY)
+
+ @brief get the ccd overscan area
+ @param startX the OverScan area x position
+ @param startY the OverScan area y position
+ @param sizeX the OverScan area x size
+
+ @param sizeY the OverScan area y size
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetOverScanArea(uint32_t *startX, uint32_t *startY, uint32_t *sizeX, uint32_t *sizeY);
+
+ /** @fn uint32_t GetEffectiveArea(qint *startX, uint32_t *startY, uint32_t *sizeX, uint32_t *sizeY)
+ @brief get the ccd effective area
+ @param startX the Effective area x position
+ @param startY the Effective area y position
+
+ @param sizeX the Effective area x size
+ @param sizeY the Effective area y size
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+
+ */
+ uint32_t GetEffectiveArea(uint32_t *startX, uint32_t *startY, uint32_t *sizeX, uint32_t *sizeY);
+
+ /** @fn uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh)
+ @brief get the camera's ccd/cmos chip info
+ @param h camera control handle
+ @param chipw chip size width
+ @param chiph chip size height
+ @param imagew chip output image width
+ @param imageh chip output image height
+ @param pixelw chip pixel size width
+ @param pixelh chip pixel size height
+ @param bpp chip pixel depth
+ */
+ uint32_t GetChipInfo(double *chipw, double *chiph, uint32_t *imagew, uint32_t *imageh, double *pixelw, double *pixelh, uint32_t *bpp);
+
+ /**
+ @fn double GetReadingProgress(qhyccd_handle *handle)
+ @brief get reading data from camera progress
+ @param handle camera control handle
+ @return current progress
+ */
+ virtual double GetReadingProgress(qhyccd_handle *handle);
+
+ uint32_t SetGPSOn(qhyccd_handle *handle, uint8_t mode);
+
+ uint32_t GetGPSSOnOff() {
+ return gpson;
+ }
+
+ static void QSleep(uint32_t mstime) {
+#ifdef WIN32
+ Sleep(mstime);
+#else
+ usleep(mstime * 1000);
+#endif
+ }
+
+ uint32_t SetPIDParas(qhyccd_handle *handle, double p, double i, double d);
+ uint32_t PixelsDataSoftBin(uint8_t *srcdata, uint8_t *bindata, uint32_t width, uint32_t height, uint32_t depth, uint32_t camxbin, uint32_t camybin);
+ uint32_t SetDebayerOnOff(bool onoff);
+ uint32_t RoiTwoChannels2OneImage(uint32_t imgX, uint32_t imgY, uint32_t depth, uint32_t uselessStartX, uint32_t uselessStartY, uint32_t uselessSizeX, uint32_t uselessSizeY, uint8_t *data);
+ uint32_t VendRequestWrite(qhyccd_handle *h, uint8_t req, uint16_t value, uint16_t index, uint32_t length, uint8_t *data);
+ uint32_t VendRequestRead(qhyccd_handle *h, uint8_t req, uint16_t value, uint16_t index, uint32_t length, uint8_t *data);
+ uint32_t QHYCCDImageROI(void* src, uint32_t chipoutputsizex, uint32_t chipoutputsizey, uint32_t cambits, void* dist, uint32_t roixstart, uint32_t roiystart, uint32_t roixsize, uint32_t roiysize);
+ uint32_t QHYCCDFlip(void* src, uint32_t xsize, uint32_t ysize, uint32_t cambits, int channels, void* dist, int flip_mode);
+ uint32_t QHYCCDFlip(void* src, uint32_t xsize, uint32_t ysize, uint32_t cambits, int channels, int flip_mode);
+ uint32_t SetAutoWhiteBalance(qhyccd_handle *h, double value);
+ uint32_t SetAutoExposure(qhyccd_handle *h, double value);
+ uint32_t SetAutoFocus(qhyccd_handle *h, double value);
+ uint32_t SetBrightness(qhyccd_handle *h, double value);
+ uint32_t SetContrast(qhyccd_handle *h, double value);
+ uint32_t SetGamma(qhyccd_handle *h, double value);
+ uint32_t SetAMPV(qhyccd_handle *h, double value);
+ uint32_t SetLPMode(qhyccd_handle *h, double value);
+ uint32_t SetCamViewMode(qhyccd_handle *h, double value);
+ uint32_t SetVcamOnoff(qhyccd_handle *h, double mode);
+ uint32_t SetScreenStretchB(qhyccd_handle *h, double value);
+ uint32_t SetScreenStretchW(qhyccd_handle *h, double value);
+
+ virtual uint32_t SetDDR(qhyccd_handle *h, double value);
+
+ double GetBrightness();
+ double GetContrast();
+ double GetGamma();
+ double GetAMPV();
+ double GetDDR();
+ double GetLPMode();
+ double GetCamViewModeStatus();
+ double GetVcamOnoff();
+ double GetScreenStretchB();
+ double GetScreenStretchW();
+ double Getqhy5iiGuidePortOnoff();
+
+ void QHYCCDDemosaic(void* dataIn, uint32_t w, uint32_t h, uint32_t bpp, void* dataOut, uint8_t mode);
+ void BuildlLut_Contrast_Brightness_Gamma(uint32_t bpp, double brightness_percent, double contrast_percent, double fPrecompensation);
+ void ImgProcess_Contrast_Brightness_Gamma(uint8_t *array, uint32_t width, uint32_t height, uint32_t bpp);
+
+ uint32_t GetTempAndPwm(qhyccd_handle *h, double &temp, double &pwm);
+ uint32_t QHYImgResize(void *src, uint32_t bpp, uint32_t ch, uint32_t src_width, uint32_t src_height, void *dst, uint32_t dst_width, uint32_t dst_height);
+ uint32_t QHYBadLineProc(void *src, uint32_t imgw, uint32_t imgh, uint32_t bpp, uint32_t startx, uint32_t starty, uint32_t linew, uint32_t endy, bool method);
+ uint32_t GeDDRBufferCap(qhyccd_handle *h);
+ uint32_t QHYConvertToSoftBIN22(void *src, uint32_t bpp, uint32_t src_width, uint32_t src_height, void *dst);
+ uint32_t QHYConvertToSoftBIN33(void *src, uint32_t bpp, uint32_t src_width, uint32_t src_height, void *dst);
+ uint32_t QHYConvertToSoftBIN44(void *src, uint32_t bpp, uint32_t src_width, uint32_t src_height, void *dst);
+
+ qhyccd_handle *GetHandle();
+ void SetHandle(qhyccd_handle *pHandle);
+
+ inline void SetMaxImageReadTrials(int value) {
+ m_max_image_read_trials = value;
+ }
+
+ inline int GetMaxImageReadTrials() {
+ return m_max_image_read_trials;
+ }
+
+ uint32_t camx; //!< current camera width
+ uint32_t camy; //!< current camera height
+ uint32_t camxbin; //!< current camera width bin
+ uint32_t camybin; //!< current camera height bin
+ uint32_t cambits; //!< current camera bits mode
+ uint32_t camchannels; //!< current camera channels
+
+ uint32_t usbtraffic; //!< current usbtraffic
+ uint32_t usbspeed; //!< current usb speed mode
+
+ double camtime; //!< current cam expose time
+ double camgain; //!< current cam gain
+ double camoffset; //!< current cam offset
+ double camred2green; //!< current white blance red value
+ double camblue2green; //!< current white blance blue value
+ double camgreen; //!< current white blance green
+
+ uint8_t *rawarray; //!< raw buffer pointer for usb transfer
+ uint8_t *roiarray; //!< roi image buffer
+
+ uint32_t roixstart; //!< roi image xstart position
+ uint32_t roiystart; //!< roi image ystart position
+ uint32_t roixsize; //!< roi image xsize
+ uint32_t roiysize; //!< roi image ysize
+
+ uint32_t unbinningx;
+ uint32_t unbinningy;
+ uint32_t unbinningxsize;
+ uint32_t unbinningysize;
+
+ // overscan area
+ uint32_t overScanStartX; //!< overscan area x position
+ uint32_t overScanStartY; //!< overscan area y position
+ uint32_t overScanSizeX; //!< overscan area x size
+ uint32_t overScanSizeY; //!< overscan area y size
+
+ // effective area
+ uint32_t onlyStartX; //!< effective area x position
+ uint32_t onlyStartY; //!< effective area y position
+ uint32_t onlySizeX; //!< effective area x size
+ uint32_t onlySizeY; //!< effective area y size
+
+ // chip info
+ double ccdchipw; //!< ccd chip width
+ double ccdchiph; //!< ccd chip height
+ uint32_t ccdimagew; //!< ccd image width
+ uint32_t ccdimageh; //!< ccd image height
+ double ccdpixelw; //!< ccd pixel width
+ double ccdpixelh; //!< ccd pixel height
+
+ uint32_t lastx, lasty, lastxsize, lastysize, lastcambits;
+ uint32_t lastcamxbin, lastcamybin;
+ uint32_t chipoutputx, chipoutputy, chipoutputsizex, chipoutputsizey, chipoutputbits;
+
+ double m_TargetTemp; //!< target ccd/cmos temprature
+ double m_CurrentTemp; //!< current ccd/cmos tempratue
+ double m_CurrentPwm; //!< current cool power
+
+ double nowVoltage; //!< reserved
+ double NowError; //!< the step k difference
+ double PrevError; //!< the step k - 2 difference
+ double LastError; //!< the step k - 1 difference
+ double Proportion; //!< scale factor value
+ double Integral; //!< integralcoefficients
+ double Derivative; //!< differential coefficient
+ double readprogress; //!< get the reading data from camera progress status
+ double humidityvalue;
+ double imgbrightness;
+ double imgcontrast;
+ double imggamma;
+ double camampv;
+ double defaultgain;
+ double defaultoffset;
+ double outputdataactualbits;
+ double outputdataalignment;
+ double camviewmode;
+
+ uint8_t isbadframe;
+ uint8_t isexposureupdate;
+ uint8_t isgainupdate;
+ uint8_t iscolorgainupdate;
+ uint8_t isoffsetupdate;
+ uint8_t isdepthupdate;
+ uint8_t isspeedupdate;
+ uint8_t isresolutionupdate;
+ uint8_t isusbtrafficupdate;
+ uint8_t is_superspeed;
+ uint8_t isReadoutTemp;
+ uint8_t islive;
+ uint8_t camtype;
+ uint8_t streammode;
+ uint8_t badframenum;
+ uint8_t gpsarray[5000 * 11 * 2];
+ uint8_t is_3a_autoexposure_on;
+ uint8_t is_3a_autowhitebalance_on;
+ uint8_t is_3a_autofocus_on;
+ uint8_t autoexposure_messuremethod;
+ uint8_t autoexposure_controlmode;
+ uint8_t autowhitebalanceloops;
+ uint8_t camLPMode; // 1: high light performance or 0: low light performance
+ uint8_t singlestatus;
+ uint8_t gpson;
+ uint8_t qhy5iiGuidePortOnOff;
+
+ bool isReadoutData; //!< sign whether it is reading out the image data
+ bool flag_timer; //!< timer flag
+ bool flag_timer_2; //!< timer flag 2
+ bool flagtempauto; //!< temperature to read flag
+ bool debayeronoff;
+ bool isOverscanRemoved; //!< sign whether removed the overscan area for image.
+ bool isFocusmode; //!< hold the camera work mode, false: capture mode, true: focus mdoe
+ bool vcamonoff;
+ bool isFX3;
+ bool delRowRoise;
+
+ uint32_t ddrnum;
+ uint32_t debayerformat;
+ uint32_t initdone;
+ uint32_t connected;
+ uint32_t resolutionmode;
+ uint32_t uselessstartx;
+ uint32_t uselessstarty;
+ uint32_t uselesssizex;
+ uint32_t uselesssizey;
+ uint32_t retrynum;
+
+ int32_t imgprocesslut[65536];
+ int32_t frameflag;
+
+ uint16_t camddr;
+ uint16_t screenstretchb, screenstretchw;
+
+ int8_t filterpos;
+
+#ifdef WIN32
+ HANDLE reseth;
+#else
+
+#endif
+
+protected:
+ bool m_flagQuit;
+ bool m_exposureThreadRunFlag;
+ qhyccd_handle *m_pHandle;
+ uint32_t m_totalDataLength;
+ int m_max_image_read_trials;
+
+private:
+#ifdef WIN32
+
+#else
+ pthread_mutex_t m_flagQuitMutex;
+ pthread_mutex_t m_ddrNumMutex;
+ pthread_mutex_t m_exposureThreadRunFlagMutex;
+ pthread_mutex_t m_totalDataLengthMutex;
+#endif
+
+};
+
+#endif
diff --git a/include/qhy/qhycam.h b/include/qhy/qhycam.h
new file mode 100644
index 0000000..a4ea236
--- /dev/null
+++ b/include/qhy/qhycam.h
@@ -0,0 +1,572 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*
+ * @file qhycam.h
+ * @brief QHYCAM class define
+ */
+#ifndef _QHYCAM_H_
+#define _QHYCAM_H_
+
+#include <math.h>
+#include "qhyccdstruct.h"
+#include "unlockimagequeue.h"
+
+#ifdef WIN32
+#include "CyAPI.h"
+#include <process.h>
+#else // Linux & Mac
+#include <stdio.h>
+#include <unistd.h>
+#include <pthread.h>
+//#include <libusb-1.0/libusb.h>
+#include <libusb.h>
+#endif // WIN32
+
+#include "stdint.h"
+
+#define IDLE 0
+#define EXPOSING 1
+#define DOWNLOADING 2
+
+#define QHYCCD_USBTYPE_NONE (0xFF)
+#define QHYCCD_USBTYPE_CYUSB (0x00)
+#define QHYCCD_USBTYPE_WINUSB (0x01)
+
+#define LIBUSB_PACKET_LENGTH (4096)
+#define LIBUSB_WR_TIMEOUT (5000)
+
+#define LIBUSB_CONTROL_TRANSFER_RD_TIMEOUT (5000)
+#define LIBUSB_CONTROL_TRANSFER_WR_TIMEOUT (1000)
+
+#define LIBUSB_BULK_TRANSFER_RD_TIMEOUT (5000)
+#define LIBUSB_BULK_TRANSFER_WR_TIMEOUT (1000)
+
+#define LIBUSB_ASYNC_BULK_TRANSFER_TIMEOUT (3600000)
+
+#define EVENT_TIMEOUT_SEC (5)
+#define EVENT_TIMEOUT_USEC (0);
+
+#define USB_ENDPOINT (0x81)
+#define CAM_16_BITS (16)
+
+#ifdef WIN32
+
+typedef void *qhyccd_device;
+typedef CCyUSBDevice qhyccd_handle;
+
+#else // Linux & Mac
+
+typedef struct libusb_device qhyccd_device;
+typedef struct libusb_device_handle qhyccd_handle;
+
+#endif // WIN32
+
+/**
+ * @brief QHYCAM class define
+ *
+ * include all functions for qhycam
+ */
+class QHYCAM {
+public:
+
+ QHYCAM();
+ virtual ~QHYCAM();
+
+ //inline UnlockImageQueue *GetImageQueue() {
+ // return m_pImageQueue;
+ //}
+
+ //static void* EventThreadFunc(void *arg);
+ //static void AsyImageDataCallBack(struct libusb_transfer *transfer);
+
+ //int AllocFillSubmitBulkTransfers(qhyccd_handle *pCamera);
+ //int32_t InitAsyQCamLive2(qhyccd_handle *pDevHandle, int32_t x, int32_t y, int32_t depth, int32_t frameSize);
+ //bool BeginAsyQCamLive2(qhyccd_handle *pDevHandle);
+ //void StopAsyQCamLive2(qhyccd_handle *pDevHandle);
+ //uint32_t ReadAsyQCamLiveFrame2(qhyccd_handle *pDevHandle, uint8_t *pBuffer, int32_t *pFrameFlag);
+ //void SetFlagRawExit2(bool value);
+ //int GetEventCount2();
+ //int IncreaseEventCount2();
+ //int DecreaseEventCount2();
+ //bool IsFlagRawExit2();
+
+ /**
+ @fn uint32_t openCamera(qhyccd_deivce *d,qhyccd_handle **h)
+ @brief open the camera,open the device handle
+ @param d deivce deivce
+ @param h device control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t openCamera(qhyccd_device *d, qhyccd_handle **h);
+
+ /**
+ @fn void closeCamera(qhyccd_device *h)
+ @brief close the camera,close the deivce handle
+ @param h deivce control handle
+ */
+ void closeCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t sendForceStop(qhyccd_handle *h)
+ @brief force stop exposure
+ @param h device control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t sendForceStop(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t sendInterrupt(qhyccd_handle *handle,uint8_t length,uint8_t *data)
+ @brief send a package to deivce using the interrupt endpoint
+ @param handle device control handle
+ @param length the package size(unit:byte)
+ @param data package buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t sendInterrupt(qhyccd_handle *handle, uint8_t length, uint8_t *data);
+
+ /**
+ @fn uint32_t vendTXD(qhyccd_handle *dev_handle, uint8_t req, uint8_t *data, uint16_t length)
+ @brief send a package to deivce using the vendor request
+ @param dev_handle device control handle
+ @param req request command
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t vendTXD(qhyccd_handle *dev_handle, uint8_t req, uint8_t *data, uint16_t length);
+
+ /**
+ @fn uint32_t vendRXD(qhyccd_handle *dev_handle, uint8_t req, uint8_t *data, uint16_t length)
+ @brief get a package from deivce using the vendor request
+ @param dev_handle device control handle
+ @param req request command
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t vendRXD(qhyccd_handle *dev_handle, uint8_t req, uint8_t *data, uint16_t length);
+
+ /**
+ @fn iTXD(qhyccd_handle *dev_handle,uint8_t *data, int32_t length)
+ @brief send a package to deivce using the bulk endpoint
+ @param dev_handle device control handle
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t iTXD(qhyccd_handle *dev_handle, uint8_t *data, int32_t length);
+
+ /**
+ @fn iTXD_Ex(qhyccd_handle *dev_handle,uint8_t *data, int32_t length,uint8_t ep)
+ @brief send a package to deivce using the bulk endpoint
+ @param dev_handle device control handle
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @param ep the endpoint number
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t iTXD_Ex(qhyccd_handle *dev_handle, uint8_t *data, int32_t length, uint8_t ep);
+
+ /**
+ @fn iRXD(qhyccd_handle *dev_handle,uint8_t *data, int32_t length)
+ @brief get a package from deivce using the bulk endpoint
+ @param dev_handle device control handle
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t iRXD(qhyccd_handle *dev_handle, uint8_t *data, int32_t length);
+
+ /**
+ @fn iRXD_Ex(qhyccd_handle *dev_handle,uint8_t *data, int32_t length,uint8_t ep)
+ @brief get a package from deivce using the bulk endpoint
+ @param dev_handle device control handle
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @param ep the endpoint number
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t iRXD_Ex(qhyccd_handle *dev_handle, uint8_t *data, uint32_t length, uint8_t ep);
+
+ /**
+ @fn uint32_t vendTXD_Ex(qhyccd_handle *dev_handle, uint8_t req,uint16_t value,uint16_t index,uint8_t* data, uint16_t length)
+ @brief send a package to deivce using the vendor request,extend the index and value interface
+ @param dev_handle device control handle
+ @param req request command
+ @param value value interface
+ @param index index interface
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t vendTXD_Ex(qhyccd_handle *dev_handle, uint8_t req, uint16_t value, uint16_t index, uint8_t* data, uint16_t length);
+
+ /**
+ @fn uint32_t vendRXD_Ex(qhyccd_handle *dev_handle, uint8_t req,uint16_t value,uint16_t index,uint8_t* data, uint16_t length)
+ @brief get a package from deivce using the vendor request,extend the index and value interface
+ @param dev_handle device control handle
+ @param req request command
+ @param value value interface
+ @param index index interface
+ @param data package buffer
+ @param length the package size(unit:byte)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t vendRXD_Ex(qhyccd_handle *dev_handle, uint8_t req, uint16_t value, uint16_t index, uint8_t* data, uint16_t length);
+
+ uint32_t QHY5IIIreadUSB2B(qhyccd_handle *dev_handle, uint8_t *data, uint32_t p_num, uint32_t timeout);
+ /**
+ @fn uint32_t readUSB2B(qhyccd_handle *dev_handle, uint8_t *data,uint32_t p_size, uint32_t p_num, uint32_t* pos)
+ @brief get image packages from deivce using bulk endpoint
+ @param dev_handle device control handle
+ @param data package buffer
+ @param p_size package size
+ @param p_num package num
+ @param pos reserved
+ @param duration the exposure time
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t readUSB2B(qhyccd_handle *dev_handle, uint8_t *data, uint32_t p_size, uint32_t p_num, uint32_t* pos, uint32_t timeout);
+
+ /**
+ @fn uint32_t beginVideo(qhyccd_handle *handle)
+ @brief send begin exposure signal to deivce
+ @param handle device control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t beginVideo(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t sendRegisterQHYCCDOld(qhyccd_handle *handle,
+ CCDREG reg, uint32_t P_Size, uint32_t *Total_P, uint32_t *PatchNumber)
+ @brief send register params to deivce and some other info
+ @param handle deivce control handle
+ @param reg register struct
+ @param P_Size the package size
+ @param Total_P the total packages
+ @param PatchNumber the patch for usb transfer,the total size must multiple 512 bytes.
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t sendRegisterQHYCCDOld(qhyccd_handle *handle,
+ CCDREG reg, uint32_t P_Size, uint32_t *Total_P, uint32_t *PatchNumber);
+
+ /**
+ @fn uint32_t sendRegisterQHYCCDNew(qhyccd_handle *handle,
+ CCDREG reg, uint32_t P_Size, uint32_t *Total_P, uint32_t *PatchNumber)
+ @brief New interface!!! send register params to deivce and some other info
+ @param handle deivce control handle
+ @param reg register struct
+ @param P_Size the package size
+ @param Total_P the total packages
+ @param PatchNumber the patch for usb transfer,the total size must multiple 512 bytes.
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t sendRegisterQHYCCDNew(qhyccd_handle *handle,
+ CCDREG reg, uint32_t P_Size, uint32_t *Total_P, uint32_t *PatchNumber);
+
+ /**
+ @fn uint32_t sendRegisterBioCCD(qhyccd_handle *handle,BIOREG reg)
+ @brief api like sendRegisterQHYCCDOld,just a different version for some kinds of cameras
+ @param handle deivce control handle
+ @param reg register struct
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t sendRegisterBioCCD(qhyccd_handle *handle, BIOREG reg);
+
+ /**
+ @fn uint32_t setDisableGuider_INT(qhyccd_handle *handle)
+ @brief turn off the ST4 port(guide port)
+ @param handle deivce control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t setDisableGuider_INT(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t setBioCCDDigitalGain_INT(qhyccd_handle *handle,uint8_t gain)
+ @brief set bioccd digitalgain
+ @param handle deivce control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t setBioCCDDigitalGain_INT(qhyccd_handle *handle, uint8_t gain);
+
+ /**
+ @fn uint32_t setBioCCDGain_INT(qhyccd_handle *handle,uint8_t gain)
+ @brief set bioccd analog gain
+ @param handle deivce control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t setBioCCDGain_INT(qhyccd_handle *handle, uint16_t gain);
+
+ /**
+ @fn uint32_t getExpSetting(double T, uint32_t *ExpTime, int32_t *LiveExpTime, double A,double B, double V, double LinePeriod)
+ @brief calc the exposure time
+ @param T
+ @param ExpTime
+ @param LiveExpTime
+ @param A
+ @param B
+ @param V
+ @param LinePeriod
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t getExpSetting(double T, uint32_t *ExpTime, int32_t *LiveExpTime, double A, double B, double V, double LinePeriod);
+
+ /**
+ @fn uint32_t setBioCCDExp_INT(qhyccd_handle *handle,uint32_t ExpTime)
+ @brief set bioccd exposure time
+ @param handle deivce control handle
+ @param ExpTime exposure time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t setBioCCDExp_INT(qhyccd_handle *handle, uint32_t ExpTime);
+
+ /**
+ @fn uint32_t setBioCCDLiveExp_INT(qhyccd_handle *handle,uint16_t VideoExpTime)
+ @brief set bioccd live exposure time
+ @param handle deivce control handle
+ @param VideoExpTime live exposure time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t setBioCCDLiveExp_INT(qhyccd_handle *handle, uint16_t VideoExpTime);
+
+ /**
+ @fn uint32_t setDC201FromInterrupt(qhyccd_handle *handle,uint8_t PWM,uint8_t FAN)
+ @brief control the DC201 using the interrupt endpoint
+ @param handle deivce control handle
+ @param PWM cool power
+ @param FAN switch for camera's fan (NOT SUPPORT NOW)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t setDC201FromInterrupt(qhyccd_handle *handle, uint8_t PWM, uint8_t FAN);
+
+ /**
+ @fn signed short getDC201FromInterrupt(qhyccd_handle *handle)
+ @brief get the temprature value from DC201 using the interrupt endpoint
+ @param handle deivce control handle
+ @return
+ success return temprature value \n
+ another QHYCCD_ERROR code on other failures
+ */
+ int16_t getDC201FromInterrupt(qhyccd_handle *handle);
+
+ /**
+ @fn uint8_t getFromInterrupt(qhyccd_handle *handle,uint8_t length,uint8_t *data)
+ @brief get some special information from deivce,using interrupt endpoint
+ @param handle deivce control handle
+ @param length package size
+ @param data package buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint8_t getFromInterrupt(qhyccd_handle *handle, uint8_t length, uint8_t *data);
+
+ /**
+ @fn double GetCCDTemp(qhyccd_handle *handle)
+ @brief get ccd/cmos chip temperature
+ @param handle deivce control handle
+ @return
+ success return temperature \n
+ */
+ double GetCCDTemp(qhyccd_handle *handle);
+
+ /**
+ @fn double RToDegree(double R)
+ @brief calc,transfer R to degree
+ @param R R
+ @return
+ success return degree
+ */
+ double RToDegree(double R);
+
+ /**
+ @fn double mVToDegree(double V)
+ @brief calc,transfer mV to degree
+ @param V mv
+ @return
+ success return degree
+ */
+ double mVToDegree(double V);
+
+ /**
+ @fn double DegreeTomV(double degree)
+ @brief calc,transfer degree to mv
+ @param degree degree
+ @return
+ success return mv
+ */
+ double DegreeTomV(double degree);
+
+ /**
+ @fn double DegreeToR(double degree)
+ @brief calc,transfer degree to R
+ @param degree degree
+ @return
+ success return R
+ */
+ double DegreeToR(double degree);
+
+ /**
+ @fn uint32_t I2CTwoWrite(qhyccd_handle *handle,uint16_t addr,uint16_t value)
+ @brief set param by I2C
+ @param handle device control handle
+ @param addr inter reg addr
+ @param value param value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t I2CTwoWrite(qhyccd_handle *handle, uint16_t addr, uint16_t value);
+
+ /**
+ @fn uint16_t I2CTwoRead(qhyccd_handle *handle,uint16_t addr)
+ @brief get param by I2C
+ @param handle device control handle
+ @param addr inter reg addr
+ @return
+ success return param value \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint16_t I2CTwoRead(qhyccd_handle *handle, uint16_t addr);
+
+ /**
+ @fn uint8_t MSB(uint16_t i)
+ @brief apart the 16 bits value to 8bits(high 8bits)
+ @param i 16bits value
+ @return
+ success return 8bits value(high 8bits) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint8_t MSB(uint16_t i);
+
+ /**
+ @fn uint8_t LSB(uint16_t i)
+ @brief apart the 16 bits value to 8bits(low 8bits)
+ @param i 16bits value
+ @return
+ success return 8bits value(low 8bits) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint8_t LSB(uint16_t i);
+ uint8_t MSB3(uint32_t i);
+ uint8_t MSB2(uint32_t i);
+ uint8_t MSB1(uint32_t i);
+ uint8_t MSB0(uint32_t i);
+
+ void SWIFT_MSBLSB12BITS(uint8_t * Data, uint32_t x, uint32_t y);
+ void SWIFT_MSBLSB16BITS(uint8_t * Data, uint32_t x, uint32_t y);
+ void SWIFT_MSBLSB14BITS(uint8_t * Data, uint32_t x, uint32_t y);
+
+ void QHY5II_SWIFT_MSBLSB12BITS(uint8_t * Data, uint32_t x, uint32_t y);
+ void QHY5II_SWIFT_MSBLSB14BITS(uint8_t * Data, uint32_t x, uint32_t y);
+ void QHY5II_SWIFT_8BitsTo16Bits(uint8_t * Dst, uint8_t * Src, uint32_t x, uint32_t y);
+
+ void QHY5II_DeNoise(uint8_t *data, uint32_t x, uint32_t y, double curgain);
+ //void OutputDebugPrintf(const char * strOutputString,...);
+
+ static void *pollHandleEvents(void *arg);
+ static void findCompleteFrame(uint8_t *rawarray, uint32_t length);
+ static void asyImageDataCallBack(struct libusb_transfer *transfer);
+ const char* STDCALL GetTimeStamp();
+
+ uint32_t camstatus; // the camera current status
+ uint32_t ep1num; // ep1in transfer data length
+ uint32_t usbintrep; // usb interrupt read endpoint
+ uint32_t psize; // usb transfer package size at onece
+ uint32_t totalp; // the total usb transfer packages
+ uint32_t patchnumber; // patch for image transfer packages
+ uint32_t readp; // the number of alreay read usb transfer packages
+
+ int32_t m_UsbTransferred;
+
+ uint8_t m_disableTempReadout;
+
+ uint8_t usbep; // usb transfer endpoint
+ uint8_t usbintwep; // usb interrupt write endpoint
+ uint8_t intepflag;
+ uint8_t usbtype;
+ uint8_t m_UsbPacket[LIBUSB_PACKET_LENGTH];
+
+ CCDREG ccdreg; // ccd registers params
+ BIOREG imgreg; // bioccd registers params
+ char timeStampStr[128];
+
+#ifdef WIN32
+ CRITICAL_SECTION csep;
+#else
+ pthread_mutex_t mutex;
+#endif
+
+};
+
+#endif
diff --git a/include/qhy/qhyccd.h b/include/qhy/qhyccd.h
new file mode 100644
index 0000000..8f709e1
--- /dev/null
+++ b/include/qhy/qhyccd.h
@@ -0,0 +1,139 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+#ifndef _QHYCCD_H_
+#define _QHYCCD_H_
+
+#include "qhycam.h"
+#include "qhyccderr.h"
+#include "qhyccdcamdef.h"
+#include "qhyccdstruct.h"
+#include "stdint.h"
+#include "qhydevice.h"
+
+#ifdef WIN32
+#include "cyapi.h"
+typedef CCyUSBDevice qhyccd_handle;
+#else // Linux & Mac
+typedef struct libusb_device_handle qhyccd_handle;
+uint32_t DeviceIsQHYCCD(uint32_t index, qhyccd_device *pDevice);
+EXPORTC void STDCALL MutexInit();
+EXPORTC void STDCALL MutexDestroy();
+EXPORTC void STDCALL MutexLock();
+EXPORTC void STDCALL MutexUnlock();
+EXPORTC int STDCALL MutexTrylock();
+#endif // WIN32
+
+class QHYBASE;
+class QhyDevice;
+
+uint32_t DeviceIsQHYCCD(uint32_t index, uint32_t vid, uint32_t pid);
+uint32_t QHYCCDSeriesMatch(uint32_t index, qhyccd_handle *pHandle);
+uint32_t GetIdFromCam(qhyccd_handle *pHandle, char *id);
+
+EXPORTC QhyDevice* STDCALL GetCyDevBasedOnInstance(QHYBASE *pCam);
+EXPORTC QhyDevice* STDCALL GetCyDevBasedOnHandle(qhyccd_handle *pHandle);
+EXPORTC int GetCyDevIdxBasedOnInstance(QHYBASE *pCam);
+EXPORTC int GetCyDevIdxBasedOnHandle(qhyccd_handle *pHandle);
+EXPORTC uint32_t STDCALL GetReceivedRawDataLen(QHYBASE *pCam);
+EXPORTC bool STDCALL SetReceivedRawDataLen(QHYBASE *pCam, uint32_t value);
+EXPORTC bool STDCALL CleanUnlockImageQueue(QHYBASE *pCam);
+//EXPORTC bool STDCALL SetUnlockImageQueue(QHYBASE *pCam);
+EXPORTC uint32_t STDCALL InitQHYCCDClass(uint32_t camtype, uint32_t index);
+EXPORTC uint32_t STDCALL InitQHYCCDResource(void);
+EXPORTC uint32_t STDCALL ReleaseQHYCCDResource(void);
+EXPORTC uint32_t STDCALL ScanQHYCCD(void);
+EXPORTC uint32_t STDCALL GetQHYCCDId(int index, char *id);
+EXPORTC uint32_t STDCALL GetQHYCCDModel(char *id, char *model);
+EXPORTC qhyccd_handle * STDCALL OpenQHYCCD(char *id);
+EXPORTC uint32_t STDCALL CloseQHYCCD(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL SetQHYCCDStreamMode(qhyccd_handle *handle,uint8_t mode);
+EXPORTC uint32_t STDCALL InitQHYCCD(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL IsQHYCCDControlAvailable(qhyccd_handle *handle,CONTROL_ID controlId);
+EXPORTC uint32_t STDCALL SetQHYCCDParam(qhyccd_handle *handle,CONTROL_ID controlId, double value);
+EXPORTC double STDCALL GetQHYCCDParam(qhyccd_handle *handle,CONTROL_ID controlId);
+EXPORTC uint32_t STDCALL GetQHYCCDParamMinMaxStep(qhyccd_handle *handle,CONTROL_ID controlId,double *min,double *max,double *step);
+EXPORTC uint32_t STDCALL SetQHYCCDResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+EXPORTC uint32_t STDCALL GetQHYCCDMemLength(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL ExpQHYCCDSingleFrame(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL GetQHYCCDSingleFrame(qhyccd_handle *handle,uint32_t *w,uint32_t *h,uint32_t *bpp,uint32_t *channels,uint8_t *imgdata);
+EXPORTC uint32_t STDCALL CancelQHYCCDExposing(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL CancelQHYCCDExposingAndReadout(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL BeginQHYCCDLive(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL GetQHYCCDLiveFrame(qhyccd_handle *handle,uint32_t *w,uint32_t *h,uint32_t *bpp,uint32_t *channels,uint8_t *imgdata);
+EXPORTC uint32_t STDCALL StopQHYCCDLive(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL SetQHYCCDBinMode(qhyccd_handle *handle,uint32_t wbin,uint32_t hbin);
+EXPORTC uint32_t STDCALL SetQHYCCDBitsMode(qhyccd_handle *handle,uint32_t bits);
+EXPORTC uint32_t STDCALL ControlQHYCCDTemp(qhyccd_handle *handle,double targettemp);
+EXPORTC uint32_t STDCALL ControlQHYCCDGuide(qhyccd_handle *handle,uint32_t direction,uint16_t duration);
+EXPORTC uint32_t STDCALL SendOrder2QHYCCDCFW(qhyccd_handle *handle,char *order,uint32_t length);
+EXPORTC uint32_t STDCALL GetQHYCCDCFWStatus(qhyccd_handle *handle,char *status);
+EXPORTC uint32_t STDCALL IsQHYCCDCFWPlugged(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL SetQHYCCDTrigerMode(qhyccd_handle *handle,uint32_t trigerMode);
+EXPORTC void STDCALL Bits16ToBits8(qhyccd_handle *h,uint8_t *InputData16,uint8_t *OutputData8,uint32_t imageX,uint32_t imageY,uint16_t B,uint16_t W);
+EXPORTC void STDCALL HistInfo192x130(qhyccd_handle *h,uint32_t x,uint32_t y,uint8_t *InBuf,uint8_t *OutBuf);
+EXPORTC uint32_t STDCALL OSXInitQHYCCDFirmware(char *path);
+EXPORTC uint32_t STDCALL GetQHYCCDChipInfo(qhyccd_handle *h,double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh,uint32_t *bpp);
+EXPORTC uint32_t STDCALL GetQHYCCDEffectiveArea(qhyccd_handle *h,uint32_t *startX, uint32_t *startY, uint32_t *sizeX, uint32_t *sizeY);
+EXPORTC uint32_t STDCALL GetQHYCCDOverScanArea(qhyccd_handle *h,uint32_t *startX, uint32_t *startY, uint32_t *sizeX, uint32_t *sizeY);
+EXPORTC uint32_t STDCALL SetQHYCCDFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+EXPORTC uint32_t STDCALL GetQHYCCDExposureRemaining(qhyccd_handle *h);
+EXPORTC uint32_t STDCALL GetQHYCCDFWVersion(qhyccd_handle *h,uint8_t *buf);
+EXPORTC uint32_t STDCALL SetQHYCCDInterCamSerialParam(qhyccd_handle *h,uint32_t opt);
+EXPORTC uint32_t STDCALL QHYCCDInterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length);
+EXPORTC uint32_t STDCALL QHYCCDInterCamSerialRX(qhyccd_handle *h,char *buf);
+EXPORTC uint32_t STDCALL QHYCCDInterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff);
+EXPORTC uint32_t STDCALL SetQHYCCDInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness);
+EXPORTC uint32_t STDCALL SendFourLine2QHYCCDInterCamOled(qhyccd_handle *handle,char *messagetemp,char *messageinfo,char *messagetime,char *messagemode);
+EXPORTC uint32_t STDCALL SendTwoLine2QHYCCDInterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom);
+EXPORTC uint32_t STDCALL SendOneLine2QHYCCDInterCamOled(qhyccd_handle *handle,char *messageTop);
+EXPORTC uint32_t STDCALL GetQHYCCDCameraStatus(qhyccd_handle *h,uint8_t *buf);
+EXPORTC uint32_t STDCALL GetQHYCCDShutterStatus(qhyccd_handle *handle);
+EXPORTC uint32_t STDCALL ControlQHYCCDShutter(qhyccd_handle *handle,uint8_t status);
+EXPORTC uint32_t STDCALL GetQHYCCDHumidity(qhyccd_handle *handle,double *hd);
+EXPORTC uint32_t STDCALL QHYCCDI2CTwoWrite(qhyccd_handle *handle,uint16_t addr,uint16_t value);
+EXPORTC uint32_t STDCALL QHYCCDI2CTwoRead(qhyccd_handle *handle,uint16_t addr);
+EXPORTC double STDCALL GetQHYCCDReadingProgress(qhyccd_handle *handle);
+EXPORTC void STDCALL SetQHYCCDLogLevel(uint8_t logLevel);
+EXPORTC uint32_t STDCALL TestQHYCCDPIDParas(qhyccd_handle *h, double p, double i, double d);
+EXPORTC uint32_t STDCALL SetQHYCCDTrigerFunction(qhyccd_handle *h,bool value);
+EXPORTC uint32_t STDCALL DownloadFX3FirmWare(uint16_t vid,uint16_t pid,char *imgpath);
+EXPORTC uint32_t STDCALL GetQHYCCDType(qhyccd_handle *h);
+EXPORTC uint32_t STDCALL SetQHYCCDDebayerOnOff(qhyccd_handle *h,bool onoff);
+EXPORTC uint32_t STDCALL SetQHYCCDFineTone(qhyccd_handle *h,uint8_t setshporshd,uint8_t shdloc,uint8_t shploc,uint8_t shwidth);
+EXPORTC uint32_t STDCALL SetQHYCCDGPSVCOXFreq(qhyccd_handle *handle,uint16_t i);
+EXPORTC uint32_t STDCALL SetQHYCCDGPSLedCalMode(qhyccd_handle *handle,uint8_t i);
+EXPORTC void STDCALL SetQHYCCDGPSLedCal(qhyccd_handle *handle,uint32_t pos,uint8_t width);
+EXPORTC void STDCALL SetQHYCCDGPSPOSA(qhyccd_handle *handle,uint8_t is_slave,uint32_t pos,uint8_t width);
+EXPORTC void STDCALL SetQHYCCDGPSPOSB(qhyccd_handle *handle,uint8_t is_slave,uint32_t pos,uint8_t width);
+EXPORTC uint32_t STDCALL SetQHYCCDGPSMasterSlave(qhyccd_handle *handle,uint8_t i);
+EXPORTC void STDCALL SetQHYCCDGPSSlaveModeParameter(qhyccd_handle *handle,uint32_t target_sec,uint32_t target_us,uint32_t deltaT_sec,uint32_t deltaT_us,uint32_t expTime);
+EXPORTC uint32_t STDCALL QHYCCDVendRequestWrite(qhyccd_handle *h,uint8_t req,uint16_t value,uint16_t index1,uint32_t length,uint8_t *data);
+EXPORTC uint32_t STDCALL QHYCCDReadUSB_SYNC(qhyccd_handle *pDevHandle, uint8_t endpoint, uint32_t length, uint8_t *data, uint32_t timeout);
+EXPORTC uint32_t STDCALL QHYCCDLibusbBulkTransfer(qhyccd_handle *pDevHandle, uint8_t endpoint, uint8_t *data, uint32_t length, int32_t *transferred, uint32_t timeout);
+EXPORTC uint32_t STDCALL GetQHYCCDSDKVersion(uint32_t *year,uint32_t *month,uint32_t *day,uint32_t *subday);
+EXPORTC void STDCALL print_cydev(const char *pTitle);
+EXPORTC const char* STDCALL GetTimeStamp();
+EXPORTC void STDCALL GetQHYCCDControlIdString(CONTROL_ID controlId, char *pStr);
+
+#endif // __QHYCCD_H__
diff --git a/include/qhy/qhyccd3a.h b/include/qhy/qhyccd3a.h
new file mode 100644
index 0000000..7c8d3f2
--- /dev/null
+++ b/include/qhy/qhyccd3a.h
@@ -0,0 +1,48 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhybase.h"
+#include "stdint.h"
+
+#ifdef WIN32
+
+void STDCALL Init_3A_AutoExposure(qhyccd_handle *h, double curaec, double curagc);
+
+void STDCALL Release_3A_AutoExposure();
+
+void STDCALL AECAGC(qhyccd_handle *camhandle,IplImage *img, int MessureMethod, int ControlMode);
+
+void STDCALL Init_3A_AutoWhiteBalance(qhyccd_handle *h);
+
+uint32_t STDCALL AutoControlWhiteBlance(qhyccd_handle *h,IplImage *img,uint32_t isglobal,uint32_t x,uint32_t y);
+
+void STDCALL Release_3A_AutoWhiteBalance();
+
+void STDCALL Init_3A_AutoFocus(qhyccd_handle *h);
+
+uint32_t STDCALL GetFocusCandy(IplImage *img, IplImage *outputImg, int x, int y);
+
+void STDCALL Release_3A_AutoFocus();
+
+#endif \ No newline at end of file
diff --git a/include/qhy/qhyccdcamdef.h b/include/qhy/qhyccdcamdef.h
new file mode 100644
index 0000000..e7051f4
--- /dev/null
+++ b/include/qhy/qhyccdcamdef.h
@@ -0,0 +1,528 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ @file qhyccdcamdef.h
+ @brief QHYCCD SDK error define
+ */
+
+#ifndef __QHYCCDCAMDEF_H__
+#define __QHYCCDCAMDEF_H__
+
+//#define GIGAESUPPORT
+
+//#define QHYCCD_OPENCV_SUPPORT
+
+
+/* IMG series */
+
+
+/**
+ * Type define for IMG0S */
+#define DEVICETYPE_IMG0S 1000
+
+/**
+ * Type define for IMG0H */
+#define DEVICETYPE_IMG0H 1001
+
+/**
+ * Type define for IMG0L */
+#define DEVICETYPE_IMG0L 1002
+
+/**
+ * Type define for IMG0X */
+#define DEVICETYPE_IMG0X 1003
+
+/**
+ * Type define for IMG1S */
+#define DEVICETYPE_IMG1S 1004
+
+/**
+ * Type define for IMG2S */
+#define DEVICETYPE_IMG2S 1005
+
+/**
+ * Type define for IMG1E */
+#define DEVICETYPE_IMG1E 1006
+
+
+/* QHY5 seires */
+
+/**
+ * Type define for QHY5 */
+#define DEVICETYPE_QHY5 2001
+
+
+/* QHY5II series */
+
+/**
+ * Type define for QHY5II */
+#define DEVICETYPE_QHY5II 3001
+
+/**
+ * Type define for QHY5LII_M */
+#define DEVICETYPE_QHY5LII_M 3002
+
+/**
+ * Type define for QHY5LII_C */
+#define DEVICETYPE_QHY5LII_C 3003
+
+/**
+ * Type define for QHY5TII */
+#define DEVICETYPE_QHY5TII 3004
+
+/**
+ * Type define for QHY5RII */
+#define DEVICETYPE_QHY5RII 3005
+
+/**
+ * Type define for QHY5PII */
+#define DEVICETYPE_QHY5PII 3006
+
+/**
+ * Type define for QHY5VII */
+#define DEVICETYPE_QHY5VII 3007
+
+/**
+ * Type define for QHY5HII */
+#define DEVICETYPE_QHY5HII 3008
+
+/**
+ * Type define for QHYXXX */
+#define DEVICETYPE_MINICAM5S_M 3009
+
+/**
+ * Type define for QHYXXX */
+#define DEVICETYPE_MINICAM5S_C 3010
+
+/**
+ * Type define for QHY5PII_C */
+#define DEVICETYPE_QHY5PII_C 3011
+
+/**
+ * Type define for QHY5RII-M */
+#define DEVICETYPE_QHY5RII_M 3012
+
+/**
+ * Type define for QHY5RII-M */
+#define DEVICETYPE_MINICAM5F_M 3013
+
+/**
+ * Type define for QHY5PII_M */
+#define DEVICETYPE_QHY5PII_M 3014
+
+/**
+ * Type define for QHY5TII */
+#define DEVICETYPE_QHY5TII_C 3015
+
+/**
+ * Type define for POLEMASTER */
+#define DEVICETYPE_POLEMASTER 3016
+
+/**
+ * Type define for QHY5IIEND */
+#define DEVICETYPE_QHY5IIEND 3999
+
+
+/* QHY5III seires */
+
+/**
+ * Type define for QHY5III174*/
+#define DEVICETYPE_QHY5III174 4000
+
+/**
+ * Type define for QHY5III174 */
+#define DEVICETYPE_QHY5III174M 4001
+
+/**
+ * Type define for QHY5III174C*/
+#define DEVICETYPE_QHY5III174C 4002
+
+/**
+ * Type define for QHY174*/
+#define DEVICETYPE_QHY174 4003
+
+/**
+ * Type define for QHY174M*/
+#define DEVICETYPE_QHY174M 4004
+
+/**
+ * Type define for QHY174C*/
+#define DEVICETYPE_QHY174C 4005
+
+/**
+ * Type define for QHY5III178*/
+#define DEVICETYPE_QHY5III178 4006
+
+/**
+ * Type define for QHY5III178C*/
+#define DEVICETYPE_QHY5III178C 4007
+
+/**
+ * Type define for QHY5III178M*/
+#define DEVICETYPE_QHY5III178M 4008
+
+/**
+ * Type define for QHY178*/
+#define DEVICETYPE_QHY178 4009
+
+/**
+ * Type define for QHY178M*/
+#define DEVICETYPE_QHY178M 4010
+
+/**
+ * Type define for QHY178C*/
+#define DEVICETYPE_QHY178C 4011
+
+/**
+ * Type define for QHY5III185*/
+#define DEVICETYPE_QHY5III185 4012
+
+/**
+ * Type define for QHY5III185C*/
+#define DEVICETYPE_QHY5III185C 4013
+
+/**
+ * Type define for QHY5III185M*/
+#define DEVICETYPE_QHY5III185M 4014
+
+/**
+ * Type define for QHY185*/
+#define DEVICETYPE_QHY185 4015
+
+/**
+ * Type define for QHY185M*/
+#define DEVICETYPE_QHY185M 4016
+
+/**
+ * Type define for QHY185C*/
+#define DEVICETYPE_QHY185C 4017
+
+/**
+ * Type define for QHY5III224*/
+#define DEVICETYPE_QHY5III224 4018
+
+/**
+ * Type define for QHY5III224C*/
+#define DEVICETYPE_QHY5III224C 4019
+
+/**
+ * Type define for QHY5III224M*/
+#define DEVICETYPE_QHY5III224M 4020
+
+/**
+ * Type define for QHY224*/
+#define DEVICETYPE_QHY224 4021
+
+/**
+ * Type define for QHY224M*/
+#define DEVICETYPE_QHY224M 4022
+
+/**
+ * Type define for QHY224C*/
+#define DEVICETYPE_QHY224C 4023
+
+/**
+ * Type define for QHY5III290*/
+#define DEVICETYPE_QHY5III290 4024
+
+/**
+ * Type define for QHY5III290C*/
+#define DEVICETYPE_QHY5III290C 4025
+
+/**
+ * Type define for QHY5III290M*/
+#define DEVICETYPE_QHY5III290M 4026
+
+/**
+ * Type define for QHY290*/
+#define DEVICETYPE_QHY290 4027
+
+/**
+ * Type define for QHY290M*/
+#define DEVICETYPE_QHY290M 4028
+
+/**
+ * Type define for QHY290C*/
+#define DEVICETYPE_QHY290C 4029
+
+/**
+ * Type define for QHY5III236*/
+#define DEVICETYPE_QHY5III236 4030
+
+/**
+ * Type define for QHY5III236C*/
+#define DEVICETYPE_QHY5III236C 4031
+
+/**
+ * Type define for QHY5III290M*/
+#define DEVICETYPE_QHY5III236M 4032
+
+/**
+ * Type define for QHY236*/
+#define DEVICETYPE_QHY236 4033
+
+/**
+ * Type define for QHY236M*/
+#define DEVICETYPE_QHY236M 4034
+
+/**
+ * Type define for QHY236C*/
+#define DEVICETYPE_QHY236C 4035
+
+/**
+ * Type define for GSENSE400*/
+#define DEVICETYPE_QHY5IIIG400M 4036
+
+/**
+ * Type define for QHY163*/
+#define DEVICETYPE_QHY163 4037
+
+/**
+ * Type define for QHY163M*/
+#define DEVICETYPE_QHY163M 4038
+
+/**
+ * Type define for QHY163C*/
+#define DEVICETYPE_QHY163C 4039
+
+/**
+ * Type define for QHY165*/
+#define DEVICETYPE_QHY165 4040
+
+/**
+ * Type define for QHY165C*/
+#define DEVICETYPE_QHY165C 4041
+
+/**
+ * Type define for QHY367*/
+#define DEVICETYPE_QHY367 4042
+
+/**
+ * Type define for QHY367C*/
+#define DEVICETYPE_QHY367C 4043
+
+/**
+ * Type define for QHY183*/
+#define DEVICETYPE_QHY183 4044
+
+/**
+ * Type define for QHY183C*/
+#define DEVICETYPE_QHY183C 4045
+
+/**
+ * Type define for QHY-DevelopDev*/
+#define DEVICETYPE_QHY5IIICOMMON 4046
+
+/**
+ * Type define for QHY247*/
+#define DEVICETYPE_QHY247 4047
+
+/**
+ * Type define for QHY247C*/
+#define DEVICETYPE_QHY247C 4048
+
+/**
+ * Type define for MINICAM6F*/
+#define DEVICETYPE_MINICAM6F 4049
+
+/**
+ * Type define for QHY168C*/
+#define DEVICETYPE_QHY168 4050
+
+#define DEVICETYPE_QHY168C 4051
+
+/**
+ * Type define for QHY128C*/
+#define DEVICETYPE_QHY128 4052
+
+#define DEVICETYPE_QHY128C 4053
+#define DEVICETYPE_QHY294 4054
+#define DEVICETYPE_QHY2020 4055
+#define DEVICETYPE_QHY4040 4056
+
+
+
+/**
+ * Type define for QHY5IIIEND*/
+#define DEVICETYPE_QHY5IIIEND 4999
+
+/**
+ * Type define for QHY16 */
+#define DEVICETYPE_QHY16 16
+
+/**
+ * Type define for QHY6 */
+#define DEVICETYPE_QHY6 60
+
+/**
+ * Type define for QHY7 */
+#define DEVICETYPE_QHY7 70
+
+/**
+ * Type define for QHY2PRO */
+#define DEVICETYPE_QHY2PRO 221
+
+/**
+ * Type define for IMG2P */
+#define DEVICETYPE_IMG2P 220
+
+/**
+ * Type define for QHY8 */
+#define DEVICETYPE_QHY8 400
+
+/**
+ * Type define for QHY8PRO */
+#define DEVICETYPE_QHY8PRO 453
+
+/**
+ * Type define for QHY16000 */
+#define DEVICETYPE_QHY16000 361
+
+/**
+ * Type define for QHY12 */
+#define DEVICETYPE_QHY12 613
+
+/**
+ * Type define for IC8300 */
+#define DEVICETYPE_IC8300 890
+
+/**
+ * Type define for QHY9S */
+#define DEVICETYPE_QHY9S 892
+
+/**
+ * Type define for QHY10 */
+#define DEVICETYPE_QHY10 893
+
+/**
+ * Type define for QHY8L */
+#define DEVICETYPE_QHY8L 891
+
+/**
+ * Type define for QHY11 */
+#define DEVICETYPE_QHY11 894
+
+/**
+ * Type define for QHY21 */
+#define DEVICETYPE_QHY21 895
+
+/**
+ * Type define for QHY22 */
+#define DEVICETYPE_QHY22 896
+
+/**
+ * Type define for QHY23 */
+#define DEVICETYPE_QHY23 897
+
+/**
+ * Type define for QHY15 */
+#define DEVICETYPE_QHY15 898
+
+/**
+ * Type define for QHY27 */
+#define DEVICETYPE_QHY27 899
+
+
+/**
+ * Type define for QHY28 */
+#define DEVICETYPE_QHY28 902
+
+/**
+ * Type define for QHY9T */
+#define DEVICETYPE_QHY9T 905
+
+/**
+ * Type define for QHY29 */
+#define DEVICETYPE_QHY29 907
+
+/**
+ * Type define for SOLAR1600 */
+#define DEVICETYPE_SOLAR1600 908
+
+/* QHYA seires */
+
+/**
+ * Type define for QHY90A/IC90A */
+#define DEVICETYPE_90A 900
+
+/**
+ * Type define for QHY16200A/IC16200A */
+#define DEVICETYPE_16200A 901
+
+/**
+ * Type define for QHY814A/IC814A */
+#define DEVICETYPE_814A 903
+
+/**
+ * Type define for 16803 */
+#define DEVICETYPE_16803 906
+
+/**
+ * Type define for 16803 */
+#define DEVICETYPE_09000 930
+
+
+/**
+ * Type define for 695A*/
+#define DEVICETYPE_695A 916
+
+
+/**
+ * Type define for QHY15GIGAE */
+#define DEVICETYPE_QHY15G 9000
+
+/**
+ * Type define for SOLAR800G */
+#define DEVICETYPE_SOLAR800G 9001
+
+#define DEVICETYPE_A0340G 9003
+
+#define DEVICETYPE_QHY08050G 9004
+
+#define DEVICETYPE_QHY694G 9005
+
+#define DEVICETYPE_QHY27G 9006
+
+#define DEVICETYPE_QHY23G 9007
+
+#define DEVICETYPE_QHY16000G 9008
+
+#define DEVICETYPE_QHY160002AD 9009
+
+#define DEVICETYPE_QHY814G 9010
+
+#define DEVICETYPE_QHY45GX 9011
+
+#define DEVICETYPE_QHY10_FOCUS 9012
+
+#define DEVICETYPE_QHY50GX 9013
+
+
+
+/**
+ * Type define for UNKNOWN */
+#define DEVICETYPE_UNKNOWN -1
+
+#endif
diff --git a/include/qhy/qhyccderr.h b/include/qhy/qhyccderr.h
new file mode 100644
index 0000000..be24b3a
--- /dev/null
+++ b/include/qhy/qhyccderr.h
@@ -0,0 +1,169 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! \file qhyccderr.h
+ \brief QHYCCD SDK error define
+ */
+
+#ifndef __QHYCCDERR_H__
+#define __QHYCCDERR_H__
+
+#define QHYCCD_READ_DIRECTLY 0x2001
+
+#define QHYCCD_DELAY_200MS 0x2000
+/**
+ * It means the camera using GiGaE transfer data */
+#define QHYCCD_QGIGAE 7
+
+/**
+ * It means the camera using usb sync transfer data */
+#define QHYCCD_USBSYNC 6
+
+/**
+ * It means the camera using usb async transfer data */
+#define QHYCCD_USBASYNC 5
+
+/**
+ * It means the camera is color one */
+#define QHYCCD_COLOR 4
+
+/**
+ * It means the camera is mono one*/
+#define QHYCCD_MONO 3
+
+/**
+ * It means the camera has cool function */
+#define QHYCCD_COOL 2
+
+/**
+ * It means the camera do not have cool function */
+#define QHYCCD_NOTCOOL 1
+
+/**
+ * camera works well */
+#define QHYCCD_SUCCESS 0
+
+/**
+ * Other error */
+#define QHYCCD_ERROR 0xFFFFFFFF
+
+#if 0
+/**
+ * There is no camera connected */
+#define QHYCCD_ERROR_NO_DEVICE -2
+
+/**
+ * Do not support the function */
+#define QHYCCD_ERROR -3
+
+/**
+ * Set camera params error */
+#define QHYCCD_ERROR_SETPARAMS -4
+
+/**
+ * Get camera params error */
+#define QHYCCD_ERROR_GETPARAMS -5
+
+/**
+ * The camera is exposing now */
+#define QHYCCD_ERROR_EXPOSING -6
+
+/**
+ * The camera expose failed */
+#define QHYCCD_ERROR_EXPFAILED -7
+
+/**
+ * There is another instance is getting data from camera */
+#define QHYCCD_ERROR_GETTINGDATA -8
+
+/**
+ * Get data from camera failed */
+#define QHYCCD_ERROR_GETTINGFAILED -9
+
+/**
+ * Init camera failed */
+#define QHYCCD_ERROR_INITCAMERA -10
+
+/**
+ * Release SDK resouce failed */
+#define QHYCCD_ERROR_RELEASERESOURCE -11
+
+/**
+ * Init SDK resouce failed */
+#define QHYCCD_ERROR_INITRESOURCE -12
+
+/**
+ * There is no match camera */
+#define QHYCCD_ERROR -13
+
+/**
+ * Open cam failed */
+#define QHYCCD_ERROR_OPENCAM -14
+
+/**
+ * Init cam class failed */
+#define QHYCCD_ERROR_INITCLASS -15
+
+/**
+ * Set Resolution failed */
+#define QHYCCD_ERROR -16
+
+/**
+ * Set usbtraffic failed */
+#define QHYCCD_ERROR -17
+
+/**
+ * Set usb speed failed */
+#define QHYCCD_ERROR -18
+
+/**
+ * Set expose time failed */
+#define QHYCCD_ERROR_SETEXPOSE -19
+
+/**
+ * Set cam gain failed */
+#define QHYCCD_ERROR_SETGAIN -20
+
+/**
+ * Set cam white balance red failed */
+#define QHYCCD_ERROR_SETRED -21
+
+/**
+ * Set cam white balance blue failed */
+#define QHYCCD_ERROR_SETBLUE -22
+
+/**
+ * Set cam white balance blue failed */
+#define QHYCCD_ERROR_EVTCMOS -23
+
+/**
+ * Set cam white balance blue failed */
+#define QHYCCD_ERROR_EVTUSB -24
+
+/**
+ * Set cam white balance blue failed */
+#define QHYCCD_ERROR -25
+#endif // #if 0
+
+#endif
diff --git a/include/qhy/qhyccdhex2cam.h b/include/qhy/qhyccdhex2cam.h
new file mode 100644
index 0000000..c64d506
--- /dev/null
+++ b/include/qhy/qhyccdhex2cam.h
@@ -0,0 +1,292 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhyccdhex2cam.h
+ * @brief QHYCCD SDK struct define
+ */
+
+#ifndef __QHYCCDHEX2CAMDEF_H__
+#define __QHYCCDHEX2CAMDEF_H__
+
+#define FX2_CPUCS_ADDR (0xE600)
+#define FX2_INT_RAMSIZE (0x4000)
+
+#define VENDORCMD_TIMEOUT (5000)
+#define MAX_LINE_LENGTH (512)
+#define MAX_BYTES_PER_LINE (256)
+#define EEPROM_WRITE_SIZE (1024)
+
+#define ROUND_UP(n,v) ((((n) + ((v) - 1)) / (v)) * (v))
+#define CHAR_TO_HEXVAL(c) ((((c) >= '0') && ((c) <= '9')) ? ((c) - '0') : ((((c) - 'A') & 0x0F) + 10))
+#define GET_HEX_BYTE(char_p) (((CHAR_TO_HEXVAL((char_p)[0])) << 4) | (CHAR_TO_HEXVAL((char_p)[1])))
+#define GET_HEX_WORD(char_p) (((CHAR_TO_HEXVAL((char_p)[0])) << 12) | ((CHAR_TO_HEXVAL((char_p)[1])) << 8) | \
+((CHAR_TO_HEXVAL((char_p)[2])) << 4) | (CHAR_TO_HEXVAL((char_p)[3])))
+
+/* List of supported programming targets */
+typedef enum {
+ FW_TARGET_NONE = 0, // Invalid target
+ FW_TARGET_RAM, // Program firmware (hex) to RAM
+ FW_TARGET_SM_I2C, // Program VID and PID to Small I2C EEPROM
+ FW_TARGET_LR_I2C // Program VID and PID to Large I2C EEPROM
+} fx2_fw_tgt_p;
+
+/*
+static char fx2_vendax[][256] = {
+ ":0a0d3e0000010202030304040505",
+ ":10064d00E4F52CF52BF52AF529C203C200C202C2",
+ ":10065d0001120C6C7E0A7F008E0A8F0B75120A75",
+ ":10066d00131275080A75091C75100A75114A7514",
+ ":10067d000A751578EE54C07003020752752D0075",
+ ":10068d002E808E2F8F30C3749A9FFF740A9ECF24",
+ ":10069d0002CF3400FEE48F288E27F526F525F524",
+ ":1006ad00F523F522F521AF28AE27AD26AC25AB24",
+ ":1006bd00AA23A922A821C3120D035037E5302524",
+ ":1006cd00F582E52F3523F583E0FFE52E2524F582",
+ ":1006dd00E52D3523F583EFF0E4FAF9F8E5242401",
+ ":1006ed00F524EA3523F523E93522F522E83521F5",
+ ":1006fd002180B3852D0A852E0B74002480FF740A",
+ ":10070d0034FFFEC3E5139FF513E5129EF512C3E5",
+ ":10071d000D9FF50DE50C9EF50CC3E50F9FF50FE5",
+ ":10072d000E9EF50EC3E5099FF509E5089EF508C3",
+ ":10073d00E5119FF511E5109EF510C3E5159FF515",
+ ":10074d00E5149EF514D2E843D82090E668E04409",
+ ":10075d00F090E65CE0443DF0D2AF90E680E054F7",
+ ":10076d00F0538EF8C2031207FF30010512039AC2",
+ ":10077d00013003F2120D6450EDC203120C0D2000",
+ ":10078d001690E682E030E704E020E1EF90E682E0",
+ ":10079d0030E604E020E0E4120BB6120D6680C722",
+ ":0b0d330090E50DE030E402C322D322",
+ ":10039a0090E6B9E0700302048514700302052E24",
+ ":1003aa00FE70030205C424FB700302047F147003",
+ ":1003ba0002047914700302046D14700302047324",
+ ":1003ca00056003020639120D68400302064590E6",
+ ":1003da00BBE024FE603B14605624FD6016146040",
+ ":1003ea0024067075E50A90E6B3F0E50B90E6B4F0",
+ ":1003fa00020645120D33500FE51290E6B3F0E513",
+ ":10040a0090E6B4F002064590E6A0E04401F00206",
+ ":10041a0045E50C90E6B3F0E50D90E6B4F0020645",
+ ":10042a00E50E90E6B3F0E50F90E6B4F002064590",
+ ":10043a00E6BAE0FF120BE2AA06A9077B01EA494B",
+ ":10044a00600DEE90E6B3F0EF90E6B4F002064590",
+ ":10045a00E6A0E04401F002064590E6A0E04401F0",
+ ":10046a00020645120CF1020645120D5002064512",
+ ":10047a000D48020645120CDF020645120D6A4003",
+ ":10048a0002064590E6B8E0247F602B14603C2402",
+ ":10049a006003020524A200E433FF25E0FFA202E4",
+ ":1004aa00334F90E740F0E4A3F090E68AF090E68B",
+ ":1004ba007402F0020645E490E740F0A3F090E68A",
+ ":1004ca00F090E68B7402F002064590E6BCE0547E",
+ ":1004da00FF7E00E0D3948040067C007D0180047C",
+ ":1004ea00007D00EC4EFEED4F243EF582740D3EF5",
+ ":1004fa0083E493FF3395E0FEEF24A1FFEE34E68F",
+ ":10050a0082F583E0540190E740F0E4A3F090E68A",
+ ":10051a00F090E68B7402F002064590E6A0E04401",
+ ":10052a00F0020645120D6C400302064590E6B8E0",
+ ":10053a0024FE601D2402600302064590E6BAE0B4",
+ ":10054a000105C20002064590E6A0E04401F00206",
+ ":10055a004590E6BAE0705990E6BCE0547EFF7E00",
+ ":10056a00E0D3948040067C007D0180047C007D00",
+ ":10057a00EC4EFEED4F243EF582740D3EF583E493",
+ ":10058a00FF3395E0FEEF24A1FFEE34E68F82F583",
+ ":10059a00E054FEF090E6BCE05480FF131313541F",
+ ":1005aa00FFE0540F2F90E683F0E04420F0020645",
+ ":1005ba0090E6A0E04401F0020645120D6E507C90",
+ ":1005ca00E6B8E024FE60202402705B90E6BAE0B4",
+ ":1005da000104D200806590E6BAE06402605D90E6",
+ ":1005ea00A0E04401F0805490E6BCE0547EFF7E00",
+ ":1005fa00E0D3948040067C007D0180047C007D00",
+ ":10060a00EC4EFEED4F243EF582740D3EF583E493",
+ ":10061a00FF3395E0FEEF24A1FFEE34E68F82F583",
+ ":10062a00E04401F0801590E6A0E04401F0800C12",
+ ":10063a000080500790E6A0E04401F090E6A0E044",
+ ":03064a0080F022",
+ ":03003300020D60",
+ ":040d600053D8EF32",
+ ":100c6c00D200E4F51A90E678E05410FFC4540F44",
+ ":090c7c0050F51713E433F51922",
+ ":0107ff0022",
+ ":060d6400D322D322D322",
+ ":080d480090E6BAE0F518D322",
+ ":100cdf0090E740E518F0E490E68AF090E68B04F0",
+ ":020cef00D322",
+ ":080d500090E6BAE0F516D322",
+ ":100cf10090E740E516F0E490E68AF090E68B04F0",
+ ":020d0100D322",
+ ":060d6a00D322D322D322",
+ ":1000800090E6B9E0245EB40B0040030203989000",
+ ":100090009C75F003A4C58325F0C5837302019202",
+ ":1000a000019202010D0200BD0200D70200F30201",
+ ":1000b0003C02018C02011602012902016290E740",
+ ":1000c000E519F0E490E68AF090E68B04F090E6A0",
+ ":1000d000E04480F002039890E60AE090E740F0E4",
+ ":1000e00090E68AF090E68B04F090E6A0E04480F0",
+ ":1000f00002039890E740740FF0E490E68AF090E6",
+ ":100100008B04F090E6A0E04480F002039890E6BA",
+ ":10011000E0F51702039890E67AE054FEF0E490E6",
+ ":100120008AF090E68BF002039890E67AE04401F0",
+ ":10013000E490E68AF090E68BF002039890E74074",
+ ":1001400007F0E490E68AF090E68B04F090E6A0E0",
+ ":100150004480F07FE87E031207ADD204120B8702",
+ ":10016000039890E6B5E054FEF090E6BFE090E68A",
+ ":10017000F090E6BEE090E68BF090E6BBE090E6B3",
+ ":10018000F090E6BAE090E6B4F002039875190143",
+ ":10019000170190E6BAE0753100F532A3E0FEE4EE",
+ ":1001a000423190E6BEE0753300F534A3E0FEE4EE",
+ ":1001b000423390E6B8E064C06003020282E53445",
+ ":1001c00033700302039890E6A0E020E1F9C3E534",
+ ":1001d0009440E533940050088533358534368006",
+ ":1001e00075350075364090E6B9E0B4A335E4F537",
+ ":1001f000F538C3E5389536E53795355060E53225",
+ ":1002000038F582E5313537F583E0FF74402538F5",
+ ":1002100082E434E7F583EFF00538E53870020537",
+ ":1002200080D0E4F537F538C3E5389536E5379535",
+ ":10023000501874402538F582E434E7F58374CDF0",
+ ":100240000538E5387002053780DDAD367AE77940",
+ ":100250007EE77F40AB07AF32AE311208B8E490E6",
+ ":100260008AF090E68BE536F02532F532E5353531",
+ ":10027000F531C3E5349536F534E5339535F53302",
+ ":1002800001BD90E6B8E064406003020398E51A70",
+ ":10029000051209678F1AE53445337003020398E4",
+ ":1002a00090E68AF090E68BF090E6A0E020E1F990",
+ ":1002b000E68BE0753500F53690E6B9E0B4A338E4",
+ ":1002c000F537F538C3E5389536E5379535400302",
+ ":1002d000037C74402538F582E434E7F583E0FFE5",
+ ":1002e000322538F582E5313537F583EFF00538E5",
+ ":1002f000387002053780CDE4F537F538C3E53895",
+ ":1003000036E53795355075851A39E51A64016044",
+ ":10031000E5322538FFE5313537FEE51A24FFFDE4",
+ ":1003200034FF5EFEEF5D4E6010E5322538FFE51A",
+ ":10033000145FFFC3E51A9FF539C3E5369538FFE5",
+ ":10034000359537FEC3EF9539EE94005007C3E536",
+ ":100350009538F539E5322538FFE5313537FE7440",
+ ":100360002538F582E434E7AD82FCAB39120A9CE5",
+ ":10037000392538F538E43537F5378080E5362532",
+ ":10038000F532E5353531F531C3E5349536F534E5",
+ ":0a039000339535F533020296C322",
+ ":100c3200C0E0C083C08290E6B5E04401F0D20153",
+ ":0f0c420091EF90E65D7401F0D082D083D0E032",
+ ":100c9d00C0E0C083C0825391EF90E65D7404F0D0",
+ ":100cad0082D083D0E032C0E0C083C0825391EF90",
+ ":0c0cbd00E65D7402F0D082D083D0E032",
+ ":100b1900C0E0C083C08290E680E030E70E85080C",
+ ":100b290085090D85100E85110F800C85100C8511",
+ ":100b39000D85080E85090F5391EF90E65D7410F0",
+ ":070b4900D082D083D0E032",
+ ":100c8500C0E0C083C082D2035391EF90E65D7408",
+ ":080c9500F0D082D083D0E032",
+ ":100b5000C0E0C083C08290E680E030E70E85080C",
+ ":100b600085090D85100E85110F800C85100C8511",
+ ":100b70000D85080E85090F5391EF90E65D7420F0",
+ ":070b8000D082D083D0E032",
+ ":0109ff0032",
+ ":100d700032323232323232323232323232323232",
+ ":100d800032323232323232323232323232323232",
+ ":030d9000323232",
+ ":100a00001201000200000040B404041000000102",
+ ":100a100000010A06000200000040010009022E00",
+ ":100a200001010080320904000004FF0000000705",
+ ":100a300002020002000705040200020007058602",
+ ":100a40000002000705880200020009022E000101",
+ ":100a50000080320904000004FF00000007050202",
+ ":100a600040000007050402400000070586024000",
+ ":100a700000070588024000000403090410034300",
+ ":100a80007900700072006500730073000E034500",
+ ":0c0a90005A002D005500530042000000",
+ ":100bb60090E682E030E004E020E60B90E682E030",
+ ":100bc600E119E030E71590E680E04401F07F147E",
+ ":0c0bd600001207AD90E680E054FEF022",
+ ":100b870030040990E680E0440AF0800790E680E0",
+ ":100b97004408F07FDC7E051207AD90E65D74FFF0",
+ ":0f0ba70090E65FF05391EF90E680E054F7F022",
+ ":1007ad008E3A8F3B90E600E054187012E53B2401",
+ ":1007bd00FFE4353AC313F53AEF13F53B801590E6",
+ ":1007cd0000E05418FFBF100BE53B25E0F53BE53A",
+ ":1007dd0033F53AE53B153BAE3A7002153A4E6005",
+ ":0607ed00120C2180EE22",
+ ":100be200A907AE14AF158F828E83A3E064037017",
+ ":100bf200AD0119ED7001228F828E83E07C002FFD",
+ ":100c0200EC3EFEAF0580DFE4FEFF2290E682E044",
+ ":100c1200C0F090E681F043870100000000002274",
+ ":100c220000F58690FDA57C05A3E582458370F922",
+ ":03004300020800",
+ ":03005300020800",
+ ":10080000020C3200020CB300020C9D00020C8500",
+ ":10081000020B1900020B50000209FF00020D7000",
+ ":10082000020D7100020D7200020D7300020D7400",
+ ":10083000020D7500020D7600020D7700020D7800",
+ ":10084000020D7900020D7000020D7A00020D7B00",
+ ":10085000020D7C00020D7D00020D7E00020D7F00",
+ ":10086000020D8000020D7000020D7000020D7000",
+ ":10087000020D8100020D8200020D8300020D8400",
+ ":10088000020D8500020D8600020D8700020D8800",
+ ":10089000020D8900020D8A00020D8B00020D8C00",
+ ":1008a000020D8D00020D8E00020D8F00020D9000",
+ ":0808b000020D9100020D9200",
+ ":100a9c008E3C8F3D8C3E8D3F8B40C28743B28012",
+ ":100aac000D58120D24120CC95004D2048059E519",
+ ":100abc00600FE53C90E679F0120CC95004D20480",
+ ":100acc0046E53D90E679F0120CC95004D2048037",
+ ":100adc00E4F541E541C395405021053FE53FAE3E",
+ ":100aec007002053E14F5828E83E090E679F0120D",
+ ":100afc00145004D2048010054180D890E678E044",
+ ":0d0b0c0040F0120C51C20453B27FA20422",
+ ":0f0d240090E6787480F0E51725E090E679F022",
+ ":100c5100120D58120D24120D1490E678E04440F0",
+ ":0b0c6100120D5890E678E030E1E922",
+ ":080d580090E678E020E6F922",
+ ":1008b8008E3C8F3D8D3E8A3F8B40120D58120D24",
+ ":1008c800120CC9500122E519600CE53C90E679F0",
+ ":1008d800120CC9500122E53D90E679F0120CC950",
+ ":1008e800012290E6787480F0E51725E0440190E6",
+ ":1008f80079F0120D1450012290E679E0F541120D",
+ ":1009080014500122E4F541E53E14FFE541C39F50",
+ ":100918001C90E679E0FFE5402541F582E4353FF5",
+ ":1009280083EFF0120D14500122054180DA90E678",
+ ":100938007420F0120D1450012290E679E0FFE540",
+ ":100948002541F582E4353FF583EFF0120D145001",
+ ":0f0958002290E6787440F090E679E0F541C322",
+ ":100d140090E678E0FF30E0F8EF30E202D322C322",
+ ":100cc90090E678E0FF30E0F8EF30E202D322EF20",
+ ":060cd900E102D322C322",
+ ":10096700E51970037F01227A107B407D40E4FFFE",
+ ":100977001208B8E4F53A7400253AF582E43410F5",
+ ":1009870083E53AF0053AE53AB440EB7C107D007B",
+ ":1009970040E4FFFE120A9CE4F53AE53AF4FF7400",
+ ":1009a700253AF582E43410F583EFF0053AE53AB4",
+ ":1009b70040E87A107B007D40E4FFFE1208B89010",
+ ":1009c70000E0F53AE53A30E005753B018008633A",
+ ":1009d7003F053A853A3BE4F53AE53AC394405015",
+ ":1009e700AF3A7E007C107D40AB3B120A9CE53B25",
+ ":0809f7003AF53A80E4AF3B22",
+ ":030000000207F3",
+ ":0c07f300787FE4F6D8FD75814102064D",
+ ":100d0300EB9FF5F0EA9E42F0E99D42F0E89C45F0",
+ ":010d130022",
+ ":00000001FF"
+};
+#define FX2_VENDAX_SIZE (sizeof (fx2_vendax) / (256 * sizeof(char)))
+*/
+
+#endif \ No newline at end of file
diff --git a/include/qhy/qhyccdlog.h b/include/qhy/qhyccdlog.h
new file mode 100644
index 0000000..0ab8470
--- /dev/null
+++ b/include/qhy/qhyccdlog.h
@@ -0,0 +1,3713 @@
+#ifndef __QHYCCDLOGDEF_H__
+#define __QHYCCDLOGDEF_H__
+
+uint8_t qhyccdlog[] =
+{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x0,0x0,0x0,0x9,0x9,0x9,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,0x3,\
+0x3,0x3,0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x3,0x3,0x3,0x0,0x0,0x0,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x2,0x2,0x2,0x2,0x2,\
+0x2,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x0,0x0,0x0,0x6,0x6,0x6,0x0,0x0,\
+0x0,0x3,0x3,0x3,0x0,0x0,0x0,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x1,0x1,\
+0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,\
+0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x0,0x0,0x0,0x2,0x2,0x2,0x0,\
+0x0,0x0,0x4,0x4,0x4,0x2,0x2,0x2,0x0,0x0,\
+0x0,0x1,0x1,0x1,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x3,0x3,0x3,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x5,0x5,0x5,0x7,0x7,0x7,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x3,0x3,0x3,0x0,0x0,0x0,0x1,0x1,\
+0x1,0x4,0x4,0x4,0x0,0x0,0x0,0x2,0x2,0x2,\
+0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x4,0x4,0x4,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x3,\
+0x3,0x3,0x0,0x0,0x0,0x6,0x6,0x6,0x6,0x6,\
+0x6,0x5,0x5,0x5,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x5,0x5,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,0x7,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x0,0x0,0x0,0xb,0xb,0xb,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,\
+0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x3,0x3,0x3,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x6,0x6,0x6,\
+0x0,0x0,0x0,0x2,0x2,0x2,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0x4,\
+0x4,0x2,0x2,0x2,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x5,0x5,0x5,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x5,0x5,0x5,0x5,0x5,\
+0x5,0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x14,0x14,0x14,0x44,0x44,0x44,0x3b,0x3b,\
+0x3b,0x42,0x42,0x42,0x35,0x35,0x35,0x24,0x24,0x24,\
+0x34,0x34,0x34,0x37,0x37,0x37,0x3d,0x3d,0x3d,0x3f,\
+0x3f,0x3f,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x42,0x42,\
+0x42,0x3e,0x3e,0x3e,0x5,0x5,0x5,0x1,0x1,0x1,\
+0x5,0x5,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x5,0x5,0x5,0x6,0x6,0x6,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x5,0x5,0x5,\
+0x0,0x0,0x0,0x2,0x2,0x2,0x6,0x6,0x6,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,\
+0x0,0x5,0x5,0x5,0x5,0x5,0x5,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x2,0x2,0x2,\
+0x1,0x1,0x1,0x2,0x2,0x2,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x3,0x3,0x3,0x4,0x4,0x4,0x2,0x2,\
+0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x3,0x3,0x3,0x2,0x2,0x2,0x2,0x2,\
+0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x36,0x36,0x36,0x1c,0x1c,0x1c,0xd,0xd,0xd,0x0,\
+0x0,0x0,0x3,0x3,0x3,0x65,0x65,0x65,0x91,0x91,\
+0x91,0x3a,0x3a,0x3a,0x0,0x0,0x0,0x7,0x7,0x7,\
+0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x27,\
+0x27,0x27,0x2b,0x2b,0x2b,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x9,0x9,0x9,0x3,0x3,0x3,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x2,0x2,0x2,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x5,0x5,0x5,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x5,0x5,0x5,0x0,0x0,0x0,0x5,0x5,0x5,\
+0x0,0x0,0x0,0x3,0x3,0x3,0xa,0xa,0xa,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x3,0x3,0x3,0x1,0x1,\
+0x1,0x0,0x0,0x0,0x7,0x7,0x7,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,\
+0x6,0x6,0x0,0x0,0x0,0x6,0x6,0x6,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x5,0x5,0x5,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x46,0x46,\
+0x46,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x5b,0x5b,0x5b,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xcb,\
+0xcb,0xcb,0x0,0x0,0x0,0x8,0x8,0x8,0x63,0x63,\
+0x63,0x85,0x85,0x85,0x35,0x35,0x35,0x4,0x4,0x4,\
+0x2c,0x2c,0x2c,0x2,0x2,0x2,0x6,0x6,0x6,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,\
+0x1,0x7,0x7,0x7,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x0,0x0,0x0,0x4,0x4,0x4,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x2,0x2,\
+0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,0x7,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x9,\
+0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x5,0x5,\
+0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,\
+0x7,0x3,0x3,0x3,0x1,0x1,0x1,0x7,0x7,0x7,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x5,0x5,0x4,\
+0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x6,0x6,0x6,0x38,0x38,0x38,0xd,\
+0xd,0xd,0x0,0x0,0x0,0xa,0xa,0xa,0xd0,0xd0,\
+0xd0,0xff,0xff,0xff,0xac,0xac,0xac,0x6f,0x6f,0x6f,\
+0x12,0x12,0x12,0x8a,0x8a,0x8a,0xfd,0xfd,0xfd,0xff,\
+0xff,0xff,0xbb,0xbb,0xbb,0x12,0x12,0x12,0x23,0x23,\
+0x23,0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,\
+0xe,0xe,0xe,0x40,0x40,0x40,0x6b,0x6b,0x6b,0x64,\
+0x64,0x64,0x28,0x28,0x28,0x8,0x8,0x8,0x0,0x0,\
+0x0,0xa,0xa,0xa,0x49,0x49,0x49,0x42,0x42,0x42,\
+0xc,0xc,0xc,0x6,0x6,0x6,0x7,0x7,0x7,0x41,\
+0x41,0x41,0x43,0x43,0x43,0x3a,0x3a,0x3a,0x44,0x44,\
+0x44,0x2e,0x2e,0x2e,0x0,0x0,0x0,0x5,0x5,0x5,\
+0x45,0x45,0x45,0x4e,0x4e,0x4e,0xc,0xc,0xc,0xa,\
+0xa,0xa,0x25,0x25,0x25,0x58,0x58,0x58,0x6c,0x6c,\
+0x6c,0x5f,0x5f,0x5f,0x15,0x15,0x15,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x2f,0x2f,0x2f,0x63,0x63,0x63,0x64,\
+0x64,0x64,0x52,0x52,0x52,0x0,0x0,0x0,0x42,0x42,\
+0x42,0x40,0x40,0x40,0x50,0x50,0x50,0x49,0x49,0x49,\
+0x36,0x36,0x36,0x18,0x18,0x18,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x41,0x41,0x41,0x2,0x2,0x2,\
+0x5,0x5,0x5,0x1d,0x1d,0x1d,0xfb,0xfb,0xfb,0xef,\
+0xef,0xef,0x15,0x15,0x15,0x6,0x6,0x6,0x58,0x58,\
+0x58,0xff,0xff,0xff,0xff,0xff,0xff,0xd6,0xd6,0xd6,\
+0xbc,0xbc,0xbc,0x8,0x8,0x8,0x2b,0x2b,0x2b,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x36,0x36,0x36,0xc0,0xc0,\
+0xc0,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xfa,0xfa,0xfa,\
+0xff,0xff,0xff,0x80,0x80,0x80,0x1,0x1,0x1,0x29,\
+0x29,0x29,0xfc,0xfc,0xfc,0xf8,0xf8,0xf8,0x2e,0x2e,\
+0x2e,0x0,0x0,0x0,0x3e,0x3e,0x3e,0xff,0xff,0xff,\
+0xef,0xef,0xef,0xa3,0xa3,0xa3,0xfd,0xfd,0xfd,0xc4,\
+0xc4,0xc4,0x0,0x0,0x0,0x5e,0x5e,0x5e,0xfc,0xfc,\
+0xfc,0xeb,0xeb,0xeb,0x18,0x18,0x18,0x66,0x66,0x66,\
+0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xff,0xff,0xff,0xff,\
+0xff,0xff,0x49,0x49,0x49,0x7,0x7,0x7,0x9d,0x9d,\
+0x9d,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xff,0xff,0xff,\
+0xfc,0xfc,0xfc,0x35,0x35,0x35,0xeb,0xeb,0xeb,0xfc,\
+0xfc,0xfc,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xff,0xff,\
+0xff,0xb7,0xb7,0xb7,0x24,0x24,0x24,0x0,0x0,0x0,\
+0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x3f,0x3f,0x3f,0x6,0x6,0x6,0x1,0x1,\
+0x1,0x4a,0x4a,0x4a,0xff,0xff,0xff,0xb2,0xb2,0xb2,\
+0x0,0x0,0x0,0x25,0x25,0x25,0xee,0xee,0xee,0xff,\
+0xff,0xff,0x9a,0x9a,0x9a,0x21,0x21,0x21,0x21,0x21,\
+0x21,0xb,0xb,0xb,0x27,0x27,0x27,0x0,0x0,0x0,\
+0xf,0xf,0xf,0xde,0xde,0xde,0xfe,0xfe,0xfe,0xb7,\
+0xb7,0xb7,0x49,0x49,0x49,0x79,0x79,0x79,0xf8,0xf8,\
+0xf8,0xfd,0xfd,0xfd,0x42,0x42,0x42,0x1f,0x1f,0x1f,\
+0xff,0xff,0xff,0xeb,0xeb,0xeb,0xc,0xc,0xc,0x0,\
+0x0,0x0,0x34,0x34,0x34,0xff,0xff,0xff,0xe8,0xe8,\
+0xe8,0x22,0x22,0x22,0xe3,0xe3,0xe3,0xfc,0xfc,0xfc,\
+0x4d,0x4d,0x4d,0xd3,0xd3,0xd3,0xff,0xff,0xff,0x4e,\
+0x4e,0x4e,0x47,0x47,0x47,0xfa,0xfa,0xfa,0xff,0xff,\
+0xff,0x93,0x93,0x93,0x49,0x49,0x49,0x5a,0x5a,0x5a,\
+0x22,0x22,0x22,0x83,0x83,0x83,0xff,0xff,0xff,0xf2,\
+0xf2,0xf2,0x76,0x76,0x76,0x48,0x48,0x48,0x5c,0x5c,\
+0x5c,0x22,0x22,0x22,0xee,0xee,0xee,0xff,0xff,0xff,\
+0x67,0x67,0x67,0x62,0x62,0x62,0xde,0xde,0xde,0xff,\
+0xff,0xff,0x91,0x91,0x91,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x6,0x6,\
+0x3e,0x3e,0x3e,0x1,0x1,0x1,0x1,0x1,0x1,0x68,\
+0x68,0x68,0xf8,0xf8,0xf8,0x64,0x64,0x64,0x3,0x3,\
+0x3,0xae,0xae,0xae,0xff,0xff,0xff,0xc5,0xc5,0xc5,\
+0x8,0x8,0x8,0x0,0x0,0x0,0x1,0x1,0x1,0x18,\
+0x18,0x18,0x2a,0x2a,0x2a,0x0,0x0,0x0,0x4d,0x4d,\
+0x4d,0xfc,0xfc,0xfc,0xdb,0xdb,0xdb,0x11,0x11,0x11,\
+0x0,0x0,0x0,0xc,0xc,0xc,0x98,0x98,0x98,0xff,\
+0xff,0xff,0xa6,0xa6,0xa6,0x1e,0x1e,0x1e,0xfc,0xfc,\
+0xfc,0xf6,0xf6,0xf6,0x80,0x80,0x80,0x76,0x76,0x76,\
+0x8f,0x8f,0x8f,0xfe,0xfe,0xfe,0xe0,0xe0,0xe0,0x0,\
+0x0,0x0,0x82,0x82,0x82,0xff,0xff,0xff,0xe8,0xe8,\
+0xe8,0xff,0xff,0xff,0xb7,0xb7,0xb7,0x2,0x2,0x2,\
+0xb3,0xb3,0xb3,0xff,0xff,0xff,0x94,0x94,0x94,0x6,\
+0x6,0x6,0x2,0x2,0x2,0x0,0x0,0x0,0xf,0xf,\
+0xf,0xef,0xef,0xef,0xfd,0xfd,0xfd,0x66,0x66,0x66,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x19,\
+0x19,0x19,0xf1,0xf1,0xf1,0xf5,0xf5,0xf5,0x19,0x19,\
+0x19,0x0,0x0,0x0,0x5f,0x5f,0x5f,0xf8,0xf8,0xf8,\
+0xda,0xda,0xda,0x4,0x4,0x4,0x3,0x3,0x3,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x3e,\
+0x3e,0x6,0x6,0x6,0x0,0x0,0x0,0x7d,0x7d,0x7d,\
+0xfb,0xfb,0xfb,0x2e,0x2e,0x2e,0x43,0x43,0x43,0xfc,\
+0xfc,0xfc,0xdd,0xdd,0xdd,0x1a,0x1a,0x1a,0x43,0x43,\
+0x43,0xa6,0xa6,0xa6,0x72,0x72,0x72,0xc,0xc,0xc,\
+0x26,0x26,0x26,0x7,0x7,0x7,0x6c,0x6c,0x6c,0xff,\
+0xff,0xff,0xa5,0xa5,0xa5,0x0,0x0,0x0,0xe,0xe,\
+0xe,0x0,0x0,0x0,0x5f,0x5f,0x5f,0xfb,0xfb,0xfb,\
+0xaa,0xaa,0xaa,0x35,0x35,0x35,0xff,0xff,0xff,0xff,\
+0xff,0xff,0xf5,0xf5,0xf5,0xfa,0xfa,0xfa,0xff,0xff,\
+0xff,0xff,0xff,0xff,0xd6,0xd6,0xd6,0x1,0x1,0x1,\
+0x13,0x13,0x13,0xd6,0xd6,0xd6,0xff,0xff,0xff,0xe6,\
+0xe6,0xe6,0x31,0x31,0x31,0x2,0x2,0x2,0xd5,0xd5,\
+0xd5,0xff,0xff,0xff,0x4c,0x4c,0x4c,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x5,0x5,0x5,0x2f,0x2f,0x2f,0xfc,\
+0xfc,0xfc,0xf8,0xf8,0xf8,0x19,0x19,0x19,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x20,0x20,0x20,\
+0xf6,0xf6,0xf6,0xf0,0xf0,0xf0,0x1b,0x1b,0x1b,0x0,\
+0x0,0x0,0x45,0x45,0x45,0xf6,0xf6,0xf6,0xdd,0xdd,\
+0xdd,0x7,0x7,0x7,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x2,0x2,0x2,0x43,0x43,0x43,0x1,\
+0x1,0x1,0x3,0x3,0x3,0xa2,0xa2,0xa2,0xe3,0xe3,\
+0xe3,0xa,0xa,0xa,0xed,0xed,0xed,0xf7,0xf7,0xf7,\
+0x2c,0x2c,0x2c,0x78,0x78,0x78,0xff,0xff,0xff,0xff,\
+0xff,0xff,0xff,0xff,0xff,0x2a,0x2a,0x2a,0x2a,0x2a,\
+0x2a,0x0,0x0,0x0,0x66,0x66,0x66,0xff,0xff,0xff,\
+0xc6,0xc6,0xc6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x9c,0x9c,0x9c,0xfc,0xfc,0xfc,0x73,0x73,\
+0x73,0x24,0x24,0x24,0xf5,0xf5,0xf5,0xe1,0xe1,0xe1,\
+0x40,0x40,0x40,0x3c,0x3c,0x3c,0x78,0x78,0x78,0xfe,\
+0xfe,0xfe,0xd0,0xd0,0xd0,0x4,0x4,0x4,0x0,0x0,\
+0x0,0x97,0x97,0x97,0xfc,0xfc,0xfc,0xa4,0xa4,0xa4,\
+0x0,0x0,0x0,0x0,0x0,0x0,0xd8,0xd8,0xd8,0xff,\
+0xff,0xff,0x6f,0x6f,0x6f,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x25,0x25,0x25,0xfb,0xfb,0xfb,\
+0xf9,0xf9,0xf9,0x36,0x36,0x36,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x2,0x2,0x2,0x23,0x23,0x23,0xff,0xff,\
+0xff,0xed,0xed,0xed,0x0,0x0,0x0,0x3,0x3,0x3,\
+0x70,0x70,0x70,0xff,0xff,0xff,0xc1,0xc1,0xc1,0x3,\
+0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x0,0x0,0x0,\
+0x1,0x1,0x1,0xc8,0xc8,0xc8,0x72,0x72,0x72,0x9f,\
+0x9f,0x9f,0xf9,0xf9,0xf9,0x58,0x58,0x58,0x7a,0x7a,\
+0x7a,0xff,0xff,0xff,0xfb,0xfb,0xfb,0xc8,0xc8,0xc8,\
+0xb8,0xb8,0xb8,0x2f,0x2f,0x2f,0x1c,0x1c,0x1c,0x2,\
+0x2,0x2,0x23,0x23,0x23,0xf1,0xf1,0xf1,0xff,0xff,\
+0xff,0x89,0x89,0x89,0x33,0x33,0x33,0x71,0x71,0x71,\
+0xf1,0xf1,0xf1,0xf5,0xf5,0xf5,0x52,0x52,0x52,0x4d,\
+0x4d,0x4d,0xff,0xff,0xff,0xd9,0xd9,0xd9,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x5c,0x5c,0x5c,0xff,0xff,0xff,\
+0xcc,0xcc,0xcc,0x0,0x0,0x0,0x4,0x4,0x4,0x95,\
+0x95,0x95,0xf8,0xf8,0xf8,0x83,0x83,0x83,0x0,0x0,\
+0x0,0x7,0x7,0x7,0x8a,0x8a,0x8a,0xff,0xff,0xff,\
+0xde,0xde,0xde,0x63,0x63,0x63,0x2e,0x2e,0x2e,0x4a,\
+0x4a,0x4a,0x18,0x18,0x18,0xc7,0xc7,0xc7,0xff,0xff,\
+0xff,0xb3,0xb3,0xb3,0x4e,0x4e,0x4e,0x2d,0x2d,0x2d,\
+0x47,0x47,0x47,0x3b,0x3b,0x3b,0xff,0xff,0xff,0xe8,\
+0xe8,0xe8,0x42,0x42,0x42,0x66,0x66,0x66,0xe5,0xe5,\
+0xe5,0xff,0xff,0xff,0x69,0x69,0x69,0x0,0x0,0x0,\
+0x6,0x6,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x35,0x35,0x35,0x15,0x15,0x15,0x35,0x35,\
+0x35,0xce,0xce,0xce,0x89,0x89,0x89,0xf9,0xf9,0xf9,\
+0x7d,0x7d,0x7d,0x96,0x96,0x96,0xff,0xff,0xff,0xf5,\
+0xf5,0xf5,0x74,0x74,0x74,0xa,0xa,0xa,0xe,0xe,\
+0xe,0xf,0xf,0xf,0x21,0x21,0x21,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x69,0x69,0x69,0xed,0xed,0xed,0xf7,\
+0xf7,0xf7,0xff,0xff,0xff,0xf5,0xf5,0xf5,0xff,0xff,\
+0xff,0xff,0xff,0xff,0xbc,0xbc,0xbc,0x67,0x67,0x67,\
+0xfc,0xfc,0xfc,0xe4,0xe4,0xe4,0x0,0x0,0x0,0x5,\
+0x5,0x5,0x75,0x75,0x75,0xff,0xff,0xff,0xc5,0xc5,\
+0xc5,0x0,0x0,0x0,0x6,0x6,0x6,0xb3,0xb3,0xb3,\
+0xfc,0xfc,0xfc,0x7c,0x7c,0x7c,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x13,0x13,0x13,0xbc,0xbc,0xbc,0xfb,0xfb,\
+0xfb,0xff,0xff,0xff,0xfa,0xfa,0xfa,0xff,0xff,0xff,\
+0x26,0x26,0x26,0x2c,0x2c,0x2c,0xd5,0xd5,0xd5,0xff,\
+0xff,0xff,0xfb,0xfb,0xfb,0xff,0xff,0xff,0xdc,0xdc,\
+0xdc,0x4b,0x4b,0x4b,0xfc,0xfc,0xfc,0xff,0xff,0xff,\
+0xfa,0xfa,0xfa,0xf7,0xf7,0xf7,0xff,0xff,0xff,0xa6,\
+0xa6,0xa6,0x7,0x7,0x7,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x3a,0x3a,0x3a,0x62,0x62,0x62,0xba,0xba,0xba,0xb4,\
+0xb4,0xb4,0xd5,0xd5,0xd5,0x96,0x96,0x96,0xbe,0xbe,\
+0xbe,0xff,0xff,0xff,0xca,0xca,0xca,0x44,0x44,0x44,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf,\
+0xf,0xf,0x32,0x32,0x32,0x4,0x4,0x4,0x0,0x0,\
+0x0,0x2,0x2,0x2,0x25,0x25,0x25,0x66,0x66,0x66,\
+0x8d,0x8d,0x8d,0x8f,0x8f,0x8f,0x7b,0x7b,0x7b,0x53,\
+0x53,0x53,0x42,0x42,0x42,0x1e,0x1e,0x1e,0x5c,0x5c,\
+0x5c,0x4d,0x4d,0x4d,0x0,0x0,0x0,0x2,0x2,0x2,\
+0x2f,0x2f,0x2f,0x5b,0x5b,0x5b,0x5a,0x5a,0x5a,0x0,\
+0x0,0x0,0x4,0x4,0x4,0x3c,0x3c,0x3c,0x68,0x68,\
+0x68,0x29,0x29,0x29,0x7,0x7,0x7,0x6,0x6,0x6,\
+0x0,0x0,0x0,0x4,0x4,0x4,0x52,0x52,0x52,0x76,\
+0x76,0x76,0x94,0x94,0x94,0x72,0x72,0x72,0x2,0x2,\
+0x2,0x0,0x0,0x0,0x16,0x16,0x16,0x5e,0x5e,0x5e,\
+0x89,0x89,0x89,0x8e,0x8e,0x8e,0x4e,0x4e,0x4e,0x11,\
+0x11,0x11,0x66,0x66,0x66,0x5c,0x5c,0x5c,0x69,0x69,\
+0x69,0x59,0x59,0x59,0x2b,0x2b,0x2b,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x9,0x9,0x9,0x2,0x2,0x2,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x32,0x32,\
+0x32,0x52,0x52,0x52,0xd9,0xd9,0xd9,0xcf,0xcf,0xcf,\
+0xc7,0xc7,0xc7,0xe6,0xe6,0xe6,0xed,0xed,0xed,0x7d,\
+0x7d,0x7d,0x9,0x9,0x9,0x0,0x0,0x0,0x7,0x7,\
+0x7,0x0,0x0,0x0,0x3,0x3,0x3,0x10,0x10,0x10,\
+0x2a,0x2a,0x2a,0x0,0x0,0x0,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x4,0x4,0x4,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,0x4,\
+0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xd,\
+0xd,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x6,0x6,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x0,\
+0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x6,0x6,\
+0x6,0x0,0x0,0x0,0x1,0x1,0x1,0x5,0x5,0x5,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x7,0x7,0x7,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0xc,0xc,0xc,0x2a,0x2a,0x2a,0x26,\
+0x26,0x26,0x31,0x31,0x31,0x70,0x70,0x70,0x8a,0x8a,\
+0x8a,0x53,0x53,0x53,0x19,0x19,0x19,0x0,0x0,0x0,\
+0x6,0x6,0x6,0x7,0x7,0x7,0xa,0xa,0xa,0x0,\
+0x0,0x0,0x10,0x10,0x10,0x31,0x31,0x31,0x23,0x23,\
+0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x22,0x22,0x22,0x39,0x39,0x39,\
+0x36,0x36,0x36,0x35,0x35,0x35,0x34,0x34,0x34,0x32,\
+0x32,0x32,0x37,0x37,0x37,0x40,0x40,0x40,0x3e,0x3e,\
+0x3e,0x3a,0x3a,0x3a,0x43,0x43,0x43,0x40,0x40,0x40,\
+0x39,0x39,0x39,0x2f,0x2f,0x2f,0x6,0x6,0x6,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,\
+0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x2,0x2,0x2,0x0,0x0,0x0,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x5,0x5,0x5,0x6,0x6,0x6,0x4,0x4,\
+0x4,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x6,0x6,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x1,0x1,0x1,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,\
+0x3,0x3,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x4,0x4,0x4,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x3,0x3,0x3,0x2,\
+0x2,0x2,0x4,0x4,0x4,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x6,0x6,0x6,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x6,0x6,0x6,0x5,0x5,0x5,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x5,0x5,0x5,0x1,0x1,\
+0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x3,0x3,0x3,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x5,0x5,0x5,0x1,0x1,0x1,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x4,\
+0x4,0x4,0x2,0x2,0x2,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+uint8_t qhyccdlog2[] =
+{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x2,0x2,0x2,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x5,0x5,0x5,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,\
+0x0,0x6,0x6,0x6,0x0,0x0,0x0,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x1,\
+0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,\
+0x0,0xc,0xc,0xc,0x0,0x0,0x0,0x2,0x2,0x2,\
+0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,\
+0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x6,0x6,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x4,0x4,0x4,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x6,0x6,0x1,\
+0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x6,0x6,0x6,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x4,0x4,\
+0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x5,0x5,0x5,0x5,0x5,0x5,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,0x4,0x4,\
+0x4,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0xa,0xa,0xa,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x7,0x7,0x7,0x0,0x0,0x0,\
+0x5,0x5,0x5,0x0,0x0,0x0,0x7,0x7,0x7,0x8,\
+0x8,0x8,0x0,0x0,0x0,0x5,0x5,0x5,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x3,0x3,0x3,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x6,0x6,0x6,0x5,0x5,0x5,0x0,0x0,0x0,0x1,\
+0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x4,0x4,0x4,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x3,0x3,0x3,0x7,0x7,0x7,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0xf,0xf,0xf,\
+0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x3c,\
+0x3c,0x3c,0x2d,0x2d,0x2d,0x27,0x27,0x27,0x27,0x27,\
+0x27,0x28,0x28,0x28,0x35,0x35,0x35,0x3a,0x3a,0x3a,\
+0x3a,0x3a,0x3a,0x2b,0x2b,0x2b,0x41,0x41,0x41,0x23,\
+0x23,0x23,0x0,0x0,0x0,0x5,0x5,0x5,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x8,\
+0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x1,0x1,0x1,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x5,0x5,0x5,\
+0x6,0x6,0x6,0x1,0x1,0x1,0x5,0x5,0x5,0x2,\
+0x2,0x2,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x4,0x4,0x4,0x2,0x2,0x2,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x5,0x5,0x5,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x31,0x31,0x31,0x34,0x34,\
+0x34,0x17,0x17,0x17,0x6,0x6,0x6,0x0,0x0,0x0,\
+0x29,0x29,0x29,0x7f,0x7f,0x7f,0x5c,0x5c,0x5c,0x13,\
+0x13,0x13,0x8,0x8,0x8,0xe,0xe,0xe,0x1,0x1,\
+0x1,0x9,0x9,0x9,0xf,0xf,0xf,0x48,0x48,0x48,\
+0x10,0x10,0x10,0x0,0x0,0x0,0x4,0x4,0x4,0x1,\
+0x1,0x1,0x6,0x6,0x6,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x6,0x6,0x6,0x0,0x0,0x0,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x6,0x6,0x6,0x0,0x0,0x0,0x4,\
+0x4,0x4,0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x5,0x5,0x5,0x4,0x4,0x4,0x0,0x0,0x0,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x2,0x2,0x2,0x4,0x4,0x4,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x6,0x6,0x6,0x8,0x8,0x8,0x2,0x2,\
+0x2,0x1,0x1,0x1,0x5,0x5,0x5,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x0,\
+0x0,0x0,0x4,0x4,0x4,0x3,0x3,0x3,0x3,0x3,\
+0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,\
+0x0,0x0,0x0,0x43,0x43,0x43,0x4,0x4,0x4,0x0,\
+0x0,0x0,0x5,0x5,0x5,0x22,0x22,0x22,0xcb,0xcb,\
+0xcb,0xff,0xff,0xff,0xf4,0xf4,0xf4,0x2d,0x2d,0x2d,\
+0x3,0x3,0x3,0xa,0xa,0xa,0x5d,0x5d,0x5d,0x58,\
+0x58,0x58,0x3,0x3,0x3,0xe,0xe,0xe,0x22,0x22,\
+0x22,0x1,0x1,0x1,0x0,0x0,0x0,0x6,0x6,0x6,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x0,\
+0x0,0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,\
+0x0,0xf,0xf,0xf,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x5,0x5,0x5,0x0,0x0,0x0,0x2,0x2,0x2,0x6,\
+0x6,0x6,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x7,0x7,0x7,0x1,0x1,0x1,\
+0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x9,\
+0x9,0x9,0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x4,0x4,0x4,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x7,0x7,0x7,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x3f,0x3f,0x3f,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x3,0x3,0x3,0x79,0x79,0x79,0xff,0xff,0xff,0xe3,\
+0xe3,0xe3,0xc3,0xc3,0xc3,0x2c,0x2c,0x2c,0x16,0x16,\
+0x16,0xcd,0xcd,0xcd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,\
+0x6e,0x6e,0x6e,0x16,0x16,0x16,0x17,0x17,0x17,0x4,\
+0x4,0x4,0x0,0x0,0x0,0x38,0x38,0x38,0xae,0xae,\
+0xae,0xff,0xff,0xff,0xfa,0xfa,0xfa,0xc9,0xc9,0xc9,\
+0x50,0x50,0x50,0x0,0x0,0x0,0x7,0x7,0x7,0xf7,\
+0xf7,0xf7,0x6a,0x6a,0x6a,0xe,0xe,0xe,0x0,0x0,\
+0x0,0x38,0x38,0x38,0xfa,0xfa,0xfa,0x3b,0x3b,0x3b,\
+0xdd,0xdd,0xdd,0xbe,0xbe,0xbe,0x4,0x4,0x4,0x1,\
+0x1,0x1,0x3e,0x3e,0x3e,0xff,0xff,0xff,0x58,0x58,\
+0x58,0x7,0x7,0x7,0x5e,0x5e,0x5e,0xdc,0xdc,0xdc,\
+0xff,0xff,0xff,0xf2,0xf2,0xf2,0x8f,0x8f,0x8f,0x0,\
+0x0,0x0,0x7,0x7,0x7,0x75,0x75,0x75,0xe7,0xe7,\
+0xe7,0xf7,0xf7,0xf7,0xdc,0xdc,0xdc,0x96,0x96,0x96,\
+0x2d,0x2d,0x2d,0xfc,0xfc,0xfc,0xff,0xff,0xff,0xeb,\
+0xeb,0xeb,0xc3,0xc3,0xc3,0x64,0x64,0x64,0x3,0x3,\
+0x3,0x0,0x0,0x0,0x8,0x8,0x8,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x4,0x4,0x4,0x35,\
+0x35,0x35,0x11,0x11,0x11,0x3,0x3,0x3,0x8,0x8,\
+0x8,0xd8,0xd8,0xd8,0xf8,0xf8,0xf8,0x6d,0x6d,0x6d,\
+0x3,0x3,0x3,0x2,0x2,0x2,0xc4,0xc4,0xc4,0xf9,\
+0xf9,0xf9,0xff,0xff,0xff,0xef,0xef,0xef,0x82,0x82,\
+0x82,0xb,0xb,0xb,0x24,0x24,0x24,0x0,0x0,0x0,\
+0x27,0x27,0x27,0xe6,0xe6,0xe6,0xfc,0xfc,0xfc,0xb2,\
+0xb2,0xb2,0x9f,0x9f,0x9f,0xfe,0xfe,0xfe,0xf0,0xf0,\
+0xf0,0x38,0x38,0x38,0x1,0x1,0x1,0xfb,0xfb,0xfb,\
+0x88,0x88,0x88,0x0,0x0,0x0,0x1,0x1,0x1,0x39,\
+0x39,0x39,0xff,0xff,0xff,0x47,0x47,0x47,0x81,0x81,\
+0x81,0xfd,0xfd,0xfd,0x3e,0x3e,0x3e,0x0,0x0,0x0,\
+0xc0,0xc0,0xc0,0xda,0xda,0xda,0xd,0xd,0xd,0x72,\
+0x72,0x72,0xff,0xff,0xff,0xed,0xed,0xed,0x9e,0x9e,\
+0x9e,0x92,0x92,0x92,0x98,0x98,0x98,0x0,0x0,0x0,\
+0x9c,0x9c,0x9c,0xff,0xff,0xff,0xd4,0xd4,0xd4,0x95,\
+0x95,0x95,0x9e,0x9e,0x9e,0x8c,0x8c,0x8c,0x46,0x46,\
+0x46,0xff,0xff,0xff,0x9f,0x9f,0x9f,0xa1,0xa1,0xa1,\
+0xe8,0xe8,0xe8,0xff,0xff,0xff,0x9e,0x9e,0x9e,0x6,\
+0x6,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x3e,0x3e,\
+0x6,0x6,0x6,0x0,0x0,0x0,0x19,0x19,0x19,0xfd,\
+0xfd,0xfd,0xfa,0xfa,0xfa,0x20,0x20,0x20,0x0,0x0,\
+0x0,0x7e,0x7e,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,\
+0x69,0x69,0x69,0x3f,0x3f,0x3f,0x14,0x14,0x14,0x18,\
+0x18,0x18,0x1e,0x1e,0x1e,0x0,0x0,0x0,0x8c,0x8c,\
+0x8c,0xff,0xff,0xff,0x54,0x54,0x54,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x32,0x32,0x32,0xfd,0xfd,0xfd,0xb0,\
+0xb0,0xb0,0x0,0x0,0x0,0xff,0xff,0xff,0x7a,0x7a,\
+0x7a,0x5,0x5,0x5,0x0,0x0,0x0,0x43,0x43,0x43,\
+0xfe,0xfe,0xfe,0x3e,0x3e,0x3e,0x12,0x12,0x12,0xeb,\
+0xeb,0xeb,0xc3,0xc3,0xc3,0x47,0x47,0x47,0xf8,0xf8,\
+0xf8,0x65,0x65,0x65,0xa,0xa,0xa,0xff,0xff,0xff,\
+0xdd,0xdd,0xdd,0x13,0x13,0x13,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x31,0x31,0x31,0xfe,0xfe,\
+0xfe,0xc1,0xc1,0xc1,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x8,0x8,0x8,0x0,0x0,0x0,0x40,0x40,0x40,0xff,\
+0xff,0xff,0x41,0x41,0x41,0x0,0x0,0x0,0x5,0x5,\
+0x5,0xb4,0xb4,0xb4,0xff,0xff,0xff,0x3d,0x3d,0x3d,\
+0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x3,0x3,0x3,0x39,0x39,0x39,0x7,0x7,\
+0x7,0x0,0x0,0x0,0x36,0x36,0x36,0xff,0xff,0xff,\
+0xbc,0xbc,0xbc,0x1,0x1,0x1,0x33,0x33,0x33,0xf6,\
+0xf6,0xf6,0xff,0xff,0xff,0x7b,0x7b,0x7b,0x6,0x6,\
+0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x1f,0x1f,\
+0x20,0x20,0x20,0x0,0x0,0x0,0xc5,0xc5,0xc5,0xfa,\
+0xfa,0xfa,0x1,0x1,0x1,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x5,0x5,0x5,0xdd,0xdd,0xdd,0xdf,0xdf,0xdf,\
+0x0,0x0,0x0,0xff,0xff,0xff,0xc2,0xc2,0xc2,0x7c,\
+0x7c,0x7c,0x7f,0x7f,0x7f,0x9d,0x9d,0x9d,0xff,0xff,\
+0xff,0x39,0x39,0x39,0x4,0x4,0x4,0x74,0x74,0x74,\
+0xff,0xff,0xff,0xdf,0xdf,0xdf,0xe2,0xe2,0xe2,0x2,\
+0x2,0x2,0x3d,0x3d,0x3d,0xff,0xff,0xff,0x90,0x90,\
+0x90,0x1,0x1,0x1,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x73,0x73,0x73,0xfd,0xfd,0xfd,0x5e,\
+0x5e,0x5e,0x3,0x3,0x3,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x0,0x0,0x0,0x40,0x40,0x40,0xfc,0xfc,0xfc,\
+0x44,0x44,0x44,0x0,0x0,0x0,0x5,0x5,0x5,0x4e,\
+0x4e,0x4e,0xfe,0xfe,0xfe,0x7f,0x7f,0x7f,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x2,0x2,0x2,0x42,0x42,0x42,0x3,0x3,0x3,0x3,\
+0x3,0x3,0x40,0x40,0x40,0xff,0xff,0xff,0x80,0x80,\
+0x80,0x3,0x3,0x3,0xcc,0xcc,0xcc,0xff,0xff,0xff,\
+0x95,0x95,0x95,0x0,0x0,0x0,0x5f,0x5f,0x5f,0x88,\
+0x88,0x88,0x2b,0x2b,0x2b,0x1c,0x1c,0x1c,0x1d,0x1d,\
+0x1d,0x0,0x0,0x0,0xbe,0xbe,0xbe,0xea,0xea,0xea,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0xd3,0xd3,0xd3,0xe7,0xe7,0xe7,0xa,0xa,\
+0xa,0xf6,0xf6,0xf6,0xdb,0xdb,0xdb,0xc4,0xc4,0xc4,\
+0xbc,0xbc,0xbc,0xd7,0xd7,0xd7,0xf8,0xf8,0xf8,0x44,\
+0x44,0x44,0x4,0x4,0x4,0x1a,0x1a,0x1a,0xe4,0xe4,\
+0xe4,0xfe,0xfe,0xfe,0x64,0x64,0x64,0x1,0x1,0x1,\
+0x3c,0x3c,0x3c,0xff,0xff,0xff,0x63,0x63,0x63,0x0,\
+0x0,0x0,0x6,0x6,0x6,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x41,0x41,0x41,\
+0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x43,0x43,0x43,0xff,0xff,0xff,0x41,0x41,\
+0x41,0x8,0x8,0x8,0x0,0x0,0x0,0x33,0x33,0x33,\
+0xfc,0xfc,0xfc,0x79,0x79,0x79,0x6,0x6,0x6,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,\
+0x3,0x3a,0x3a,0x3a,0xf,0xf,0xf,0x0,0x0,0x0,\
+0x68,0x68,0x68,0xf4,0xf4,0xf4,0x29,0x29,0x29,0x80,\
+0x80,0x80,0xff,0xff,0xff,0xad,0xad,0xad,0xa,0xa,\
+0xa,0xbb,0xbb,0xbb,0xf6,0xf6,0xf6,0xff,0xff,0xff,\
+0xc6,0xc6,0xc6,0x16,0x16,0x16,0x16,0x16,0x16,0x3,\
+0x3,0x3,0xae,0xae,0xae,0xf5,0xf5,0xf5,0x32,0x32,\
+0x32,0x0,0x0,0x0,0x5,0x5,0x5,0x1f,0x1f,0x1f,\
+0xff,0xff,0xff,0xc1,0xc1,0xc1,0x2,0x2,0x2,0xff,\
+0xff,0xff,0x78,0x78,0x78,0x1,0x1,0x1,0x4,0x4,\
+0x4,0x42,0x42,0x42,0xff,0xff,0xff,0x3a,0x3a,0x3a,\
+0x2,0x2,0x2,0x0,0x0,0x0,0x94,0x94,0x94,0xfe,\
+0xfe,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x35,0x35,\
+0x35,0xfd,0xfd,0xfd,0xad,0xad,0xad,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x55,\
+0x55,0x55,0xff,0xff,0xff,0x8f,0x8f,0x8f,0x0,0x0,\
+0x0,0x9,0x9,0x9,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x4a,0x4a,0x4a,0xfe,0xfe,0xfe,0x3d,0x3d,0x3d,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x90,0x90,0x90,0xff,0xff,\
+0xff,0x62,0x62,0x62,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x3e,\
+0x3e,0x3e,0x4,0x4,0x4,0x0,0x0,0x0,0x92,0x92,\
+0x92,0xc6,0xc6,0xc6,0x48,0x48,0x48,0xfc,0xfc,0xfc,\
+0xb8,0xb8,0xb8,0x2b,0x2b,0x2b,0xc8,0xc8,0xc8,0xff,\
+0xff,0xff,0xfd,0xfd,0xfd,0xd6,0xd6,0xd6,0x9e,0x9e,\
+0x9e,0x16,0x16,0x16,0x26,0x26,0x26,0x0,0x0,0x0,\
+0x45,0x45,0x45,0xfb,0xfb,0xfb,0xe5,0xe5,0xe5,0x63,\
+0x63,0x63,0x4b,0x4b,0x4b,0xc2,0xc2,0xc2,0xf8,0xf8,\
+0xf8,0x57,0x57,0x57,0x0,0x0,0x0,0xff,0xff,0xff,\
+0x77,0x77,0x77,0x3,0x3,0x3,0x0,0x0,0x0,0x3c,\
+0x3c,0x3c,0xff,0xff,0xff,0x3f,0x3f,0x3f,0x7,0x7,\
+0x7,0x1,0x1,0x1,0x81,0x81,0x81,0xfa,0xfa,0xfa,\
+0x8,0x8,0x8,0x1,0x1,0x1,0x5,0x5,0x5,0xd6,\
+0xd6,0xd6,0xff,0xff,0xff,0x9b,0x9b,0x9b,0x31,0x31,\
+0x31,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x10,0x10,0x10,\
+0xe9,0xe9,0xe9,0xf3,0xf3,0xf3,0x81,0x81,0x81,0x2a,\
+0x2a,0x2a,0x64,0x64,0x64,0x5d,0x5d,0x5d,0x3e,0x3e,\
+0x3e,0xfe,0xfe,0xfe,0x6b,0x6b,0x6b,0x65,0x65,0x65,\
+0xae,0xae,0xae,0xff,0xff,0xff,0xd1,0xd1,0xd1,0x0,\
+0x0,0x0,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x3,0x3,0x3,0x1,0x1,0x1,0x44,0x44,0x44,\
+0xa,0xa,0xa,0x14,0x14,0x14,0xd5,0xd5,0xd5,0x7f,\
+0x7f,0x7f,0xdd,0xdd,0xdd,0xca,0xca,0xca,0x4e,0x4e,\
+0x4e,0xd7,0xd7,0xd7,0xfd,0xfd,0xfd,0xdf,0xdf,0xdf,\
+0x55,0x55,0x55,0x19,0x19,0x19,0x18,0x18,0x18,0x17,\
+0x17,0x17,0x17,0x17,0x17,0x7,0x7,0x7,0x0,0x0,\
+0x0,0x70,0x70,0x70,0xfb,0xfb,0xfb,0xfd,0xfd,0xfd,\
+0xff,0xff,0xff,0xed,0xed,0xed,0x5c,0x5c,0x5c,0x0,\
+0x0,0x0,0x9,0x9,0x9,0xfb,0xfb,0xfb,0x7c,0x7c,\
+0x7c,0x5,0x5,0x5,0x0,0x0,0x0,0x43,0x43,0x43,\
+0xf6,0xf6,0xf6,0x3e,0x3e,0x3e,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x7c,0x7c,0x7c,0xfe,0xfe,0xfe,0x0,0x0,\
+0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x3a,0x3a,0x3a,\
+0xd3,0xd3,0xd3,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xec,\
+0xec,0xec,0xc8,0xc8,0xc8,0x0,0x0,0x0,0x3c,0x3c,\
+0x3c,0xe3,0xe3,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,\
+0xff,0xff,0xff,0xbc,0xbc,0xbc,0x41,0x41,0x41,0xff,\
+0xff,0xff,0xff,0xff,0xff,0xfd,0xfd,0xfd,0xff,0xff,\
+0xff,0xc3,0xc3,0xc3,0xe,0xe,0xe,0x0,0x0,0x0,\
+0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,\
+0x2,0x2,0x0,0x0,0x0,0x31,0x31,0x31,0x4c,0x4c,\
+0x4c,0xa7,0xa7,0xa7,0xb2,0xb2,0xb2,0xc4,0xc4,0xc4,\
+0xc4,0xc4,0xc4,0x83,0x83,0x83,0xfe,0xfe,0xfe,0xff,\
+0xff,0xff,0xa8,0xa8,0xa8,0x1a,0x1a,0x1a,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x24,0x24,\
+0x1d,0x1d,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x9,\
+0x9,0x9,0x1d,0x1d,0x1d,0x54,0x54,0x54,0xf2,0xf2,\
+0xf2,0xec,0xec,0xec,0x54,0x54,0x54,0x49,0x49,0x49,\
+0x0,0x0,0x0,0x41,0x41,0x41,0x27,0x27,0x27,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x10,0x10,0x10,0x3f,0x3f,\
+0x3f,0x1b,0x1b,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x26,0x26,0x26,0x2d,0x2d,0x2d,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0x4,\
+0x4,0x45,0x45,0x45,0x3a,0x3a,0x3a,0x29,0x29,0x29,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x43,0x43,0x43,0x3c,0x3c,0x3c,0x1d,0x1d,\
+0x1d,0x5,0x5,0x5,0x0,0x0,0x0,0x3e,0x3e,0x3e,\
+0x40,0x40,0x40,0x38,0x38,0x38,0x13,0x13,0x13,0x0,\
+0x0,0x0,0x5,0x5,0x5,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x6,0x6,0x6,0x38,0x38,0x38,0x48,0x48,0x48,0xd8,\
+0xd8,0xd8,0xd4,0xd4,0xd4,0xc5,0xc5,0xc5,0xc8,0xc8,\
+0xc8,0xff,0xff,0xff,0xbf,0xbf,0xbf,0x55,0x55,0x55,\
+0x0,0x0,0x0,0xa,0xa,0xa,0x0,0x0,0x0,0x3,\
+0x3,0x3,0x1,0x1,0x1,0x19,0x19,0x19,0x21,0x21,\
+0x21,0x1,0x1,0x1,0x3,0x3,0x3,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x22,0x22,0x22,0xce,\
+0xce,0xce,0xf9,0xf9,0xf9,0xf6,0xf6,0xf6,0xc,0xc,\
+0xc,0x0,0x0,0x0,0xb,0xb,0xb,0x0,0x0,0x0,\
+0x2,0x2,0x2,0x1,0x1,0x1,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x5,0x5,0x5,0x2,0x2,0x2,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x6,0x6,0x6,0x2,0x2,0x2,\
+0x1,0x1,0x1,0x0,0x0,0x0,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x5,0x5,\
+0x5,0x0,0x0,0x0,0x3,0x3,0x3,0x9,0x9,0x9,\
+0x0,0x0,0x0,0x8,0x8,0x8,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x8,0x8,0x8,0x0,0x0,0x0,0x4,0x4,0x4,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x5,0x5,0x5,0x0,0x0,\
+0x0,0x38,0x38,0x38,0x24,0x24,0x24,0x34,0x34,0x34,\
+0x87,0x87,0x87,0x9b,0x9b,0x9b,0x8f,0x8f,0x8f,0x41,\
+0x41,0x41,0x4,0x4,0x4,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x2,0x2,0x2,0x37,0x37,0x37,0x14,0x14,0x14,0x0,\
+0x0,0x0,0xb,0xb,0xb,0x0,0x0,0x0,0x9,0x9,\
+0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,\
+0x2e,0x2e,0x2e,0x44,0x44,0x44,0x0,0x0,0x0,0x9,\
+0x9,0x9,0x0,0x0,0x0,0x4,0x4,0x4,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,\
+0x0,0x4,0x4,0x4,0x0,0x0,0x0,0x1,0x1,0x1,\
+0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x3,0x3,0x3,0x2,0x2,0x2,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x5,0x5,0x5,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x7,0x7,0x7,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x3,0x3,0x3,0x1,0x1,0x1,0x18,\
+0x18,0x18,0x38,0x38,0x38,0x3e,0x3e,0x3e,0x34,0x34,\
+0x34,0x30,0x30,0x30,0x33,0x33,0x33,0x3b,0x3b,0x3b,\
+0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3f,\
+0x3f,0x3f,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,\
+0x41,0x26,0x26,0x26,0xb,0xb,0xb,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x4,0x4,0x4,0x1,0x1,0x1,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,\
+0x2,0x2,0x2,0x3,0x3,0x3,0x3,0x3,0x3,0xa,\
+0xa,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x1,0x1,0x1,\
+0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,\
+0x4,0x4,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x4,0x4,0x4,\
+0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,\
+0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x1,\
+0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,\
+0x1,0x2,0x2,0x2,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,\
+0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,\
+0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,\
+0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x5,0x5,0x5,0x1,0x1,0x1,\
+0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x4,0x4,0x4,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,\
+0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,\
+0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x2,\
+0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,\
+0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
+0x0};
+
+#endif \ No newline at end of file
diff --git a/include/qhy/qhyccdstruct.h b/include/qhy/qhyccdstruct.h
new file mode 100644
index 0000000..c226926
--- /dev/null
+++ b/include/qhy/qhyccdstruct.h
@@ -0,0 +1,222 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhyccdstruct.h
+ * @brief QHYCCD SDK struct define
+ */
+
+#ifndef WIN32
+ #define LINUX
+#else
+ #define QHYCCD_OPENCV_SUPPORT
+#endif
+
+#ifdef WIN32
+ #include <windows.h>
+#else // Linux & Mac
+ #include <pthread.h>
+#endif
+
+#ifndef __QHYCCDSTRUCTDEF_H__
+#define __QHYCCDSTRUCTDEF_H__
+
+#ifdef 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"
+
+/**
+ * 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
+
+/**
+ * @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;
+};
+
+/**
+ * @brief CONTROL_ID enum define
+ *
+ * List of the function could be control
+ */
+enum CONTROL_ID
+{
+ CONTROL_BRIGHTNESS = 0, //!< image brightness
+ CONTROL_CONTRAST, //1 image contrast
+ CONTROL_WBR, //2 red of white balance
+ CONTROL_WBB, //3 blue of white balance
+ CONTROL_WBG, //4 the green of white balance
+ CONTROL_GAMMA, //5 screen gamma
+ CONTROL_GAIN, //6 camera gain
+ CONTROL_OFFSET, //7 camera offset
+ CONTROL_EXPOSURE, //8 expose time (us)
+ CONTROL_SPEED, //9 transfer speed
+ CONTROL_TRANSFERBIT, //10 image depth bits
+ CONTROL_CHANNELS, //11 image channels
+ CONTROL_USBTRAFFIC, //12 hblank
+ CONTROL_ROWNOISERE, //13 row denoise
+ CONTROL_CURTEMP, //14 current cmos or ccd temprature
+ CONTROL_CURPWM, //15 current cool pwm
+ CONTROL_MANULPWM, //16 set the cool pwm
+ CONTROL_CFWPORT, //17 control camera color filter wheel port
+ CONTROL_COOLER, //18 check if camera has cooler
+ CONTROL_ST4PORT, //19 check if camera has st4port
+ CAM_COLOR, //20
+ CAM_BIN1X1MODE, //21 check if camera has bin1x1 mode
+ CAM_BIN2X2MODE, //22 check if camera has bin2x2 mode
+ CAM_BIN3X3MODE, //23 check if camera has bin3x3 mode
+ CAM_BIN4X4MODE, //24 check if camera has bin4x4 mode
+ CAM_MECHANICALSHUTTER, //25 mechanical shutter
+ CAM_TRIGER_INTERFACE, //26 triger
+ CAM_TECOVERPROTECT_INTERFACE, //27 tec overprotect
+ CAM_SINGNALCLAMP_INTERFACE, //28 singnal clamp
+ CAM_FINETONE_INTERFACE, //29 fine tone
+ CAM_SHUTTERMOTORHEATING_INTERFACE, //30 shutter motor heating
+ CAM_CALIBRATEFPN_INTERFACE, //31 calibrated frame
+ CAM_CHIPTEMPERATURESENSOR_INTERFACE, //32 chip temperaure sensor
+ CAM_USBREADOUTSLOWEST_INTERFACE, //33 usb readout slowest
+
+ CAM_8BITS, //34 8bit depth
+ CAM_16BITS, //35 16bit depth
+ CAM_GPS, //36 check if camera has gps
+
+ CAM_IGNOREOVERSCAN_INTERFACE, //37 ignore overscan area
+
+ QHYCCD_3A_AUTOBALANCE, //38
+ QHYCCD_3A_AUTOEXPOSURE, //39
+ QHYCCD_3A_AUTOFOCUS, //40
+ CONTROL_AMPV, //41 ccd or cmos ampv
+ CONTROL_VCAM, //42 Virtual Camera on off
+ CAM_VIEW_MODE, //43
+
+ CONTROL_CFWSLOTSNUM, //44 check CFW slots number
+ IS_EXPOSING_DONE, //45
+ ScreenStretchB, //46
+ ScreenStretchW, //47
+ CONTROL_DDR, //47
+ CAM_LIGHT_PERFORMANCE_MODE, //49
+
+ CAM_QHY5II_GUIDE_MODE, //50
+ DDR_BUFFER_CAPACITY, //51
+ DDR_BUFFER_READ_THRESHOLD, //52
+
+ DefaultOffset, //53
+ OutputDataActualBits, //54
+ OutputDataAlignment //55
+};
+
+/**
+ * debayer mode for mono to color */
+enum BAYER_ID
+{
+ BAYER_GB = 1,
+ BAYER_GR,
+ BAYER_BG,
+ BAYER_RG
+};
+
+enum CodecID
+{
+ NONE_CODEC,
+ H261_CODEC
+};
+
+#endif
diff --git a/include/qhy/qhydevice.h b/include/qhy/qhydevice.h
new file mode 100644
index 0000000..2e25049
--- /dev/null
+++ b/include/qhy/qhydevice.h
@@ -0,0 +1,92 @@
+#ifndef _QHYDEVICE_H_
+#define _QHYDEVICE_H_
+
+// written by Jan Soldan, 2018
+
+#ifdef __APPLE__
+ #include <libusb.h>
+ #include <mutex> // std::mutex
+#elif __linux__
+ #include <libusb-1.0/libusb.h>
+ #include <libusb.h>
+ #include <mutex> // std::mutex
+#endif
+
+#include "qhyccd.h"
+#include "qhybase.h"
+
+#define MAX_ID_PAIRS (100)
+#define MAX_DEVICE_TYPES (100)
+// we can open up to MAX_OPEN_DEVICES QHYCCD cameras
+#define MAX_OPEN_DEVICES (8)
+#define ID_STR_LEN (0x20)
+
+#define TRANSFER_COUNT (32)
+#define TRANSFER_SIZE (76800)
+
+#define DATA_CACHE_WIDTH (7400)
+#define DATA_CACHE_HEIGHT (5000)
+#define DATA_CACHE_CHANNELS (4)
+
+class UnlockImageQueue;
+/*
+ ****************************************************************************************
+ * class QhyDevice
+ ****************************************************************************************
+ */
+class QhyDevice {
+ public:
+ libusb_device *dev;
+#ifdef WIN32
+ void *handle;
+#else
+ libusb_device_handle *handle;
+#endif
+ uint16_t vid;
+ uint16_t pid;
+ uint8_t is_open;
+ char id[64];
+ QHYBASE *qcam;
+
+ // added stuff for libusb async functions
+ struct libusb_transfer *libusb_transfer_array[TRANSFER_COUNT];
+
+ UnlockImageQueue *p_image_queue;
+ uint32_t image_queue_len;
+
+ int event_count;
+ bool thread_exit_flag;
+ bool first_exposure_flag;
+
+ std::mutex event_count_mutex;
+ std::mutex thread_exit_flag_mutex;
+ std::mutex first_exposure_flag_mutex;
+
+ pthread_t thread_id;
+
+ uint8_t sig[16];
+ uint8_t sigcrc[16];
+
+ uint8_t *p_raw_data_cache;
+ uint8_t *p_img_buffer;
+
+ uint32_t header_len;
+ uint32_t frame_len;
+ uint32_t ending_len;
+
+ uint32_t sig_len;
+ uint32_t header_type;
+ uint32_t raw_frame_width;
+ uint32_t raw_frame_height;
+ uint32_t raw_frame_bpp;
+ int32_t received_raw_data_len;
+
+ public:
+ QhyDevice();
+ QhyDevice(int idx);
+ virtual ~QhyDevice();
+ void dump(int idx);
+ void clear();
+};
+
+#endif
diff --git a/include/qhy/qhyicbase.h b/include/qhy/qhyicbase.h
new file mode 100644
index 0000000..11f4fd0
--- /dev/null
+++ b/include/qhy/qhyicbase.h
@@ -0,0 +1,461 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file qhyicbase.h
+ * @brief QHYICBASE class define
+ */
+
+#ifndef QHYICBASE_CLASS
+#define QHYICBASE_CLASS
+
+#include "qhybase.h"
+
+/**
+ * @brief QHYICBASE class define
+ *
+ * include all functions for QHYICBASE
+ */
+class QHYICBASE:public QHYBASE
+{
+public:
+ QHYICBASE();
+ ~QHYICBASE();
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t SetChipOffset(qhyccd_handle *h,double offset)
+ @brief set the camera offset
+ @param h camera control handle
+ @param offset offset value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipOffset(qhyccd_handle *h,double offset);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /**
+ @fn void ConvertDataBIN11(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN11(uint8_t * Data, uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN22(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN22(uint8_t * Data, uint32_t x, uint32_t y, uint16_t PixShift);
+
+ /**
+ @fn void ConvertDataBIN44(uint8_t * Data,uint32_t x, uint32_t y, uint16_t PixShift)
+ @brief move the pixel raw data to correction position,and bin if need
+ @param Data raw image data
+ @param x image width
+ @param y image height
+ @param PixShift this is a way to fix the bad pixel data by the usb transfer
+ */
+ void ConvertDataBIN44(uint8_t * Data, uint32_t x, uint32_t y, uint16_t PixShift);
+#if 0
+ /**
+ @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+#endif
+
+ /** @fn virtual uint32_t SetInterCamSerialParam(qhyccd_handle *h,uint32_t opt)
+ @brief Set InterCam serial2 params
+ @param h camera control handle
+ @param opt the param
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetInterCamSerialParam(qhyccd_handle *h,uint32_t opt);
+
+ /** @fn virtual uint32_t InterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length)
+ @brief Send data to InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @param length the length to send
+ @return
+ on success,return QHYCCD_SUCCESS \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamSerialTX(qhyccd_handle *h,char *buf,uint32_t length);
+
+ /** @fn virtual uint32_t InterCamSerialRX(qhyccd_handle *h,char *buf)
+ @brief Get data from InterCam serial2
+ @param h camera control handle
+ @param buf buffer for data
+ @return
+ on success,return the data number \n
+
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamSerialRX(qhyccd_handle *h,char *buf);
+
+ /** @fn virtual uint32_t Send2OledFast(qhyccd_handle *h,char *buffer)
+ @brief send data to show on InterCam's OLED
+ @param h camera control handle
+ @param buffer buffer for data
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2OledFast(qhyccd_handle *h,uint8_t *buffer);
+
+ /** @fn uint32_t InterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff)
+ @brief turn off or turn on the InterCam's Oled
+ @param handle camera control handle
+ @param onoff on or off the oled \n
+ 1:on \n
+ 0:off \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InterCamOledOnOff(qhyccd_handle *handle,uint8_t onoff);
+
+ /** @fn uint32_t SetInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness)
+ @brief send data to show on InterCam's OLED
+ @param handle camera control handle
+ @param brightness the oled's brightness
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetInterCamOledBrightness(qhyccd_handle *handle,uint8_t brightness);
+
+ /** @fn uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom)
+ @brief spilit the message to two line,send to camera
+ @param handle camera control handle
+ @param messageTop message for the oled's 1st line
+ @param messageBottom message for the oled's 2nd line
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendTwoLine2InterCamOled(qhyccd_handle *handle,char *messageTop,char *messageBottom);
+
+ /**
+ @fn uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle,char *messageTop)
+ @brief spilit the message to two line,send to camera
+ @param handle camera control handle
+ @param messageTop message for all the oled
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOneLine2InterCamOled(qhyccd_handle *handle,char *messageTop);
+
+ /**
+ @fn uint32_t GetCameraStatus(qhyccd_handle *h,uint8_t *buf)
+ @brief Get camera status
+ @param h camera control handle
+ @param buf camera's status save space
+ @return
+ on success,return the camera statu \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCameraStatus(qhyccd_handle *h,uint8_t *buf);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief control color filter wheel
+ @param handle camera control handle
+ @param order order send to color filter wheel
+ @param length the order string length
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t GetCFWStatus(qhyccd_handle *handle,char *status)
+ @brief get the color filter wheel status
+ @param handle camera control handle
+ @param status the color filter wheel position status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetCFWStatus(qhyccd_handle *handle,char *status);
+
+ /**
+ @fn uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status)
+ @brief control camera's shutter
+ @param handle camera control handle
+ @param status the shutter status
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ControlShutter(qhyccd_handle *handle,uint8_t status);
+
+ /**
+ @fn uint32_t GetShutterStatus(qhyccd_handle *handle)
+ @brief get the camera's shutter status
+ @param handle camera control handle
+ @return
+ on success,return status \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetShutterStatus(qhyccd_handle *handle);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+
+
+ uint32_t widthmax;
+ uint32_t heightmax;
+
+ uint32_t curOverScanX;
+ uint32_t curOverScanY;
+ uint32_t curOverScanSizeX;
+ uint32_t curOverScanSizeY;
+
+ uint32_t isReadoutTemp;
+
+};
+#endif
+
diff --git a/include/qhy/qwinusb.h b/include/qhy/qwinusb.h
new file mode 100644
index 0000000..5c76df2
--- /dev/null
+++ b/include/qhy/qwinusb.h
@@ -0,0 +1,18 @@
+#ifndef QHYCCD_WINUSB_H
+#define QHYCCD_WINUSB_H
+
+#define WINUSB_ALREADY_SUPPORT_NUM 10
+
+extern char *winusbcamname[WINUSB_ALREADY_SUPPORT_NUM];
+
+#ifdef WIN32
+
+GUID * STDCALL name2GUID(PCHAR name);
+uint32_t STDCALL QWinusbOpenDriver(HANDLE * phInDeviceHandle,GUID *cameraguid);
+uint32_t STDCALL QWinusbGetCamType(char *camnamestr);
+uint32_t STDCALL QWinusbCloseDriver(HANDLE handle);
+
+#endif
+
+
+#endif \ No newline at end of file
diff --git a/include/qhy/solar1600.h b/include/qhy/solar1600.h
new file mode 100644
index 0000000..b49b4b8
--- /dev/null
+++ b/include/qhy/solar1600.h
@@ -0,0 +1,348 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file solar1600.h
+ * @brief SOLAR1600 class define
+ */
+
+#include "qhybase.h"
+
+#ifdef WIN32
+#include "d5100.h"
+#endif
+
+#ifndef __SOLAR1600DEF_H__
+#define __SOLAR1600DEF_H__
+
+/**
+ * @brief SOLAR1600 class define
+ *
+ * include all functions for SOLAR1600
+ */
+class SOLAR1600:public QHYBASE
+{
+public:
+ SOLAR1600();
+ ~SOLAR1600();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+
+ */
+ uint32_t SetChipDepth(qhyccd_handle *h,uint32_t depth);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t GetChipMemoryLength()
+ @brief get the min cost memory for the image
+ @return
+ success return the total memory space(unit:byte) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn double GetChipExposeTime()
+ @brief get the current exposetime
+ @return
+ success return the current expose time (unit:us) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipExposeTime();
+
+ /**
+ @fn double GetChipGain()
+ @brief get the current gain
+ @return
+ success return the current expose gain\n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipGain();
+
+ /**
+ @fn double GetChipSpeed()
+ @brief get the current transfer speed
+ @return
+ success return the current speed level \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipSpeed();
+
+
+ /**
+ @fn double GetChipBitsMode()
+ @brief get the current camera depth bits
+ @return
+ success return the current camera depth bits \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipBitsMode();
+
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopSingleExposure(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+};
+#endif
+
diff --git a/include/qhy/solar800g.h b/include/qhy/solar800g.h
new file mode 100644
index 0000000..4861473
--- /dev/null
+++ b/include/qhy/solar800g.h
@@ -0,0 +1,403 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*!
+ * @file solar800g.h
+ * @brief SOLAR800G class define
+ */
+
+#include "qhybase.h"
+
+#ifdef WIN32
+//#include "QGigE.h"
+#endif
+
+#ifndef __SOLAR800GDEF_H__
+#define __SOLAR800GDEF_H__
+
+/**
+ * @brief SOLAR800G class define
+ *
+ * include all functions for SOLAR800G
+ */
+class SOLAR800G:public QHYBASE
+{
+public:
+ SOLAR800G();
+ ~SOLAR800G();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+
+ */
+ uint32_t SetChipDepth(qhyccd_handle *h,uint32_t depth);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera offset
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos)
+ @brief send the command to camera's color filter wheel port
+ @param h camera control handle
+ @param pos the color filter position
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2CFWPort(qhyccd_handle *h,uint32_t pos);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t GetChipMemoryLength()
+ @brief get the min cost memory for the image
+ @return
+ success return the total memory space(unit:byte) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn double GetChipExposeTime()
+ @brief get the current exposetime
+ @return
+ success return the current expose time (unit:us) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipExposeTime();
+
+ /**
+ @fn double GetChipGain()
+ @brief get the current gain
+ @return
+ success return the current expose gain\n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipGain();
+
+ /**
+ @fn double GetChipSpeed()
+ @brief get the current transfer speed
+ @return
+ success return the current speed level \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipSpeed();
+
+
+ /**
+ @fn double GetChipBitsMode()
+ @brief get the current camera depth bits
+ @return
+ success return the current camera depth bits \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipBitsMode();
+
+ /**
+ @fn double GetChipCoolTemp(qhyccd_handle *h)
+ @brief get the current ccd/cmos temprature
+ @param h camera control handle
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolTemp(qhyccd_handle *h);
+
+ /**
+ @fn double GetChipCoolPWM()
+ @brief get the current ccd/cmos temprature
+ @return
+ success return the current cool temprature \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipCoolPWM();
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn double InitBIN11Mode()
+ @brief init the bin11 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN11Mode();
+
+ /**
+ @fn double InitBIN22Mode()
+ @brief init the bin22 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN22Mode();
+
+ /**
+ @fn double InitBIN44Mode()
+ @brief init the bin44 mode setting
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitBIN44Mode();
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length)
+ @brief send the command to camera's color filter wheel port
+ @param handle camera control handle
+ @param order the color filter position
+ @param length the order string length
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SendOrder2CFW(qhyccd_handle *handle,char *order,uint32_t length);
+
+ /**
+ @fn uint32_t AutoTempControl(qhyccd_handle *h,double ttemp)
+ @brief auto temprature control
+ @param h camera control handle
+ @param ttemp target temprature(degree Celsius)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t AutoTempControl(qhyccd_handle *h,double ttemp);
+
+ /**
+ @fn uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM)
+ @brief set cool power
+ @param h camera control handle
+ @param PWM power(0-255)
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipCoolPWM(qhyccd_handle *h,double PWM);
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode)
+ @brief Set the camera's mode to chose the way reading data from camera
+ @param handle camera control handle
+ @param mode the stream mode \n
+ 0x00:default mode,single frame mode \n
+ 0x01:live mode \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+
+ uint32_t SetTrigerFunction(qhyccd_handle *handle,bool value);
+
+};
+#endif
+
diff --git a/include/qhy/ssd1306.h b/include/qhy/ssd1306.h
new file mode 100644
index 0000000..3535f21
--- /dev/null
+++ b/include/qhy/ssd1306.h
@@ -0,0 +1,62 @@
+/*___________________________________________________
+ | _____ _____ _ _ _ |
+ | | __ \ | __ (_) | | | |
+ | | |__) |__ _ __ __ _ _ _| |__) || | ___ | |_ |
+ | | ___/ _ \ '_ \ / _` | | | | ___/ | |/ _ \| __| |
+ | | | | __/ | | | (_| | |_| | | | | | (_) | |_ |
+ | |_| \___|_| |_|\__, |\__,_|_| |_|_|\___/ \__| |
+ | __/ | |
+ | GNU/Linux based |___/ Multi-Rotor UAV Autopilot |
+ |___________________________________________________|
+
+ Adafruit 128x64 SSD1307 Linux I2C Driver Interface
+
+ Copyright (C) 2013 Tobias Simon, Ilmenau University of Technology
+ Based on code written by Limor Fried/Ladyada.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details. */
+
+
+#ifndef __SSD1306_H__
+#define __SSD1306_H__
+
+#include "i2c.h"
+#include <stdint.h>
+
+
+typedef struct
+{
+ i2c_dev_t *i2c_dev;
+ uint8_t *buf;
+ int16_t width;
+ int16_t height;
+}
+ssd1306_t;
+
+
+/* initializes display */
+void ssd1306_init(ssd1306_t *ssd, i2c_dev_t *i2c_dev);
+
+/* inverts display */
+void ssd1306_invert(ssd1306_t *ssd, uint8_t inv);
+
+/* writes buffer contents to display */
+void ssd1306_update(ssd1306_t *ssd);
+
+/* clears buffer */
+void ssd1306_clear(ssd1306_t *ssd);
+
+/* sets pixel in buffer */
+void ssd1306_set_pixel(ssd1306_t *ssd, int16_t x, int16_t y, uint16_t color);
+
+
+#endif /* __SSD1306_H__ */
+
diff --git a/include/qhy/stdint.h b/include/qhy/stdint.h
new file mode 100644
index 0000000..8c6e626
--- /dev/null
+++ b/include/qhy/stdint.h
@@ -0,0 +1,527 @@
+#include "qhyccdstruct.h"
+
+#ifdef LINUX
+
+/* Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C99: 7.18 Integer types <stdint.h>
+ */
+
+#ifndef _STDINT_H
+#define _STDINT_H 1
+
+#ifdef __APPLE__
+
+#include "stdint.h.mac"
+
+#else
+
+#include <features.h>
+#include <bits/wchar.h>
+#include <bits/wordsize.h>
+
+/* Exact integral types. */
+
+/* Signed. */
+
+/* There is some amount of overlap with <sys/types.h> as known by inet code */
+#ifndef __int8_t_defined
+# define __int8_t_defined
+typedef signed char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+# if __WORDSIZE == 64
+typedef long int int64_t;
+# else
+__extension__
+typedef long long int int64_t;
+# endif
+#endif
+
+/* Unsigned. */
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+#ifndef __uint32_t_defined
+typedef unsigned int uint32_t;
+# define __uint32_t_defined
+#endif
+#if __WORDSIZE == 64
+typedef unsigned long int uint64_t;
+#else
+__extension__
+typedef unsigned long long int uint64_t;
+#endif
+
+
+/* Small types. */
+
+/* Signed. */
+typedef signed char int_least8_t;
+typedef short int int_least16_t;
+typedef int int_least32_t;
+#if __WORDSIZE == 64
+typedef long int int_least64_t;
+#else
+__extension__
+typedef long long int int_least64_t;
+#endif
+
+/* Unsigned. */
+typedef unsigned char uint_least8_t;
+typedef unsigned short int uint_least16_t;
+typedef unsigned int uint_least32_t;
+#if __WORDSIZE == 64
+typedef unsigned long int uint_least64_t;
+#else
+__extension__
+typedef unsigned long long int uint_least64_t;
+#endif
+
+
+/* Fast types. */
+
+/* Signed. */
+typedef signed char int_fast8_t;
+#if __WORDSIZE == 64
+typedef long int int_fast16_t;
+typedef long int int_fast32_t;
+typedef long int int_fast64_t;
+#else
+typedef int int_fast16_t;
+typedef int int_fast32_t;
+__extension__
+typedef long long int int_fast64_t;
+#endif
+
+/* Unsigned. */
+typedef unsigned char uint_fast8_t;
+#if __WORDSIZE == 64
+typedef unsigned long int uint_fast16_t;
+typedef unsigned long int uint_fast32_t;
+typedef unsigned long int uint_fast64_t;
+#else
+typedef unsigned int uint_fast16_t;
+typedef unsigned int uint_fast32_t;
+__extension__
+typedef unsigned long long int uint_fast64_t;
+#endif
+
+
+/* Types for `void *' pointers. */
+#if __WORDSIZE == 64
+# ifndef __intptr_t_defined
+typedef long int intptr_t;
+# define __intptr_t_defined
+# endif
+typedef unsigned long int uintptr_t;
+#else
+# ifndef __intptr_t_defined
+typedef int intptr_t;
+# define __intptr_t_defined
+# endif
+typedef unsigned int uintptr_t;
+#endif
+
+
+/* Largest integral types. */
+#if __WORDSIZE == 64
+typedef long int intmax_t;
+typedef unsigned long int uintmax_t;
+#else
+__extension__
+typedef long long int intmax_t;
+__extension__
+typedef unsigned long long int uintmax_t;
+#endif
+
+
+# if __WORDSIZE == 64
+# define __INT64_C(c) c ## L
+# define __UINT64_C(c) c ## UL
+# else
+# define __INT64_C(c) c ## LL
+# define __UINT64_C(c) c ## ULL
+# endif
+
+/* Limits of integral types. */
+
+/* Minimum of signed integral types. */
+# define INT8_MIN (-128)
+# define INT16_MIN (-32767-1)
+# define INT32_MIN (-2147483647-1)
+# define INT64_MIN (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types. */
+# define INT8_MAX (127)
+# define INT16_MAX (32767)
+# define INT32_MAX (2147483647)
+# define INT64_MAX (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types. */
+# define UINT8_MAX (255)
+# define UINT16_MAX (65535)
+# define UINT32_MAX (4294967295U)
+# define UINT64_MAX (__UINT64_C(18446744073709551615))
+
+
+/* Minimum of signed integral types having a minimum size. */
+# define INT_LEAST8_MIN (-128)
+# define INT_LEAST16_MIN (-32767-1)
+# define INT_LEAST32_MIN (-2147483647-1)
+# define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types having a minimum size. */
+# define INT_LEAST8_MAX (127)
+# define INT_LEAST16_MAX (32767)
+# define INT_LEAST32_MAX (2147483647)
+# define INT_LEAST64_MAX (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types having a minimum size. */
+# define UINT_LEAST8_MAX (255)
+# define UINT_LEAST16_MAX (65535)
+# define UINT_LEAST32_MAX (4294967295U)
+# define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615))
+
+
+/* Minimum of fast signed integral types having a minimum size. */
+# define INT_FAST8_MIN (-128)
+# if __WORDSIZE == 64
+# define INT_FAST16_MIN (-9223372036854775807L-1)
+# define INT_FAST32_MIN (-9223372036854775807L-1)
+# else
+# define INT_FAST16_MIN (-2147483647-1)
+# define INT_FAST32_MIN (-2147483647-1)
+# endif
+# define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1)
+/* Maximum of fast signed integral types having a minimum size. */
+# define INT_FAST8_MAX (127)
+# if __WORDSIZE == 64
+# define INT_FAST16_MAX (9223372036854775807L)
+# define INT_FAST32_MAX (9223372036854775807L)
+# else
+# define INT_FAST16_MAX (2147483647)
+# define INT_FAST32_MAX (2147483647)
+# endif
+# define INT_FAST64_MAX (__INT64_C(9223372036854775807))
+
+/* Maximum of fast unsigned integral types having a minimum size. */
+# define UINT_FAST8_MAX (255)
+# if __WORDSIZE == 64
+# define UINT_FAST16_MAX (18446744073709551615UL)
+# define UINT_FAST32_MAX (18446744073709551615UL)
+# else
+# define UINT_FAST16_MAX (4294967295U)
+# define UINT_FAST32_MAX (4294967295U)
+# endif
+# define UINT_FAST64_MAX (__UINT64_C(18446744073709551615))
+
+
+/* Values to test for integral types holding `void *' pointer. */
+# if __WORDSIZE == 64
+# define INTPTR_MIN (-9223372036854775807L-1)
+# define INTPTR_MAX (9223372036854775807L)
+# define UINTPTR_MAX (18446744073709551615UL)
+# else
+# define INTPTR_MIN (-2147483647-1)
+# define INTPTR_MAX (2147483647)
+# define UINTPTR_MAX (4294967295U)
+# endif
+
+
+/* Minimum for largest signed integral type. */
+# define INTMAX_MIN (-__INT64_C(9223372036854775807)-1)
+/* Maximum for largest signed integral type. */
+# define INTMAX_MAX (__INT64_C(9223372036854775807))
+
+/* Maximum for largest unsigned integral type. */
+# define UINTMAX_MAX (__UINT64_C(18446744073709551615))
+
+
+/* Limits of other integer types. */
+
+/* Limits of `ptrdiff_t' type. */
+# if __WORDSIZE == 64
+# define PTRDIFF_MIN (-9223372036854775807L-1)
+# define PTRDIFF_MAX (9223372036854775807L)
+# else
+# define PTRDIFF_MIN (-2147483647-1)
+# define PTRDIFF_MAX (2147483647)
+# endif
+
+/* Limits of `sig_atomic_t'. */
+# define SIG_ATOMIC_MIN (-2147483647-1)
+# define SIG_ATOMIC_MAX (2147483647)
+
+/* Limit of `size_t' type. */
+# if __WORDSIZE == 64
+# define SIZE_MAX (18446744073709551615UL)
+# else
+# define SIZE_MAX (4294967295U)
+# endif
+
+/* Limits of `wchar_t'. */
+# ifndef WCHAR_MIN
+/* These constants might also be defined in <wchar.h>. */
+# define WCHAR_MIN __WCHAR_MIN
+# define WCHAR_MAX __WCHAR_MAX
+# endif
+
+/* Limits of `wint_t'. */
+# define WINT_MIN (0u)
+# define WINT_MAX (4294967295u)
+
+/* Signed. */
+# define INT8_C(c) c
+# define INT16_C(c) c
+# define INT32_C(c) c
+# if __WORDSIZE == 64
+# define INT64_C(c) c ## L
+# else
+# define INT64_C(c) c ## LL
+# endif
+
+/* Unsigned. */
+# define UINT8_C(c) c
+# define UINT16_C(c) c
+# define UINT32_C(c) c ## U
+# if __WORDSIZE == 64
+# define UINT64_C(c) c ## UL
+# else
+# define UINT64_C(c) c ## ULL
+# endif
+
+/* Maximal type. */
+# if __WORDSIZE == 64
+# define INTMAX_C(c) c ## L
+# define UINTMAX_C(c) c ## UL
+# else
+# define INTMAX_C(c) c ## LL
+# define UINTMAX_C(c) c ## ULL
+# endif
+
+
+#endif /* linux */
+
+#endif /* stdint.h */
+
+#else
+
+#include <wchar.h>
+
+/* stdint.h standard header */
+#pragma once
+#ifndef _STDINT
+#define _STDINT
+#ifndef RC_INVOKED
+#include <yvals.h>
+
+/* NB: assumes
+ byte has 8 bits
+ long is 32 bits
+ pointer can convert to and from long long
+ long long is longest type
+ */
+
+_C_STD_BEGIN
+ /* TYPE DEFINITIONS */
+typedef signed char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+
+typedef signed char int_least8_t;
+typedef short int_least16_t;
+typedef int int_least32_t;
+
+typedef unsigned char uint_least8_t;
+typedef unsigned short uint_least16_t;
+typedef unsigned int uint_least32_t;
+
+typedef char int_fast8_t;
+typedef int int_fast16_t;
+typedef int int_fast32_t;
+
+typedef unsigned char uint_fast8_t;
+typedef unsigned int uint_fast16_t;
+typedef unsigned int uint_fast32_t;
+
+#ifndef _INTPTR_T_DEFINED
+ #define _INTPTR_T_DEFINED
+ #ifdef _WIN64
+typedef __int64 intptr_t;
+ #else /* _WIN64 */
+typedef _W64 int intptr_t;
+ #endif /* _WIN64 */
+#endif /* _INTPTR_T_DEFINED */
+
+#ifndef _UINTPTR_T_DEFINED
+ #define _UINTPTR_T_DEFINED
+ #ifdef _WIN64
+typedef unsigned __int64 uintptr_t;
+ #else /* _WIN64 */
+typedef _W64 unsigned int uintptr_t;
+ #endif /* _WIN64 */
+#endif /* _UINTPTR_T_DEFINED */
+
+typedef _Longlong int64_t;
+typedef _ULonglong uint64_t;
+
+typedef _Longlong int_least64_t;
+typedef _ULonglong uint_least64_t;
+
+typedef _Longlong int_fast64_t;
+typedef _ULonglong uint_fast64_t;
+
+typedef _Longlong intmax_t;
+typedef _ULonglong uintmax_t;
+
+ /* LIMIT MACROS */
+#define INT8_MIN (-0x7f - _C2)
+#define INT16_MIN (-0x7fff - _C2)
+#define INT32_MIN (-0x7fffffff - _C2)
+
+#define INT8_MAX 0x7f
+#define INT16_MAX 0x7fff
+#define INT32_MAX 0x7fffffff
+#define UINT8_MAX 0xff
+#define UINT16_MAX 0xffff
+#define UINT32_MAX 0xffffffff
+
+#define INT_LEAST8_MIN (-0x7f - _C2)
+#define INT_LEAST16_MIN (-0x7fff - _C2)
+#define INT_LEAST32_MIN (-0x7fffffff - _C2)
+
+#define INT_LEAST8_MAX 0x7f
+#define INT_LEAST16_MAX 0x7fff
+#define INT_LEAST32_MAX 0x7fffffff
+#define UINT_LEAST8_MAX 0xff
+#define UINT_LEAST16_MAX 0xffff
+#define UINT_LEAST32_MAX 0xffffffff
+
+#define INT_FAST8_MIN (-0x7f - _C2)
+#define INT_FAST16_MIN (-0x7fff - _C2)
+#define INT_FAST32_MIN (-0x7fffffff - _C2)
+
+#define INT_FAST8_MAX 0x7f
+#define INT_FAST16_MAX 0x7fff
+#define INT_FAST32_MAX 0x7fffffff
+#define UINT_FAST8_MAX 0xff
+#define UINT_FAST16_MAX 0xffff
+#define UINT_FAST32_MAX 0xffffffff
+
+ #if _INTPTR == 0 || _INTPTR == 1
+#define INTPTR_MAX 0x7fffffff
+#define INTPTR_MIN (-INTPTR_MAX - _C2)
+#define UINTPTR_MAX 0xffffffff
+
+ #else /* _INTPTR == 2 */
+#define INTPTR_MIN (-_LLONG_MAX - _C2)
+#define INTPTR_MAX _LLONG_MAX
+#define UINTPTR_MAX _ULLONG_MAX
+#endif /* _INTPTR */
+
+#define INT8_C(x) (x)
+#define INT16_C(x) (x)
+#define INT32_C(x) ((x) + (INT32_MAX - INT32_MAX))
+
+#define UINT8_C(x) (x)
+#define UINT16_C(x) (x)
+#define UINT32_C(x) ((x) + (UINT32_MAX - UINT32_MAX))
+
+#ifdef _WIN64
+ #define PTRDIFF_MIN INT64_MIN
+ #define PTRDIFF_MAX INT64_MAX
+#else /* _WIN64 */
+ #define PTRDIFF_MIN INT32_MIN
+ #define PTRDIFF_MAX INT32_MAX
+#endif /* _WIN64 */
+
+#define SIG_ATOMIC_MIN INT32_MIN
+#define SIG_ATOMIC_MAX INT32_MAX
+
+#ifndef SIZE_MAX
+ #ifdef _WIN64
+ #define SIZE_MAX UINT64_MAX
+ #else /* _WIN64 */
+ #define SIZE_MAX UINT32_MAX
+ #endif /* _WIN64 */
+#endif /* SIZE_MAX */
+
+#ifndef WCHAR_MIN
+#define WCHAR_MIN 0x0000
+#endif
+#define WCHAR_MAX 0xffff
+
+#define WINT_MIN 0x0000
+#define WINT_MAX 0xffff
+
+ #define INT64_MIN (-0x7fffffffffffffff - _C2)
+ #define INT64_MAX 0x7fffffffffffffff
+ #define UINT64_MAX 0xffffffffffffffffU
+
+ #define INT_LEAST64_MIN (-0x7fffffffffffffff - _C2)
+ #define INT_LEAST64_MAX 0x7fffffffffffffff
+ #define UINT_LEAST64_MAX 0xffffffffffffffffU
+
+ #define INT_FAST64_MIN (-0x7fffffffffffffff - _C2)
+ #define INT_FAST64_MAX 0x7fffffffffffffff
+ #define UINT_FAST64_MAX 0xffffffffffffffffU
+
+ #define INTMAX_MIN (-0x7fffffffffffffff - _C2)
+ #define INTMAX_MAX 0x7fffffffffffffff
+ #define UINTMAX_MAX 0xffffffffffffffffU
+
+#define INT64_C(x) ((x) + (INT64_MAX - INT64_MAX))
+#define UINT64_C(x) ((x) + (UINT64_MAX - UINT64_MAX))
+#define INTMAX_C(x) INT64_C(x)
+#define UINTMAX_C(x) UINT64_C(x)
+_C_STD_END
+#endif /* RC_INVOKED */
+#endif /* _STDINT */
+
+ #if defined(_STD_USING)
+using _CSTD int8_t; using _CSTD int16_t;
+using _CSTD int32_t; using _CSTD int64_t;
+
+using _CSTD uint8_t; using _CSTD uint16_t;
+using _CSTD uint32_t; using _CSTD uint64_t;
+
+using _CSTD int_least8_t; using _CSTD int_least16_t;
+using _CSTD int_least32_t; using _CSTD int_least64_t;
+using _CSTD uint_least8_t; using _CSTD uint_least16_t;
+using _CSTD uint_least32_t; using _CSTD uint_least64_t;
+
+using _CSTD intmax_t; using _CSTD uintmax_t;
+
+using _CSTD uintptr_t;
+using _CSTD intptr_t;
+
+using _CSTD int_fast8_t; using _CSTD int_fast16_t;
+using _CSTD int_fast32_t; using _CSTD int_fast64_t;
+using _CSTD uint_fast8_t; using _CSTD uint_fast16_t;
+using _CSTD uint_fast32_t; using _CSTD uint_fast64_t;
+ #endif /* defined(_STD_USING) */
+
+/*
+ * Copyright (c) 1992-2009 by P.J. Plauger. ALL RIGHTS RESERVED.
+ * Consult your license regarding permissions and restrictions.
+V5.20:0009 */
+
+#endif
diff --git a/include/qhy/titan034.h b/include/qhy/titan034.h
new file mode 100644
index 0000000..f24ae63
--- /dev/null
+++ b/include/qhy/titan034.h
@@ -0,0 +1,412 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+/*! @file titan034.h
+ * @brief TITAN034 class define
+ */
+
+#include "qhybase.h"
+
+#ifdef LINUX
+#include <opencv/cv.h>
+#endif
+
+#ifndef TITAN034_DEF
+#define TITAN034_DEF
+
+
+/**
+ * @brief TITAN034 class define
+ *
+ * include all functions for titan034
+ */
+class TITAN034:public QHYBASE
+{
+public:
+ TITAN034();
+ ~TITAN034();
+ /**
+ @fn uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h)
+ @brief connect to the connected camera
+ @param d camera deivce
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ConnectCamera(qhyccd_device *d,qhyccd_handle **h);
+
+ /**
+ @fn uint32_t DisConnectCamera(qhyccd_handle *h)
+ @brief disconnect to the connected camera
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t DisConnectCamera(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t InitChipRegs(qhyccd_handle *h)
+ @brief Init the registers and some other things
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t InitChipRegs(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t IsChipHasFunction(CONTROL_ID id)
+ @brief check the camera has the function or not
+ @param id function id
+ @return
+ HAVE return QHYCCD_HAVE \n
+ NOT HAVE return QHYCCD_NOTHAVE
+ */
+ uint32_t IsChipHasFunction(CONTROL_ID id);
+
+ /**
+ @fn uint32_t ReSetParams2cam(qhyccd_handle *h)
+ @brief re set the params to camera,because some behavior will cause camera reset
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t ReSetParams2cam(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t SetChipGain(qhyccd_handle *h,double gain)
+ @brief set the gain to camera
+ @param h camera control handle
+ @param gain gain value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipGain(qhyccd_handle *h,double gain);
+
+ /**
+ @fn uint32_t SetChipExposeTime(qhyccd_handle *h,double i)
+ @brief set the expose time to camera
+ @param h camera control handle
+ @param i expose time value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipExposeTime(qhyccd_handle *h,double i);
+
+ /**
+ @fn uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i)
+ @brief set the transfer speed to camera
+ @param h camera control handle
+ @param i speed level
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipSpeed(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step)
+ @brief get the min,max and step value for function
+ @param controlId the control id
+ @param min the min value for function
+ @param max the max value for function
+ @param step single step value for function
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetControlMinMaxStepValue(CONTROL_ID controlId,double *min,double *max,double *step);
+
+ /**
+ @fn uint32_t GetChipMemoryLength()
+ @brief get the min cost memory for the image
+ @return
+ success return the total memory space(unit:byte) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetChipMemoryLength();
+
+ /**
+ @fn double GetChipExposeTime()
+ @brief get the current exposetime
+ @return
+ success return the current expose time (unit:us) \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipExposeTime();
+
+ /**
+ @fn double GetChipGain()
+ @brief get the current gain
+ @return
+ success return the current expose gain\n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipGain();
+
+ /**
+ @fn double GetChipSpeed()
+ @brief get the current transfer speed
+ @return
+ success return the current speed level \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipSpeed();
+
+ /**
+ @fn double GetChipBitsMode()
+ @brief get the current camera depth bits
+ @return
+ success return the current camera depth bits \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double GetChipBitsMode();
+
+ /**
+ @fn uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits)
+ @brief set the camera depth bits
+ @param h camera control handle
+ @param bits depth bits
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBitsMode(qhyccd_handle *h,uint32_t bits);
+
+ /**
+ @fn uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin)
+ @brief set the camera image bin mode
+ @param h camera control handle
+ @param wbin width bin
+ @param hbin height bin
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipBinMode(qhyccd_handle *h,uint32_t wbin,uint32_t hbin);
+
+ /**
+ @fn uint32_t CorrectWH(uint32_t *w,uint32_t *h)
+ @brief correct width and height if the setting width or height is not correct
+ @param w set width
+ @param h set height
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CorrectWH(uint32_t *w,uint32_t *h);
+
+ /**
+ @fn uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize)
+ @brief set camera ouput resolution
+ @param handle camera control handle
+ @param x the top left position x
+ @param y the top left position y
+ @param xsize the image width
+ @param ysize the image height
+ @return
+ on success,return QHYCCD_SUCCESS\n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipResolution(qhyccd_handle *handle,uint32_t x,uint32_t y,uint32_t xsize,uint32_t ysize);
+
+ /**
+ @fn uint32_t BeginSingleExposure(qhyccd_handle *h)
+ @brief begin single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginSingleExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t CancelExposing(qhyccd_handle *handle)
+ @param handle camera control handle
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposing(qhyccd_handle *handle);
+
+ /**
+ @fn uint32_t CancelExposingAndReadout(qhyccd_handle *h)
+ @brief stop single exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t CancelExposingAndReadout(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get single frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetSingleFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t BeginLiveExposure(qhyccd_handle *h)
+ @brief begin live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t BeginLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t StopLiveExposure(qhyccd_handle *h)
+ @brief stop live exposure
+ @param h camera control handle
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t StopLiveExposure(qhyccd_handle *h);
+
+ /**
+ @fn uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData)
+ @brief get live frame image data
+ @param h camera control handle
+ @param pW real width
+ @param pH real height
+ @param pBpp real depth bits
+ @param pChannels real channels
+ @param ImgData image data buffer
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t GetLiveFrame(qhyccd_handle *h,uint32_t *pW,uint32_t *pH,uint32_t * pBpp,uint32_t *pChannels,uint8_t *ImgData);
+
+ /**
+ @fn uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i)
+ @brief set hblank
+ @param h camera control handle
+ @param i hblank value
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetChipUSBTraffic(qhyccd_handle *h,uint32_t i);
+
+ /**
+ @fn uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime)
+ @brief send the command to camera's guide port
+ @param h camera control handle
+ @param Direction RA DEC
+ @param PulseTime the time last for command
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t Send2GuiderPort(qhyccd_handle *h,uint32_t Direction,uint16_t PulseTime);
+
+
+ /**
+ @fn double SetPll(qhyccd_handle *h,uint8_t clk)
+ @brief set the cmos inter pll
+ @param h camera control handle
+ @param clk clock
+ @return
+ success return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ double SetPll(qhyccd_handle *h,uint8_t clk);
+
+ /**
+ @fn void SWIFT_MSBLSB(uint8_t *ImgData)
+ @brief switch the image pixel data to right position
+ @param ImgData image buffer
+ */
+ void SWIFT_MSBLSB(uint8_t *ImgData);
+
+ /**
+ @fn void SetAnalogGain(double gain)
+ @brief set gain to camera,here it is the bottom
+ @param gain gain value
+ */
+ void SetAnalogGain(qhyccd_handle *h,double gain);
+
+ /** @fn uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh)
+ @brief get the camera's ccd/cmos chip info
+ @param h camera control handle
+ @param chipw chip size width
+ @param chiph chip size height
+ @param imagew chip output image width
+ @param imageh chip output image height
+ @param pixelw chip pixel size width
+ @param pixelh chip pixel size height
+ @param bpp chip pixel depth
+ */
+ uint32_t GetChipInfo(double *chipw,double *chiph,uint32_t *imagew,uint32_t *imageh,double *pixelw,double *pixelh,uint32_t *bpp);
+
+
+ /** @fn uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY)
+ @brief Set the camera on focus mode
+ @param h camera control handle
+ @param focusCenterX
+ @param focusCenterY
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetFocusSetting(qhyccd_handle *h,uint32_t focusCenterX, uint32_t focusCenterY);
+
+ /**
+ @fn uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode)
+ @brief Set the camera's mode to chose the way reading data from camera
+ @param handle camera control handle
+ @param mode the stream mode \n
+ 0x00:default mode,single frame mode \n
+ 0x01:live mode \n
+ @return
+ on success,return QHYCCD_SUCCESS \n
+ another QHYCCD_ERROR code on other failures
+ */
+ uint32_t SetStreamMode(qhyccd_handle *handle,uint8_t mode);
+
+private:
+ uint32_t expmode; //!< expose time mode
+ uint32_t pllratio; //!< inter pll ratio
+ uint32_t lastx,lasty,lastxsize,lastysize;
+ uint32_t longtimeflag;
+ uint32_t transferflag;
+};
+#endif
diff --git a/include/qhy/unlockimagequeue.h b/include/qhy/unlockimagequeue.h
new file mode 100644
index 0000000..35aef29
--- /dev/null
+++ b/include/qhy/unlockimagequeue.h
@@ -0,0 +1,56 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+#ifndef _UNLOCK_QUEUE_H
+#define _UNLOCK_QUEUE_H
+
+class UnlockImageQueue {
+public:
+ UnlockImageQueue();
+ virtual ~UnlockImageQueue();
+
+ bool Initialize(int nSize);
+ unsigned int Put(const unsigned char *pBuffer, unsigned int nLen);
+ unsigned int Get(unsigned char *pBuffer, unsigned int nLen);
+ inline void Clean() {
+ m_nIn = 0;
+ m_nOut = 0;
+ }
+ inline unsigned int GetDataLen() const {
+ return m_nIn - m_nOut;
+ }
+
+private:
+ inline bool is_power_of_2(unsigned long n) {
+ return (n != 0 && ((n & (n - 1)) == 0));
+ };
+
+ inline unsigned long roundup_power_of_two(unsigned long val);
+private:
+ unsigned char *m_pBuffer; /* the buffer holding the data */
+ unsigned int m_nSize; /* the size of the allocated buffer */
+ unsigned int m_nIn; /* data is added at offset (in % size) */
+ unsigned int m_nOut; /* data is extracted from offset (out % size) */
+};
+
+#endif
diff --git a/include/qhy/usb.h b/include/qhy/usb.h
new file mode 100644
index 0000000..ac5d23f
--- /dev/null
+++ b/include/qhy/usb.h
@@ -0,0 +1,1083 @@
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Module Name:
+
+ USB.H
+
+Abstract:
+
+ structures and APIs for USB drivers.
+
+Environment:
+
+ Kernel & user mode
+
+Revision History:
+
+ 09-29-95 : created
+ 02-10-04 : Updated to include header versioning
+
+--*/
+
+#ifndef __USB_H__
+#define __USB_H__
+
+
+
+/*
+ This file is equivalent to USBDI.H with extensions supported by
+ usbport.sys for eUSB.
+
+ This file replaces usbdi.h and is compatible with older versions
+ of the USB stack.
+*/
+
+#ifdef OSR21_COMPAT
+#pragma message("WARNING: OSR21_COMPAT SWITCH NOT SUPPORTED")
+#endif
+
+#ifndef _NTDDK_
+#ifndef _WDMDDK_
+typedef PVOID PIRP;
+typedef PVOID PMDL;
+#endif
+#endif
+
+#define USBDI_VERSION 0x00000600
+
+#include "usb200.h"
+#ifdef _WDMDDK_
+#endif
+
+/*
+ Microsoft Extended Port Attribute Flags
+*/
+#if _MSC_VER >= 1200
+#pragma warning(push)
+#endif
+#pragma warning(disable:4201) // named type definition in parentheses
+#pragma warning(disable:4214) // named type definition in parentheses
+
+#define USB_PORTATTR_NO_CONNECTOR 0x00000001
+#define USB_PORTATTR_SHARED_USB2 0x00000002
+#define USB_PORTATTR_MINI_CONNECTOR 0x00000004
+#define USB_PORTATTR_OEM_CONNECTOR 0x00000008
+
+/* dynamic attributes */
+#define USB_PORTATTR_OWNED_BY_CC 0x01000000
+#define USB_PORTATTR_NO_OVERCURRENT_UI 0x02000000
+
+
+/* define USB controller flavors:
+ These are all known HW implementations that require special
+ hacks.
+*/
+
+typedef enum _USB_CONTROLLER_FLAVOR {
+
+ USB_HcGeneric = 0,
+
+ OHCI_Generic = 100,
+ OHCI_Hydra,
+ OHCI_NEC,
+
+ UHCI_Generic = 200,
+ UHCI_Piix4 = 201,
+ UHCI_Piix3 = 202,
+ UHCI_Ich2 = 203,
+ UHCI_Reserved204 = 204, // was ich2_2
+ UHCI_Ich1 = 205,
+ UHCI_Ich3m = 206,
+ UHCI_Ich4 = 207,
+ UHCI_Ich5 = 208,
+ UHCI_Ich6 = 209,
+
+ UHCI_Intel = 249,
+
+ //these VIA revs require special handling in the uhci miniport
+ UHCI_VIA = 250,
+ UHCI_VIA_x01 = 251,
+ UHCI_VIA_x02 = 252,
+ UHCI_VIA_x03 = 253,
+ UHCI_VIA_x04 = 254,
+
+ UHCI_VIA_x0E_FIFO = 264,
+
+ EHCI_Generic = 1000,
+ EHCI_NEC = 2000,
+ EHCI_Lucent = 3000
+
+} USB_CONTROLLER_FLAVOR;
+
+
+//
+// USB defined structures and constants
+// (see chapter 9 of USB specification)
+//
+
+#define USB_DEFAULT_DEVICE_ADDRESS 0
+#define USB_DEFAULT_ENDPOINT_ADDRESS 0
+
+//
+// max packet size (bytes) for default endpoint
+// until SET_ADDRESS command is received.
+//
+
+#define USB_DEFAULT_MAX_PACKET 64
+
+//
+// USBD interface structures and constants
+//
+
+
+#define URB_FROM_IRP(Irp) ((IoGetCurrentIrpStackLocation(Irp))->Parameters.Others.Argument1)
+
+//
+// URB request codes
+//
+
+#define URB_FUNCTION_SELECT_CONFIGURATION 0x0000
+#define URB_FUNCTION_SELECT_INTERFACE 0x0001
+#define URB_FUNCTION_ABORT_PIPE 0x0002
+#define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL 0x0003
+#define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL 0x0004
+#define URB_FUNCTION_GET_FRAME_LENGTH 0x0005
+#define URB_FUNCTION_SET_FRAME_LENGTH 0x0006
+#define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER 0x0007
+#define URB_FUNCTION_CONTROL_TRANSFER 0x0008
+#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009
+#define URB_FUNCTION_ISOCH_TRANSFER 0x000A
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE 0x000C
+#define URB_FUNCTION_SET_FEATURE_TO_DEVICE 0x000D
+#define URB_FUNCTION_SET_FEATURE_TO_INTERFACE 0x000E
+#define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT 0x000F
+#define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE 0x0010
+#define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE 0x0011
+#define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT 0x0012
+#define URB_FUNCTION_GET_STATUS_FROM_DEVICE 0x0013
+#define URB_FUNCTION_GET_STATUS_FROM_INTERFACE 0x0014
+#define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT 0x0015
+#define URB_FUNCTION_RESERVED_0X0016 0x0016
+#define URB_FUNCTION_VENDOR_DEVICE 0x0017
+#define URB_FUNCTION_VENDOR_INTERFACE 0x0018
+#define URB_FUNCTION_VENDOR_ENDPOINT 0x0019
+#define URB_FUNCTION_CLASS_DEVICE 0x001A
+#define URB_FUNCTION_CLASS_INTERFACE 0x001B
+#define URB_FUNCTION_CLASS_ENDPOINT 0x001C
+#define URB_FUNCTION_RESERVE_0X001D 0x001D
+// previously URB_FUNCTION_RESET_PIPE
+#define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E
+#define URB_FUNCTION_CLASS_OTHER 0x001F
+#define URB_FUNCTION_VENDOR_OTHER 0x0020
+#define URB_FUNCTION_GET_STATUS_FROM_OTHER 0x0021
+#define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER 0x0022
+#define URB_FUNCTION_SET_FEATURE_TO_OTHER 0x0023
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT 0x0025
+#define URB_FUNCTION_GET_CONFIGURATION 0x0026
+#define URB_FUNCTION_GET_INTERFACE 0x0027
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE 0x0028
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE 0x0029
+
+// USB 2.0 calls start at 0x0030
+
+#if (_WIN32_WINNT >= 0x0501)
+
+#define URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR 0x002A
+#define URB_FUNCTION_SYNC_RESET_PIPE 0x0030
+#define URB_FUNCTION_SYNC_CLEAR_STALL 0x0031
+
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#define URB_FUNCTION_CONTROL_TRANSFER_EX 0x0032
+#define URB_FUNCTION_RESERVE_0X0033 0x0033
+#define URB_FUNCTION_RESERVE_0X0034 0x0034
+
+#endif
+
+// Reserve 0x002B-0x002F
+#define URB_FUNCTION_RESERVE_0X002B 0x002B
+#define URB_FUNCTION_RESERVE_0X002C 0x002C
+#define URB_FUNCTION_RESERVE_0X002D 0x002D
+#define URB_FUNCTION_RESERVE_0X002E 0x002E
+#define URB_FUNCTION_RESERVE_0X002F 0x002F
+
+
+// for backward drivers
+#define URB_FUNCTION_RESET_PIPE \
+ URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
+
+/* Control Pipe Function Groupings
+
+ These functions correspond to the standard commands
+ on the default pipe, direction is implied
+
+
+URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE
+URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT
+URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE
+
+URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE
+URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT
+URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE
+
+URB_FUNCTION_SET_FEATURE_TO_DEVICE
+URB_FUNCTION_SET_FEATURE_TO_INTERFACE
+URB_FUNCTION_SET_FEATURE_TO_ENDPOINT
+URB_FUNCTION_SET_FEATURE_TO_OTHER
+
+URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE
+URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE
+URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT
+URB_FUNCTION_CLEAR_FEATURE_TO_OTHER
+
+URB_FUNCTION_GET_STATUS_FROM_DEVICE
+URB_FUNCTION_GET_STATUS_FROM_INTERFACE
+URB_FUNCTION_GET_STATUS_FROM_ENDPOINT
+URB_FUNCTION_GET_STATUS_FROM_OTHER
+
+URB_FUNCTION_VENDOR_DEVICE
+URB_FUNCTION_VENDOR_INTERFACE
+URB_FUNCTION_VENDOR_ENDPOINT
+URB_FUNCTION_VENDOR_OTHER
+
+URB_FUNCTION_CLASS_DEVICE
+URB_FUNCTION_CLASS_INTERFACE
+URB_FUNCTION_CLASS_ENDPOINT
+URB_FUNCTION_CLASS_OTHER
+
+*/
+
+//
+// Values for URB TransferFlags Field
+//
+
+/*
+ Set if data moves device->host
+*/
+#define USBD_TRANSFER_DIRECTION 0x00000001
+/*
+ This bit if not set indicates that a short packet, and hence,
+ a short transfer is an error condition
+*/
+#define USBD_SHORT_TRANSFER_OK 0x00000002
+/*
+ Subit the iso transfer on the next frame
+*/
+#define USBD_START_ISO_TRANSFER_ASAP 0x00000004
+#define USBD_DEFAULT_PIPE_TRANSFER 0x00000008
+
+
+#define USBD_TRANSFER_DIRECTION_FLAG(flags) ((flags) & USBD_TRANSFER_DIRECTION)
+
+#define USBD_TRANSFER_DIRECTION_OUT 0
+#define USBD_TRANSFER_DIRECTION_IN 1
+
+#define VALID_TRANSFER_FLAGS_MASK (USBD_SHORT_TRANSFER_OK | \
+ USBD_TRANSFER_DIRECTION | \
+ USBD_START_ISO_TRANSFER_ASAP | \
+ USBD_DEFAULT_PIPE_TRANSFER)
+
+#define USBD_ISO_START_FRAME_RANGE 1024
+
+typedef LONG USBD_STATUS;
+
+//
+// USBD status codes
+//
+// Status values are 32 bit values layed out as follows:
+//
+// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
+// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+// +---+---------------------------+-------------------------------+
+// | S | Status Code |
+// +---+---------------------------+-------------------------------+
+//
+// where
+//
+// S - is the state code
+//
+// 00 - completed with success
+// 01 - request is pending
+// 11, 10 - completed with error
+//
+//
+// Code - is the status code
+//
+
+//
+// Generic test for success on any status value (non-negative numbers
+// indicate success).
+//
+
+#define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0)
+
+//
+// Generic test for pending status value.
+//
+
+#define USBD_PENDING(Status) ((ULONG)(Status) >> 30 == 1)
+
+//
+// Generic test for error on any status value.
+//
+
+#define USBD_ERROR(Status) ((USBD_STATUS)(Status) < 0)
+
+//
+// Macro to check the status code only
+//
+//
+//define USBD_STATUS(Status) ((ULONG)(Status) & 0x0FFFFFFFL)
+
+// the high order bits (0xC) will always be set on an error
+
+#define USBD_STATUS_SUCCESS ((USBD_STATUS)0x00000000L)
+#define USBD_STATUS_PENDING ((USBD_STATUS)0x40000000L)
+//
+//#define USBD_STATUS_ERROR ((USBD_STATUS)0xC0000000L)
+
+
+// The following are defined for backward compatibility with the usb 1.0 stack
+
+
+//
+// HC (Hardware) status codes range 0x00000001 - 0x000000FF
+//
+
+#define USBD_STATUS_CRC ((USBD_STATUS)0xC0000001L)
+#define USBD_STATUS_BTSTUFF ((USBD_STATUS)0xC0000002L)
+#define USBD_STATUS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003L)
+#define USBD_STATUS_STALL_PID ((USBD_STATUS)0xC0000004L)
+#define USBD_STATUS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005L)
+#define USBD_STATUS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006L)
+#define USBD_STATUS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007L)
+#define USBD_STATUS_DATA_OVERRUN ((USBD_STATUS)0xC0000008L)
+#define USBD_STATUS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009L)
+#define USBD_STATUS_RESERVED1 ((USBD_STATUS)0xC000000AL)
+#define USBD_STATUS_RESERVED2 ((USBD_STATUS)0xC000000BL)
+#define USBD_STATUS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000CL)
+#define USBD_STATUS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000DL)
+#define USBD_STATUS_NOT_ACCESSED ((USBD_STATUS)0xC000000FL)
+#define USBD_STATUS_FIFO ((USBD_STATUS)0xC0000010L)
+
+#define USBD_STATUS_XACT_ERROR ((USBD_STATUS)0xC0000011L)
+#define USBD_STATUS_BABBLE_DETECTED ((USBD_STATUS)0xC0000012L)
+#define USBD_STATUS_DATA_BUFFER_ERROR ((USBD_STATUS)0xC0000013L)
+
+//
+// returned by HCD if a transfer is submitted to an endpoint that is
+// stalled
+//
+#define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L)
+
+//
+// Software status codes
+//
+#define USBD_STATUS_INVALID_URB_FUNCTION ((USBD_STATUS)0x80000200L)
+#define USBD_STATUS_INVALID_PARAMETER ((USBD_STATUS)0x80000300L)
+
+//
+// returned if client driver attempts to close an endpoint/interface
+// or configuration with outstanding transfers.
+//
+#define USBD_STATUS_ERROR_BUSY ((USBD_STATUS)0x80000400L)
+//
+// returned by USBD if it cannot complete a URB request, typically this
+// will be returned in the URB status field when the Irp is completed
+// with a more specific NT error code in the irp.status field.
+//
+//#define USBD_STATUS_REQUEST_FAILED ((USBD_STATUS)0x80000500L)
+
+#define USBD_STATUS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600L)
+
+// returned when there is not enough bandwidth avialable
+// to open a requested endpoint
+#define USBD_STATUS_NO_BANDWIDTH ((USBD_STATUS)0x80000700L)
+//
+// generic HC error
+//
+#define USBD_STATUS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800L)
+//
+// returned when a short packet terminates the transfer
+// ie USBD_SHORT_TRANSFER_OK bit not set
+//
+#define USBD_STATUS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900L)
+//
+// returned if the requested start frame is not within
+// USBD_ISO_START_FRAME_RANGE of the current USB frame,
+// note that the stall bit is set
+//
+#define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00L)
+//
+// returned by HCD if all packets in an iso transfer complete with an error
+//
+#define USBD_STATUS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00L)
+//
+// returned by USBD if the frame length control for a given
+// HC is already taken by anothe driver
+//
+#define USBD_STATUS_FRAME_CONTROL_OWNED ((USBD_STATUS)0xC0000C00L)
+//
+// returned by USBD if the caller does not own frame length control and
+// attempts to release or modify the HC frame length
+//
+#define USBD_STATUS_FRAME_CONTROL_NOT_OWNED ((USBD_STATUS)0xC0000D00L)
+
+//
+// additonal software error codes added for usb 2.0
+//
+
+//
+// returned for APIS not supported/implemented
+//
+#define USBD_STATUS_NOT_SUPPORTED ((USBD_STATUS)0xC0000E00L)
+
+#define USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR \
+ ((USBD_STATUS)0xC0000F00L)
+
+#define USBD_STATUS_INVALID_CONFIGURATION_DESCRIPTOR \
+ ((USBD_STATUS)0xC0000F00L)
+
+#define USBD_STATUS_INSUFFICIENT_RESOURCES ((USBD_STATUS)0xC0001000L)
+
+#define USBD_STATUS_SET_CONFIG_FAILED ((USBD_STATUS)0xC0002000L)
+
+#define USBD_STATUS_BUFFER_TOO_SMALL ((USBD_STATUS)0xC0003000L)
+
+#define USBD_STATUS_INTERFACE_NOT_FOUND ((USBD_STATUS)0xC0004000L)
+
+#define USBD_STATUS_INAVLID_PIPE_FLAGS ((USBD_STATUS)0xC0005000L)
+
+#define USBD_STATUS_TIMEOUT ((USBD_STATUS)0xC0006000L)
+
+#define USBD_STATUS_DEVICE_GONE ((USBD_STATUS)0xC0007000L)
+
+#define USBD_STATUS_STATUS_NOT_MAPPED ((USBD_STATUS)0xC0008000L)
+
+// returned when urb is intercepted or handled by the hub driver
+#define USBD_STATUS_HUB_INTERNAL_ERROR ((USBD_STATUS)0xC0009000L)
+
+
+//
+// set when a transfers is completed due to an AbortPipe request from
+// the client driver
+//
+//
+#define USBD_STATUS_CANCELED ((USBD_STATUS)0xC0010000L)
+
+//
+// extended isochronous error codes, these errors appear in the
+// packet status field of an isochronous transfer
+//
+
+
+// for some reason the controller did not access the TD asocated with this
+// packet
+#define USBD_STATUS_ISO_NOT_ACCESSED_BY_HW ((USBD_STATUS)0xC0020000L)
+// controller reported an error in the TD
+// since TD errors are controoler specific they are reorted
+// generically with this error code
+#define USBD_STATUS_ISO_TD_ERROR ((USBD_STATUS)0xC0030000L)
+// the packet was submitted in time by the client but
+// failed to reach the miniport in time
+#define USBD_STATUS_ISO_NA_LATE_USBPORT ((USBD_STATUS)0xC0040000L)
+// the packet was not sent because the client submitted it too late
+// to transmit
+#define USBD_STATUS_ISO_NOT_ACCESSED_LATE ((USBD_STATUS)0xC0050000L)
+
+// new parameter validation status codes
+#define USBD_STATUS_BAD_DESCRIPTOR ((USBD_STATUS)0xC0100000L)
+#define USBD_STATUS_BAD_DESCRIPTOR_BLEN ((USBD_STATUS)0xC0100001L)
+#define USBD_STATUS_BAD_DESCRIPTOR_TYPE ((USBD_STATUS)0xC0100002L)
+#define USBD_STATUS_BAD_INTERFACE_DESCRIPTOR ((USBD_STATUS)0xC0100003L)
+#define USBD_STATUS_BAD_ENDPOINT_DESCRIPTOR ((USBD_STATUS)0xC0100004L)
+#define USBD_STATUS_BAD_INTERFACE_ASSOC_DESCRIPTOR ((USBD_STATUS)0xC0100005L)
+#define USBD_STATUS_BAD_CONFIG_DESC_LENGTH ((USBD_STATUS)0xC0100006L)
+#define USBD_STATUS_BAD_NUMBER_OF_INTERFACES ((USBD_STATUS)0xC0100007L)
+#define USBD_STATUS_BAD_NUMBER_OF_ENDPOINTS ((USBD_STATUS)0xC0100008L)
+#define USBD_STATUS_BAD_ENDPOINT_ADDRESS ((USBD_STATUS)0xC0100009L)
+
+
+
+typedef PVOID USBD_PIPE_HANDLE;
+typedef PVOID USBD_CONFIGURATION_HANDLE;
+typedef PVOID USBD_INTERFACE_HANDLE;
+
+//
+// Value used to indicate the default max transfer size
+//
+
+/*
+ MAX TRANSFER SIZE
+
+ Specified during select_configuration or
+ selec_interface. This is the largest
+ transfer a client driver will do to an
+ endpoint.
+
+ This value may be from 0x00000001 to
+ 0xFFFFFFFF (1 to 4GB)
+
+*/
+//
+
+#if (_WIN32_WINNT >= 0x0501)
+
+//
+// For windows XP and later
+//
+
+#define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE 0xFFFFFFFF
+
+#else
+
+//
+// For Windows 2000
+//
+
+#define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE PAGE_SIZE
+
+#endif
+
+//
+// structure returned from USBD_GetVersion function
+//
+
+typedef struct _USBD_VERSION_INFORMATION {
+ ULONG USBDI_Version; //BCD usb interface version number
+ ULONG Supported_USB_Version; //BCD USB spec version number
+} USBD_VERSION_INFORMATION, *PUSBD_VERSION_INFORMATION;
+
+typedef enum _USBD_PIPE_TYPE {
+ UsbdPipeTypeControl,
+ UsbdPipeTypeIsochronous,
+ UsbdPipeTypeBulk,
+ UsbdPipeTypeInterrupt
+} USBD_PIPE_TYPE;
+
+#define USBD_PIPE_DIRECTION_IN(pipeInformation) ((pipeInformation)->EndpointAddress & \
+ USB_ENDPOINT_DIRECTION_MASK)
+
+typedef struct _USBD_DEVICE_INFORMATION {
+ ULONG OffsetNext;
+ PVOID UsbdDeviceHandle;
+ USB_DEVICE_DESCRIPTOR DeviceDescriptor;
+} USBD_DEVICE_INFORMATION, *PUSBD_DEVICE_INFORMATION;
+
+//
+// URB request structures
+//
+
+//
+// USBD pipe information structure, this structure
+// is returned for each pipe opened thru an
+// SELECT_CONFIGURATION or SELECT_INTERFACE request.
+//
+
+typedef struct _USBD_PIPE_INFORMATION {
+ //
+ // OUTPUT
+ // These fields are filled in by USBD
+ //
+ USHORT MaximumPacketSize; // Maximum packet size for this pipe
+ UCHAR EndpointAddress; // 8 bit USB endpoint address (includes direction)
+ // taken from endpoint descriptor
+ UCHAR Interval; // Polling interval in ms if interrupt pipe
+
+ USBD_PIPE_TYPE PipeType; // PipeType identifies type of transfer valid for this pipe
+ USBD_PIPE_HANDLE PipeHandle;
+
+ //
+ // INPUT
+ // These fields are filled in by the client driver
+ //
+ ULONG MaximumTransferSize; // Maximum size for a single request
+ // in bytes.
+ ULONG PipeFlags;
+} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;
+
+//
+// values for PipeFlags field in USBD_PIPE_INFORMATION field
+//
+
+// override the enpoint max_packet size
+// with the value in pipe_information
+// field
+#define USBD_PF_CHANGE_MAX_PACKET 0x00000001
+// optimize for short packets
+// 'bulk optimization #1'
+#define USBD_PF_SHORT_PACKET_OPT 0x00000002
+// optimize transfers for use
+// with 'real time threads
+#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
+// causes the driver to allocate map
+// map more transfers in the queue.
+#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
+
+#define USBD_PF_VALID_MASK (USBD_PF_CHANGE_MAX_PACKET | \
+ USBD_PF_SHORT_PACKET_OPT | \
+ USBD_PF_ENABLE_RT_THREAD_ACCESS | \
+ USBD_PF_MAP_ADD_TRANSFERS)
+
+
+//
+// USBD interface information structure, this structure
+// is returned for each interface opened thru an
+// SELECT_CONFIGURATION or SELECT_INTERFACE request.
+//
+
+typedef struct _USBD_INTERFACE_INFORMATION {
+ USHORT Length; // Length of this structure, including
+ // all pipe information structures that
+ // follow.
+ //
+ // INPUT
+ //
+ // Interface number and Alternate setting this
+ // structure is associated with
+ //
+ UCHAR InterfaceNumber;
+ UCHAR AlternateSetting;
+
+ //
+ // OUTPUT
+ // These fields are filled in by USBD
+ //
+ UCHAR Class;
+ UCHAR SubClass;
+ UCHAR Protocol;
+ UCHAR Reserved;
+
+ USBD_INTERFACE_HANDLE InterfaceHandle;
+ ULONG NumberOfPipes;
+
+ //
+ // INPUT/OUPUT
+ // see PIPE_INFORMATION
+
+ USBD_PIPE_INFORMATION Pipes[1];
+} USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION;
+
+//
+// work space provided for HCDs
+//
+
+struct _URB_HCD_AREA {
+ PVOID Reserved8[8];
+};
+
+struct _URB_HEADER {
+ //
+ // Fields filled in by client driver
+ //
+ USHORT Length;
+ USHORT Function;
+ USBD_STATUS Status;
+ //
+ // Fields used only by USBD
+ //
+ PVOID UsbdDeviceHandle; // device handle assigned to this device
+ // by USBD
+ ULONG UsbdFlags; // flags field reserved for USBD use.
+};
+
+struct _URB_SELECT_INTERFACE {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+
+ // client must input AlternateSetting & Interface Number
+ // class driver returns interface and handle
+ // for new alternate setting
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_SELECT_CONFIGURATION {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ // NULL indicates to set the device
+ // to the 'unconfigured' state
+ // ie set to configuration 0
+ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+//
+// This structure used for ABORT_PIPE & RESET_PIPE
+//
+
+struct _URB_PIPE_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG Reserved;
+};
+
+//
+// This structure used for
+// TAKE_FRAME_LENGTH_CONTROL &
+// RELEASE_FRAME_LENGTH_CONTROL
+//
+
+struct _URB_FRAME_LENGTH_CONTROL {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+};
+
+struct _URB_GET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ ULONG FrameLength;
+ ULONG FrameNumber;
+};
+
+struct _URB_SET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ LONG FrameLengthDelta;
+};
+
+struct _URB_GET_CURRENT_FRAME_NUMBER {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ ULONG FrameNumber;
+};
+
+//
+// Structures for specific control transfers
+// on the default pipe.
+//
+
+// GET_DESCRIPTOR
+// SET_DESCRIPTOR
+
+struct _URB_CONTROL_DESCRIPTOR_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *reserved MBZ*
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ USHORT Reserved1;
+ UCHAR Index;
+ UCHAR DescriptorType;
+ USHORT LanguageId;
+ USHORT Reserved2;
+};
+
+// GET_STATUS
+
+struct _URB_CONTROL_GET_STATUS_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *reserved MBZ*
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ UCHAR Reserved1[4];
+ USHORT Index; // zero, interface or endpoint
+ USHORT Reserved2;
+};
+
+// SET_FEATURE
+// CLEAR_FEATURE
+
+struct _URB_CONTROL_FEATURE_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ PVOID Reserved;
+ ULONG Reserved2;
+ ULONG Reserved3;
+ PVOID Reserved4;
+ PMDL Reserved5;
+ struct _URB *UrbLink; // *reserved MBZ*
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ USHORT Reserved0;
+ USHORT FeatureSelector;
+ USHORT Index; // zero, interface or endpoint
+ USHORT Reserved1;
+};
+
+// VENDOR & CLASS
+
+struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ PVOID Reserved;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *reserved MBZ*
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ UCHAR RequestTypeReservedBits;
+ UCHAR Request;
+ USHORT Value;
+ USHORT Index;
+ USHORT Reserved1;
+};
+
+
+struct _URB_CONTROL_GET_INTERFACE_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *reserved MBZ*
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ UCHAR Reserved1[4];
+ USHORT Interface;
+ USHORT Reserved2;
+};
+
+
+struct _URB_CONTROL_GET_CONFIGURATION_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *resrved MBZ*
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ UCHAR Reserved1[8];
+};
+
+#if (_WIN32_WINNT >= 0x0501)
+
+// Microsoft OS Descriptor APIs
+// supported in windows XP and later
+
+#define OS_STRING_DESCRIPTOR_INDEX 0xEE
+
+#define MS_GENRE_DESCRIPTOR_INDEX 0x0001
+#define MS_POWER_DESCRIPTOR_INDEX 0x0002
+
+#define MS_OS_STRING_SIGNATURE L"MSFT100"
+
+#define MS_OS_FLAGS_CONTAINERID 0x02
+
+typedef struct _OS_STRING {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ WCHAR MicrosoftString[7];
+ UCHAR bVendorCode;
+ union {
+ UCHAR bPad;
+ UCHAR bFlags;
+ };
+} OS_STRING, *POS_STRING;
+
+struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *optional* link to next urb request
+ // if this is a chain of commands
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ UCHAR Recipient:5; // Recipient {Device,Interface,Endpoint}
+ UCHAR Reserved1:3;
+ UCHAR Reserved2;
+ UCHAR InterfaceNumber; // wValue - high byte
+ UCHAR MS_PageIndex; // wValue - low byte
+ USHORT MS_FeatureDescriptorIndex; // wIndex field
+ USHORT Reserved3;
+};
+
+#endif
+
+//
+// request format for a control transfer on
+// the non-default pipe.
+//
+
+struct _URB_CONTROL_TRANSFER {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *reserved MBZ*
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ UCHAR SetupPacket[8];
+};
+
+#if (_WIN32_WINNT >= 0x0600)
+
+//
+// Suported for Windows Longhorn and later
+//
+
+struct _URB_CONTROL_TRANSFER_EX {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ ULONG Timeout; // *optional* timeout in milliseconds
+ // for this request, 0 = no timeout
+#ifdef WIN64
+ ULONG Pad;
+#endif
+ struct _URB_HCD_AREA hca; // fields for HCD use
+ UCHAR SetupPacket[8];
+};
+
+#endif
+
+struct _URB_BULK_OR_INTERRUPT_TRANSFER {
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags; // note: the direction bit will be set by USBD
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *optional* link to next urb request
+ // if this is a chain of commands
+ struct _URB_HCD_AREA hca; // fields for HCD use
+};
+
+
+//
+// ISO Transfer request
+//
+// TransferBufferMDL must point to a single virtually
+// contiguous buffer.
+//
+// StartFrame - the frame to send/receive the first packet of
+// the request.
+//
+// NumberOfPackets - number of packets to send in this request
+//
+//
+// IsoPacket Array
+//
+// Input: Offset - offset of the packet from the beginig
+// of the client buffer.
+// Output: Length - is set to the actual length of the packet
+// (For IN transfers).
+// Status: error that occurred during transmission or
+// reception of the packet.
+//
+
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR {
+ ULONG Offset; // INPUT Offset of the packet from the begining of the
+ // buffer.
+
+ ULONG Length; // OUTPUT length of data received (for in).
+ // OUTPUT 0 for OUT.
+ USBD_STATUS Status; // status code for this packet.
+} USBD_ISO_PACKET_DESCRIPTOR, *PUSBD_ISO_PACKET_DESCRIPTOR;
+
+struct _URB_ISOCH_TRANSFER {
+ //
+ // This block is the same as CommonTransfer
+ //
+ struct _URB_HEADER Hdr; // function code indicates get or set.
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL; // *optional*
+ struct _URB *UrbLink; // *optional* link to next urb request
+ // if this is a chain of commands
+ struct _URB_HCD_AREA hca; // fields for HCD use
+
+ //
+ // this block contains transfer fields
+ // specific to isochronous transfers
+ //
+
+ // 32 bit frame number to begin this transfer on, must be within 1000
+ // frames of the current USB frame or an error is returned.
+
+ // START_ISO_TRANSFER_ASAP flag in transferFlags:
+ // If this flag is set and no transfers have been submitted
+ // for the pipe then the transfer will begin on the next frame
+ // and StartFrame will be updated with the frame number the transfer
+ // was started on.
+ // If this flag is set and the pipe has active transfers then
+ // the transfer will be queued to begin on the frame after the
+ // last transfer queued is completed.
+ //
+ ULONG StartFrame;
+ // number of packets that make up this request
+ ULONG NumberOfPackets;
+ // number of packets that completed with errors
+ ULONG ErrorCount;
+ USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1];
+};
+
+
+typedef struct _URB {
+ union {
+ struct _URB_HEADER
+ UrbHeader;
+ struct _URB_SELECT_INTERFACE
+ UrbSelectInterface;
+ struct _URB_SELECT_CONFIGURATION
+ UrbSelectConfiguration;
+ struct _URB_PIPE_REQUEST
+ UrbPipeRequest;
+ struct _URB_FRAME_LENGTH_CONTROL
+ UrbFrameLengthControl;
+ struct _URB_GET_FRAME_LENGTH
+ UrbGetFrameLength;
+ struct _URB_SET_FRAME_LENGTH
+ UrbSetFrameLength;
+ struct _URB_GET_CURRENT_FRAME_NUMBER
+ UrbGetCurrentFrameNumber;
+ struct _URB_CONTROL_TRANSFER
+ UrbControlTransfer;
+
+ #if (_WIN32_WINNT >= 0x0600)
+
+ struct _URB_CONTROL_TRANSFER_EX
+ UrbControlTransferEx;
+
+ #endif
+
+ struct _URB_BULK_OR_INTERRUPT_TRANSFER
+ UrbBulkOrInterruptTransfer;
+ struct _URB_ISOCH_TRANSFER
+ UrbIsochronousTransfer;
+
+ // for standard control transfers on the default pipe
+ struct _URB_CONTROL_DESCRIPTOR_REQUEST
+ UrbControlDescriptorRequest;
+ struct _URB_CONTROL_GET_STATUS_REQUEST
+ UrbControlGetStatusRequest;
+ struct _URB_CONTROL_FEATURE_REQUEST
+ UrbControlFeatureRequest;
+ struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST
+ UrbControlVendorClassRequest;
+ struct _URB_CONTROL_GET_INTERFACE_REQUEST
+ UrbControlGetInterfaceRequest;
+ struct _URB_CONTROL_GET_CONFIGURATION_REQUEST
+ UrbControlGetConfigurationRequest;
+
+ #if (_WIN32_WINNT >= 0x0501)
+
+ struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST
+ UrbOSFeatureDescriptorRequest;
+ #endif
+
+ };
+} URB, *PURB;
+
+#if _MSC_VER >= 1200
+#pragma warning(pop)
+#endif
+
+
+#endif /* __USB_H__ */
+
diff --git a/include/qhy/usb100.h b/include/qhy/usb100.h
new file mode 100644
index 0000000..5129b11
--- /dev/null
+++ b/include/qhy/usb100.h
@@ -0,0 +1,272 @@
+#ifndef __USB100_H__
+#define __USB100_H__
+
+
+#include <PSHPACK1.H>
+
+
+//bmRequest.Dir
+#define BMREQUEST_HOST_TO_DEVICE 0
+#define BMREQUEST_DEVICE_TO_HOST 1
+
+//bmRequest.Type
+#define BMREQUEST_STANDARD 0
+#define BMREQUEST_CLASS 1
+#define BMREQUEST_VENDOR 2
+
+//bmRequest.Recipient
+#define BMREQUEST_TO_DEVICE 0
+#define BMREQUEST_TO_INTERFACE 1
+#define BMREQUEST_TO_ENDPOINT 2
+#define BMREQUEST_TO_OTHER 3
+
+
+#define MAXIMUM_USB_STRING_LENGTH 255
+
+// values for the bits returned by the USB GET_STATUS command
+#define USB_GETSTATUS_SELF_POWERED 0x01
+#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02
+
+
+#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
+#define USB_STRING_DESCRIPTOR_TYPE 0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
+
+// descriptor types defined by DWG documents
+#define USB_RESERVED_DESCRIPTOR_TYPE 0x06
+#define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07
+#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
+
+#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d<<8 | i))
+
+//
+// Values for bmAttributes field of an
+// endpoint descriptor
+//
+
+#define USB_ENDPOINT_TYPE_MASK 0x03
+
+#define USB_ENDPOINT_TYPE_CONTROL 0x00
+#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
+#define USB_ENDPOINT_TYPE_BULK 0x02
+#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
+
+
+//
+// definitions for bits in the bmAttributes field of a
+// configuration descriptor.
+//
+#define USB_CONFIG_POWERED_MASK 0xc0
+
+#define USB_CONFIG_BUS_POWERED 0x80
+#define USB_CONFIG_SELF_POWERED 0x40
+#define USB_CONFIG_REMOTE_WAKEUP 0x20
+
+//
+// Endpoint direction bit, stored in address
+//
+
+#define USB_ENDPOINT_DIRECTION_MASK 0x80
+
+// test direction bit in the bEndpointAddress field of
+// an endpoint descriptor.
+#define USB_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & USB_ENDPOINT_DIRECTION_MASK))
+#define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK)
+
+//
+// USB defined request codes
+// see chapter 9 of the USB 1.0 specifcation for
+// more information.
+//
+
+// These are the correct values based on the USB 1.0
+// specification
+
+#define USB_REQUEST_GET_STATUS 0x00
+#define USB_REQUEST_CLEAR_FEATURE 0x01
+
+#define USB_REQUEST_SET_FEATURE 0x03
+
+#define USB_REQUEST_SET_ADDRESS 0x05
+#define USB_REQUEST_GET_DESCRIPTOR 0x06
+#define USB_REQUEST_SET_DESCRIPTOR 0x07
+#define USB_REQUEST_GET_CONFIGURATION 0x08
+#define USB_REQUEST_SET_CONFIGURATION 0x09
+#define USB_REQUEST_GET_INTERFACE 0x0A
+#define USB_REQUEST_SET_INTERFACE 0x0B
+#define USB_REQUEST_SYNC_FRAME 0x0C
+
+
+//
+// defined USB device classes
+//
+
+
+#define USB_DEVICE_CLASS_RESERVED 0x00
+#define USB_DEVICE_CLASS_AUDIO 0x01
+#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
+#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
+#define USB_DEVICE_CLASS_MONITOR 0x04
+#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
+#define USB_DEVICE_CLASS_POWER 0x06
+#define USB_DEVICE_CLASS_PRINTER 0x07
+#define USB_DEVICE_CLASS_STORAGE 0x08
+#define USB_DEVICE_CLASS_HUB 0x09
+#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
+
+//
+// USB Core defined Feature selectors
+//
+
+#define USB_FEATURE_ENDPOINT_STALL 0x0000
+#define USB_FEATURE_REMOTE_WAKEUP 0x0001
+
+//
+// USB DWG defined Feature selectors
+//
+
+#define USB_FEATURE_INTERFACE_POWER_D0 0x0002
+#define USB_FEATURE_INTERFACE_POWER_D1 0x0003
+#define USB_FEATURE_INTERFACE_POWER_D2 0x0004
+#define USB_FEATURE_INTERFACE_POWER_D3 0x0005
+
+#if 0
+typedef struct _USB_DEVICE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT bcdUSB;
+ UCHAR bDeviceClass;
+ UCHAR bDeviceSubClass;
+ UCHAR bDeviceProtocol;
+ UCHAR bMaxPacketSize0;
+ USHORT idVendor;
+ USHORT idProduct;
+ USHORT bcdDevice;
+ UCHAR iManufacturer;
+ UCHAR iProduct;
+ UCHAR iSerialNumber;
+ UCHAR bNumConfigurations;
+} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
+
+typedef struct _USB_ENDPOINT_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bEndpointAddress;
+ UCHAR bmAttributes;
+ USHORT wMaxPacketSize;
+ UCHAR bInterval;
+} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
+
+typedef struct _USB_CONFIGURATION_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT wTotalLength;
+ UCHAR bNumInterfaces;
+ UCHAR bConfigurationValue;
+ UCHAR iConfiguration;
+ UCHAR bmAttributes;
+ UCHAR MaxPower;
+} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
+
+typedef struct _USB_INTERFACE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bInterfaceNumber;
+ UCHAR bAlternateSetting;
+ UCHAR bNumEndpoints;
+ UCHAR bInterfaceClass;
+ UCHAR bInterfaceSubClass;
+ UCHAR bInterfaceProtocol;
+ UCHAR iInterface;
+} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
+
+typedef struct _USB_STRING_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ WCHAR bString[1];
+} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
+
+typedef struct _USB_COMMON_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
+
+#endif
+
+//
+// Standard USB HUB definitions
+//
+// See Chapter 11 USB core specification
+//
+
+typedef struct _USB_HUB_DESCRIPTOR {
+ UCHAR bDescriptorLength; // Length of this descriptor
+ UCHAR bDescriptorType; // Hub configuration type
+ UCHAR bNumberOfPorts; // number of ports on this hub
+ USHORT wHubCharacteristics; // Hub Charateristics
+ UCHAR bPowerOnToPowerGood; // port power on till power good in 2ms
+ UCHAR bHubControlCurrent; // max current in mA
+ //
+ // room for 255 ports power control and removable bitmask
+ UCHAR bRemoveAndPowerMask[64];
+} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
+
+
+//
+// Structures defined by various DWG feature documents
+//
+
+
+//
+// See DWG USB Feature Specification: Interface Power Management
+//
+
+#define USB_SUPPORT_D0_COMMAND 0x01
+#define USB_SUPPORT_D1_COMMAND 0x02
+#define USB_SUPPORT_D2_COMMAND 0x04
+#define USB_SUPPORT_D3_COMMAND 0x08
+
+#define USB_SUPPORT_D1_WAKEUP 0x10
+#define USB_SUPPORT_D2_WAKEUP 0x20
+
+
+typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR SelfPowerConsumedD0[3];
+ UCHAR bPowerSummaryId;
+ UCHAR bBusPowerSavingD1;
+ UCHAR bSelfPowerSavingD1;
+ UCHAR bBusPowerSavingD2;
+ UCHAR bSelfPowerSavingD2;
+ UCHAR bBusPowerSavingD3;
+ UCHAR bSelfPowerSavingD3;
+ USHORT TransitionTimeFromD1;
+ USHORT TransitionTimeFromD2;
+ USHORT TransitionTimeFromD3;
+} USB_CONFIGURATION_POWER_DESCRIPTOR, *PUSB_CONFIGURATION_POWER_DESCRIPTOR;
+
+
+typedef struct _USB_INTERFACE_POWER_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bmCapabilitiesFlags;
+ UCHAR bBusPowerSavingD1;
+ UCHAR bSelfPowerSavingD1;
+ UCHAR bBusPowerSavingD2;
+ UCHAR bSelfPowerSavingD2;
+ UCHAR bBusPowerSavingD3;
+ UCHAR bSelfPowerSavingD3;
+ USHORT TransitionTimeFromD1;
+ USHORT TransitionTimeFromD2;
+ USHORT TransitionTimeFromD3;
+} USB_INTERFACE_POWER_DESCRIPTOR, *PUSB_INTERFACE_POWER_DESCRIPTOR;
+
+
+#include <POPPACK.H>
+
+
+#endif /* __USB100_H__ */
+
diff --git a/include/qhy/usb200.h b/include/qhy/usb200.h
new file mode 100644
index 0000000..06f3bfb
--- /dev/null
+++ b/include/qhy/usb200.h
@@ -0,0 +1,111 @@
+#ifndef __USB200_H__
+#define __USB200_H__
+
+#include "usb100.h"
+
+
+#include <PSHPACK1.H>
+
+typedef enum _USB_DEVICE_SPEED {
+ UsbLowSpeed = 0,
+ UsbFullSpeed,
+ UsbHighSpeed
+} USB_DEVICE_SPEED;
+
+typedef enum _USB_DEVICE_TYPE {
+ Usb11Device = 0,
+ Usb20Device
+} USB_DEVICE_TYPE;
+
+// standard definiions for the port status
+// word of the HUB port register
+
+#define USB_PORT_STATUS_CONNECT 0x0001
+#define USB_PORT_STATUS_ENABLE 0x0002
+#define USB_PORT_STATUS_SUSPEND 0x0004
+#define USB_PORT_STATUS_OVER_CURRENT 0x0008
+#define USB_PORT_STATUS_RESET 0x0010
+#define USB_PORT_STATUS_POWER 0x0100
+#define USB_PORT_STATUS_LOW_SPEED 0x0200
+#define USB_PORT_STATUS_HIGH_SPEED 0x0400
+
+typedef union _BM_REQUEST_TYPE {
+ struct _BM {
+ UCHAR Recipient:2;
+ UCHAR Reserved:3;
+ UCHAR Type:2;
+ UCHAR Dir:1;
+ };
+ UCHAR B;
+} BM_REQUEST_TYPE, *PBM_REQUEST_TYPE;
+
+typedef struct _USB_DEFAULT_PIPE_SETUP_PACKET {
+ BM_REQUEST_TYPE bmRequestType;
+ UCHAR bRequest;
+
+ union _wValue {
+ struct {
+ UCHAR LowByte;
+ UCHAR HiByte;
+ };
+ USHORT W;
+ } wValue;
+
+ union _wIndex {
+ struct {
+ UCHAR LowByte;
+ UCHAR HiByte;
+ };
+ USHORT W;
+ } wIndex;
+ USHORT wLength;
+} USB_DEFAULT_PIPE_SETUP_PACKET, *PUSB_DEFAULT_PIPE_SETUP_PACKET;
+
+// setup packet is eight bytes -- defined by spec
+C_ASSERT(sizeof(USB_DEFAULT_PIPE_SETUP_PACKET) == 8);
+
+
+#define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 0x06
+
+typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT bcdUSB;
+ UCHAR bDeviceClass;
+ UCHAR bDeviceSubClass;
+ UCHAR bDeviceProtocol;
+ UCHAR bMaxPacketSize0;
+ UCHAR bNumConfigurations;
+ UCHAR bReserved;
+} USB_DEVICE_QUALIFIER_DESCRIPTOR, *PUSB_DEVICE_QUALIFIER_DESCRIPTOR;
+
+
+typedef union _USB_HIGH_SPEED_MAXPACKET {
+ struct _MP {
+ USHORT MaxPacket:11; /* 0..10 */
+ USHORT HSmux:2; /* 11..12 */
+ USHORT Reserved:3; /* 13..15 */
+ };
+ USHORT us;
+} USB_HIGH_SPEED_MAXPACKET, *PUSB_HIGH_SPEED_MAXPACKET;
+
+#define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 0x0B
+
+typedef struct _USB_INTERFACE_ASSOCIATION_DESCRIPTOR {
+
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bFirstInterface;
+ UCHAR bInterfaceCount;
+ UCHAR bFunctionClass;
+ UCHAR bFunctionSubClass;
+ UCHAR bFunctionProtocol;
+ UCHAR iFunction;
+
+} USB_INTERFACE_ASSOCIATION_DESCRIPTOR, *PUSB_INTERFACE_ASSOCIATION_DESCRIPTOR;
+
+
+#include <POPPACK.H>
+
+#endif __USB200_H__
+
diff --git a/include/qhy/virtualwdm.h b/include/qhy/virtualwdm.h
new file mode 100644
index 0000000..2e48cf2
--- /dev/null
+++ b/include/qhy/virtualwdm.h
@@ -0,0 +1,52 @@
+/*
+ QHYCCD SDK
+
+ Copyright (c) 2014 QHYCCD.
+ All Rights Reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+ */
+
+#include "qhybase.h"
+#include "stdint.h"
+
+#ifdef WIN32
+
+EXPORTC uint32_t STDCALL VirutalCamInit(qhyccd_handle *h);
+
+EXPORTC uint32_t STDCALL VirualCamRelease();
+
+EXPORTC uint32_t STDCALL VirualCamPlayVideoDevice(int32_t no);
+
+EXPORTC uint32_t STDCALL VirualCamPlayBuffer(uint8_t *buffer,uint32_t width,uint32_t height);
+
+EXPORTC uint32_t STDCALL VirualCamAddOverlay(bool on,uint8_t *buffer,uint32_t width,uint32_t height);
+
+EXPORTC uint32_t STDCALL VirualCamAddText(bool on,char *oltext,char *ftname,int32_t ftsize,int32_t ftstyle,int32_t ftcolor,int32_t bkcolor,int32_t px,int32_t py,int32_t bktype,int32_t whichone);
+
+EXPORTC uint32_t STDCALL VirualCamStopPlay();
+
+EXPORTC uint32_t STDCALL VirualCamChnageDefaultSettings(uint32_t fps,uint8_t videosize);
+
+EXPORTC uint32_t STDCALL VirtualCamGet_CurrentVideoDuration(uint32_t *duration);
+
+EXPORTC uint32_t STDCALL VirtualCamGet_CurrentVideoPosition(uint32_t *position);
+
+EXPORTC uint32_t STDCALL VirtualCamGet_IsPlaying(bool *isplaying);
+
+#endif \ No newline at end of file
diff --git a/include/qhy/vld.h b/include/qhy/vld.h
new file mode 100644
index 0000000..2f574ad
--- /dev/null
+++ b/include/qhy/vld.h
@@ -0,0 +1,346 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Visual Leak Detector - Import Library Header
+// Copyright (c) 2005-2014 VLD Team
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// See COPYING.txt for the full terms of the GNU Lesser General Public License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#include "vld_def.h"
+
+typedef int VLD_BOOL;
+typedef unsigned int VLD_UINT;
+typedef size_t VLD_SIZET;
+typedef void* VLD_HMODULE;
+
+#if defined _DEBUG || defined VLD_FORCE_ENABLE
+
+#pragma comment(lib, "vld.lib")
+
+// Force a symbolic reference to the global VisualLeakDetector class object from
+// the DLL. This ensures that the DLL is loaded and linked with the program,
+// even if no code otherwise imports any of the DLL's exports.
+#pragma comment(linker, "/include:__imp_?g_vld@@3VVisualLeakDetector@@A")
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Visual Leak Detector APIs
+//
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// VLDDisable - Disables Visual Leak Detector's memory leak detection at
+// runtime. If memory leak detection is already disabled, then calling this
+// function has no effect.
+//
+// Note: In multithreaded programs, this function operates on a per-thread
+// basis. In other words, if you call this function from one thread, then
+// memory leak detection is only disabled for that thread. If memory leak
+// detection is enabled for other threads, then it will remain enabled for
+// those other threads. It was designed to work this way to insulate you,
+// the programmer, from having to ensure thread synchronization when calling
+// VLDEnable() and VLDDisable(). Without this, calling these two functions
+// unsynchronized could result in unpredictable and unintended behavior.
+// But this also means that if you want to disable memory leak detection
+// process-wide, then you need to call this function from every thread in
+// the process.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDDisable ();
+
+// VLDEnable - Enables Visual Leak Detector's memory leak detection at runtime.
+// If memory leak detection is already enabled, which it is by default, then
+// calling this function has no effect.
+//
+// Note: In multithreaded programs, this function operates on a per-thread
+// basis. In other words, if you call this function from one thread, then
+// memory leak detection is only enabled for that thread. If memory leak
+// detection is disabled for other threads, then it will remain disabled for
+// those other threads. It was designed to work this way to insulate you,
+// the programmer, from having to ensure thread synchronization when calling
+// VLDEnable() and VLDDisable(). Without this, calling these two functions
+// unsynchronized could result in unpredictable and unintended behavior.
+// But this also means that if you want to enable memory leak detection
+// process-wide, then you need to call this function from every thread in
+// the process.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDEnable ();
+
+// VLDRestore - Restore Visual Leak Detector's previous state.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDRestore ();
+
+// VLDGlobalDisable - Disables Visual Leak Detector's memory leak detection at
+// runtime in all threads. If memory leak detection is already disabled,
+// then calling this function has no effect.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDGlobalDisable ();
+
+// VLDGlobalEnable - Enables Visual Leak Detector's memory leak detection
+// at runtime in all threads. If memory leak detection is already enabled,
+// which it is by default, then calling this function has no effect.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDGlobalEnable ();
+
+// VLDReportLeaks - Report leaks up to the execution point.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) VLD_UINT VLDReportLeaks ();
+
+// VLDReportThreadLeaks - Report thread leaks up to the execution point.
+//
+// threadId: thread Id.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) VLD_UINT VLDReportThreadLeaks (VLD_UINT threadId);
+
+// VLDGetLeaksCount - Return memory leaks count to the execution point.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) VLD_UINT VLDGetLeaksCount ();
+
+// VLDGetThreadLeaksCount - Return thread memory leaks count to the execution point.
+//
+// threadId: thread Id.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) VLD_UINT VLDGetThreadLeaksCount (VLD_UINT threadId);
+
+// VLDMarkAllLeaksAsReported - Mark all leaks as reported.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDMarkAllLeaksAsReported ();
+
+// VLDMarkThreadLeaksAsReported - Mark thread leaks as reported.
+//
+// threadId: thread Id.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDMarkThreadLeaksAsReported (VLD_UINT threadId);
+
+
+// VLDRefreshModules - Look for recently loaded DLLs and patch them if necessary.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDRefreshModules();
+
+
+// VLDEnableModule - Enable Memory leak checking on the specified module.
+//
+// module: module handle.
+//
+// Return Value:
+//
+// None.
+//
+
+__declspec(dllimport) void VLDEnableModule(VLD_HMODULE module);
+
+
+// VLDDisableModule - Disable Memory leak checking on the specified module.
+//
+// module: module handle.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDDisableModule(VLD_HMODULE module);
+
+// VLDGetOptions - Return all current options.
+//
+// Return Value:
+//
+// Mask of current options.
+//
+__declspec(dllimport) VLD_UINT VLDGetOptions();
+
+// VLDGetReportFilename - Return current report filename.
+//
+// filename: current report filename (max characters - MAX_PATH).
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDGetReportFilename(wchar_t *filename);
+
+// VLDSetOptions - Update the report options via function call rather than INI file.
+//
+// option_mask: Only the following flags are checked
+// VLD_OPT_AGGREGATE_DUPLICATES
+// VLD_OPT_MODULE_LIST_INCLUDE
+// VLD_OPT_SAFE_STACK_WALK
+// VLD_OPT_SLOW_DEBUGGER_DUMP
+// VLD_OPT_TRACE_INTERNAL_FRAMES
+// VLD_OPT_START_DISABLED
+// VLD_OPT_SKIP_HEAPFREE_LEAKS
+// VLD_OPT_VALIDATE_HEAPFREE
+//
+// maxDataDump: maximum number of user-data bytes to dump for each leaked block.
+//
+// maxTraceFrames: maximum number of frames per stack trace for each leaked block.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDSetOptions(VLD_UINT option_mask, VLD_SIZET maxDataDump, VLD_UINT maxTraceFrames);
+
+// VLDSetModulesList - Set list of modules included/excluded in leak detection
+// depending on parameter "includeModules".
+//
+// modules: list of modules to be forcefully included/excluded in leak detection.
+//
+// includeModules: include or exclude that modules.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDSetModulesList(const wchar_t *modules, VLD_BOOL includeModules);
+
+// VLDGetModulesList - Return current list of included/excluded modules
+// depending on flag VLD_OPT_TRACE_INTERNAL_FRAMES.
+//
+// modules: destination string for list of included/excluded modules (maximum length 512 characters).
+//
+// size: maximum string size.
+//
+// Return Value:
+//
+// VLD_BOOL: TRUE if include modules, otherwise FALSE.
+//
+__declspec(dllimport) VLD_BOOL VLDGetModulesList(wchar_t *modules, VLD_UINT size);
+
+// VLDSetReportOptions - Update the report options via function call rather than INI file.
+//
+// Only the following flags are checked
+// VLD_OPT_REPORT_TO_DEBUGGER
+// VLD_OPT_REPORT_TO_FILE
+// VLD_OPT_REPORT_TO_STDOUT
+// VLD_OPT_UNICODE_REPORT
+//
+// filename is optional and can be NULL.
+//
+// Return Value:
+//
+// None.
+//
+__declspec(dllimport) void VLDSetReportOptions(VLD_UINT option_mask, const wchar_t *filename);
+
+// VLDSetReportHook - Installs or uninstalls a client-defined reporting function by hooking it
+// into the C run-time debug reporting process (debug version only).
+//
+// mode: The action to take: VLD_RPTHOOK_INSTALL or VLD_RPTHOOK_REMOVE.
+//
+// pfnNewHook: Report hook to install or remove.
+//
+// Return Value:
+//
+// int: 0 if success.
+//
+__declspec(dllimport) int VLDSetReportHook(int mode, VLD_REPORT_HOOK pfnNewHook);
+
+// VLDResolveCallstacks - Performs symbol resolution for all saved extent CallStack's that have
+// been tracked by Visual Leak Detector. This function is necessary for applications that
+// dynamically load and unload modules, and through which memory leaks might be included.
+// If this is NOT called, stack traces may have stack frames with no symbol information. This
+// happens because the symbol API's cannot look up symbols for a binary / module that has been unloaded
+// from the process.
+//
+// Return Value:
+//
+// int: 0 if successfully resolved all callstacks.
+//
+__declspec(dllexport) int VLDResolveCallstacks();
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#else // !_DEBUG
+
+#define VLDEnable()
+#define VLDDisable()
+#define VLDRestore()
+#define VLDGlobalDisable()
+#define VLDGlobalEnable()
+#define VLDReportLeaks() (0)
+#define VLDReportThreadLeaks() (0)
+#define VLDGetLeaksCount() (0)
+#define VLDGetThreadLeaksCount() (0)
+#define VLDMarkAllLeaksAsReported()
+#define VLDMarkThreadLeaksAsReported(a)
+#define VLDRefreshModules()
+#define VLDEnableModule(a)
+#define VLDDisableModule(b)
+#define VLDGetOptions() (0)
+#define VLDGetReportFilename(a)
+#define VLDSetOptions(a, b, c)
+#define VLDSetReportHook(a, b)
+#define VLDSetModulesList(a)
+#define VLDGetModulesList(a, b) (FALSE)
+#define VLDSetReportOptions(a, b)
+#define VLDResolveCallstacks() (0)
+
+#endif // _DEBUG
diff --git a/include/qhy/vld_def.h b/include/qhy/vld_def.h
new file mode 100644
index 0000000..a8d0a67
--- /dev/null
+++ b/include/qhy/vld_def.h
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Visual Leak Detector - Import Library Header
+// Copyright (c) 2005-2014 VLD Team
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// See COPYING.txt for the full terms of the GNU Lesser General Public License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#include <wchar.h>
+
+#define VLD_OPT_AGGREGATE_DUPLICATES 0x0001 // If set, aggregate duplicate leaks in the leak report.
+#define VLD_OPT_MODULE_LIST_INCLUDE 0x0002 // If set, modules in the module list are included, all others are excluded.
+#define VLD_OPT_REPORT_TO_DEBUGGER 0x0004 // If set, the memory leak report is sent to the debugger.
+#define VLD_OPT_REPORT_TO_FILE 0x0008 // If set, the memory leak report is sent to a file.
+#define VLD_OPT_SAFE_STACK_WALK 0x0010 // If set, the stack is walked using the "safe" method (StackWalk64).
+#define VLD_OPT_SELF_TEST 0x0020 // If set, perform a self-test to verify memory leak self-checking.
+#define VLD_OPT_SLOW_DEBUGGER_DUMP 0x0040 // If set, inserts a slight delay between sending output to the debugger.
+#define VLD_OPT_START_DISABLED 0x0080 // If set, memory leak detection will initially disabled.
+#define VLD_OPT_TRACE_INTERNAL_FRAMES 0x0100 // If set, include useless frames (e.g. internal to VLD) in call stacks.
+#define VLD_OPT_UNICODE_REPORT 0x0200 // If set, the leak report will be encoded UTF-16 instead of ASCII.
+#define VLD_OPT_VLDOFF 0x0400 // If set, VLD will be completely deactivated. It will not attach to any modules.
+#define VLD_OPT_REPORT_TO_STDOUT 0x0800 // If set, the memory leak report is sent to stdout.
+#define VLD_OPT_SKIP_HEAPFREE_LEAKS 0x1000 // If set, VLD skip HeapFree memory leaks.
+#define VLD_OPT_VALIDATE_HEAPFREE 0x2000 // If set, VLD verifies and reports heap consistency for HeapFree calls.
+#define VLD_OPT_SKIP_CRTSTARTUP_LEAKS 0x4000 // If set, VLD skip crt srtartup memory leaks.
+
+#define VLD_RPTHOOK_INSTALL 0
+#define VLD_RPTHOOK_REMOVE 1
+
+typedef int (__cdecl * VLD_REPORT_HOOK)(int reportType, wchar_t *message, int *returnValue);
diff --git a/include/qhy/winusb.h b/include/qhy/winusb.h
new file mode 100644
index 0000000..0c8db70
--- /dev/null
+++ b/include/qhy/winusb.h
@@ -0,0 +1,253 @@
+/*++
+
+Copyright (c) 2002 Microsoft Corporation
+
+Module Name:
+
+ wusb.h
+
+Abstract:
+
+ Public interface to winusb.dll
+
+Environment:
+
+ Kernel Mode Only
+
+Notes:
+
+ THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+ PURPOSE.
+
+ Copyright (c) 2001 Microsoft Corporation. All Rights Reserved.
+
+
+Revision History:
+
+ 11/19/2002 : created
+
+Authors:
+
+--*/
+
+#ifndef __WUSB_H__
+#define __WUSB_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if(NTDDI_VERSION >= NTDDI_WINXP)
+
+#include "winusbio.h"
+
+
+typedef PVOID WINUSB_INTERFACE_HANDLE, *PWINUSB_INTERFACE_HANDLE;
+
+
+#pragma pack(1)
+
+typedef struct _WINUSB_SETUP_PACKET {
+ UCHAR RequestType;
+ UCHAR Request;
+ USHORT Value;
+ USHORT Index;
+ USHORT Length;
+} WINUSB_SETUP_PACKET, *PWINUSB_SETUP_PACKET;
+
+#pragma pack()
+
+
+
+BOOL __stdcall
+WinUsb_Initialize(
+ __in HANDLE DeviceHandle,
+ __out PWINUSB_INTERFACE_HANDLE InterfaceHandle
+ );
+
+
+BOOL __stdcall
+WinUsb_Free(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle
+ );
+
+
+BOOL __stdcall
+WinUsb_GetAssociatedInterface(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR AssociatedInterfaceIndex,
+ __out PWINUSB_INTERFACE_HANDLE AssociatedInterfaceHandle
+ );
+
+
+
+BOOL __stdcall
+WinUsb_GetDescriptor(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR DescriptorType,
+ __in UCHAR Index,
+ __in USHORT LanguageID,
+ __out_bcount_part_opt(BufferLength, *LengthTransferred) PUCHAR Buffer,
+ __in ULONG BufferLength,
+ __out PULONG LengthTransferred
+ );
+
+BOOL __stdcall
+WinUsb_QueryInterfaceSettings(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR AlternateInterfaceNumber,
+ __out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor
+ );
+
+BOOL __stdcall
+WinUsb_QueryDeviceInformation(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in ULONG InformationType,
+ __inout PULONG BufferLength,
+ __out_bcount(*BufferLength) PVOID Buffer
+ );
+
+BOOL __stdcall
+WinUsb_SetCurrentAlternateSetting(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR SettingNumber
+ );
+
+BOOL __stdcall
+WinUsb_GetCurrentAlternateSetting(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __out PUCHAR SettingNumber
+ );
+
+
+BOOL __stdcall
+WinUsb_QueryPipe(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR AlternateInterfaceNumber,
+ __in UCHAR PipeIndex,
+ __out PWINUSB_PIPE_INFORMATION PipeInformation
+ );
+
+
+BOOL __stdcall
+WinUsb_SetPipePolicy(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR PipeID,
+ __in ULONG PolicyType,
+ __in ULONG ValueLength,
+ __in_bcount(ValueLength) PVOID Value
+ );
+
+BOOL __stdcall
+WinUsb_GetPipePolicy(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR PipeID,
+ __in ULONG PolicyType,
+ __inout PULONG ValueLength,
+ __out_bcount(*ValueLength) PVOID Value
+ );
+
+BOOL __stdcall
+WinUsb_ReadPipe(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR PipeID,
+ __out_bcount_part_opt(BufferLength,*LengthTransferred) PUCHAR Buffer,
+ __in ULONG BufferLength,
+ __out_opt PULONG LengthTransferred,
+ __in_opt LPOVERLAPPED Overlapped
+ );
+
+BOOL __stdcall
+WinUsb_WritePipe(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR PipeID,
+ __in_bcount(BufferLength) PUCHAR Buffer,
+ __in ULONG BufferLength,
+ __out_opt PULONG LengthTransferred,
+ __in_opt LPOVERLAPPED Overlapped
+ );
+
+BOOL __stdcall
+WinUsb_ControlTransfer(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in WINUSB_SETUP_PACKET SetupPacket,
+ __out_bcount_part_opt(BufferLength, *LengthTransferred) PUCHAR Buffer,
+ __in ULONG BufferLength,
+ __out_opt PULONG LengthTransferred,
+ __in_opt LPOVERLAPPED Overlapped
+ );
+
+BOOL __stdcall
+WinUsb_ResetPipe(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR PipeID
+ );
+
+BOOL __stdcall
+WinUsb_AbortPipe(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR PipeID
+ );
+
+BOOL __stdcall
+WinUsb_FlushPipe(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in UCHAR PipeID
+ );
+
+BOOL __stdcall
+WinUsb_SetPowerPolicy(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in ULONG PolicyType,
+ __in ULONG ValueLength,
+ __in_bcount(ValueLength) PVOID Value
+ );
+
+BOOL __stdcall
+WinUsb_GetPowerPolicy(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in ULONG PolicyType,
+ __inout PULONG ValueLength,
+ __out_bcount(*ValueLength) PVOID Value
+ );
+
+BOOL __stdcall
+WinUsb_GetOverlappedResult(
+ __in WINUSB_INTERFACE_HANDLE InterfaceHandle,
+ __in LPOVERLAPPED lpOverlapped,
+ __out LPDWORD lpNumberOfBytesTransferred,
+ __in BOOL bWait
+ );
+
+
+PUSB_INTERFACE_DESCRIPTOR __stdcall
+WinUsb_ParseConfigurationDescriptor(
+ __in PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+ __in PVOID StartPosition,
+ __in LONG InterfaceNumber,
+ __in LONG AlternateSetting,
+ __in LONG InterfaceClass,
+ __in LONG InterfaceSubClass,
+ __in LONG InterfaceProtocol
+ );
+
+PUSB_COMMON_DESCRIPTOR __stdcall
+WinUsb_ParseDescriptors(
+ __in_bcount(TotalLength) PVOID DescriptorBuffer,
+ __in ULONG TotalLength,
+ __in PVOID StartPosition,
+ __in LONG DescriptorType
+ );
+
+
+#endif // (NTDDI_VERSION >= NTDDI_WINXP)
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif //__WUSB_H__
+
diff --git a/include/qhy/winusbio.h b/include/qhy/winusbio.h
new file mode 100644
index 0000000..6c10fc4
--- /dev/null
+++ b/include/qhy/winusbio.h
@@ -0,0 +1,85 @@
+/***************************************************************************
+
+Copyright (c) 2002 Microsoft Corporation
+
+Module Name:
+
+ wusbio.h
+
+Abstract:
+
+ Public header for WINUSB
+
+Environment:
+
+ User and Kernel Mode
+
+Notes:
+
+ THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+ PURPOSE.
+
+ Copyright (c) 2001 Microsoft Corporation. All Rights Reserved.
+
+
+Revision History:
+
+ 11/12/2002 : created
+
+
+****************************************************************************/
+
+#ifndef __WUSBIO_H__
+#define __WUSBIO_H__
+
+#if(NTDDI_VERSION >= NTDDI_WINXP)
+
+#include "usb.h"
+
+// Pipe policy types
+#define SHORT_PACKET_TERMINATE 0x01
+#define AUTO_CLEAR_STALL 0x02
+#define PIPE_TRANSFER_TIMEOUT 0x03
+#define IGNORE_SHORT_PACKETS 0x04
+#define ALLOW_PARTIAL_READS 0x05
+#define AUTO_FLUSH 0x06
+#define RAW_IO 0x07
+#define MAXIMUM_TRANSFER_SIZE 0x08
+#define RESET_PIPE_ON_RESUME 0x09
+
+// Power policy types
+//
+// Add 0x80 for Power policy types in order to prevent overlap with
+// Pipe policy types to prevent "accidentally" setting the wrong value for the
+// wrong type.
+//
+#define AUTO_SUSPEND 0x81
+#define SUSPEND_DELAY 0x83
+
+// Device Information types
+#define DEVICE_SPEED 0x01
+
+// Device Speeds
+#define LowSpeed 0x01
+#define FullSpeed 0x02
+#define HighSpeed 0x03
+
+// {DA812BFF-12C3-46a2-8E2B-DBD3B7834C43}
+#include <initguid.h>
+DEFINE_GUID(WinUSB_TestGuid, 0xda812bff, 0x12c3, 0x46a2, 0x8e, 0x2b, 0xdb, 0xd3, 0xb7, 0x83, 0x4c, 0x43);
+
+
+typedef struct _WINUSB_PIPE_INFORMATION {
+ USBD_PIPE_TYPE PipeType;
+ UCHAR PipeId;
+ USHORT MaximumPacketSize;
+ UCHAR Interval;
+} WINUSB_PIPE_INFORMATION, *PWINUSB_PIPE_INFORMATION;
+
+#endif // (NTDDI_VERSION >= NTDDI_WINXP)
+
+#endif // __WUSBIO_H__
+
+