diff options
| author | iximeow <me@iximeow.net> | 2019-03-14 15:51:15 -0700 | 
|---|---|---|
| committer | iximeow <me@iximeow.net> | 2019-03-14 15:51:39 -0700 | 
| commit | 051a2e73d031475e08e37953007fbb7869515fb6 (patch) | |
| tree | 7fa9ecddf5cba16c5f763a5ec1124933b5b9f962 /include/asi | |
add ASI controls
Diffstat (limited to 'include/asi')
| -rwxr-xr-x | include/asi/ASICamera2.h | 821 | 
1 files changed, 821 insertions, 0 deletions
| diff --git a/include/asi/ASICamera2.h b/include/asi/ASICamera2.h new file mode 100755 index 0000000..93a873c --- /dev/null +++ b/include/asi/ASICamera2.h @@ -0,0 +1,821 @@ +/**************************************************
 +this is the second version of release ASI Camera ASIs
 +any question feel free contact us:sam.wen@zwoptical.com
 +
 +here is the suggested procedure to operate the camera.
 +
 +--> ASIGetNumOfConnectedCameras
 +----> ASIGetCameraProperty for each camera
 +
 +--> ASIOpenCamera
 +--> ASIInitCamera
 +--> ASIGetNumOfControls
 +----> ASIGetControlCaps for each contronl and set or get value from them
 +
 +--> ASISetROIFormat
 +
 +--> ASISetCameraMode
 +
 +--> ASIStartVideoCapture
 +
 +//this is recommended to do in another thread
 +while(1)
 +{
 +	ASIGetVideoData
 +	...
 +}
 +
 +
 +***************************************************/
 +#ifndef ASICAMERA2_H
 +#define ASICAMERA2_H
 +
 +
 +
 +
 +#ifdef _WINDOWS
 +	#define ASICAMERA_API __declspec(dllexport)
 +#else
 +	#define ASICAMERA_API 
 +#endif
 +
 +#define ASICAMERA_ID_MAX 128
 +
 +typedef enum ASI_BAYER_PATTERN{
 +	ASI_BAYER_RG=0,
 +	ASI_BAYER_BG,
 +	ASI_BAYER_GR,
 +	ASI_BAYER_GB
 +}ASI_BAYER_PATTERN;
 +
 +typedef enum ASI_IMG_TYPE{ //Supported Video Format 
 +	ASI_IMG_RAW8 = 0,
 +	ASI_IMG_RGB24,
 +	ASI_IMG_RAW16,
 +	ASI_IMG_Y8,
 +	ASI_IMG_END = -1
 +
 +}ASI_IMG_TYPE;
 +
 +typedef enum ASI_GUIDE_DIRECTION{ //Guider Direction
 +	ASI_GUIDE_NORTH=0,
 +	ASI_GUIDE_SOUTH,
 +	ASI_GUIDE_EAST,
 +	ASI_GUIDE_WEST
 +}ASI_GUIDE_DIRECTION;
 +
 +
 +
 +typedef enum ASI_FLIP_STATUS {
 +	ASI_FLIP_NONE = 0,//: original
 +	ASI_FLIP_HORIZ,//: horizontal flip
 +	ASI_FLIP_VERT,// vertical flip
 +	ASI_FLIP_BOTH,//:both horizontal and vertical flip
 +
 +}ASI_FLIP_STATUS;
 +
 +typedef enum ASI_CAMERA_MODE {
 +	ASI_MODE_NORMAL = 0,
 +	ASI_MODE_TRIG_SOFT_EDGE,
 +	ASI_MODE_TRIG_RISE_EDGE,
 +	ASI_MODE_TRIG_FALL_EDGE,
 +	ASI_MODE_TRIG_SOFT_LEVEL,
 +	ASI_MODE_TRIG_HIGH_LEVEL,
 +	ASI_MODE_TRIG_LOW_LEVEL,
 +	ASI_MODE_END = -1
 +}ASI_CAMERA_MODE;
 +
 +typedef enum ASI_ERROR_CODE{ //ASI ERROR CODE
 +	ASI_SUCCESS=0,
 +	ASI_ERROR_INVALID_INDEX, //no camera connected or index value out of boundary
 +	ASI_ERROR_INVALID_ID, //invalid ID
 +	ASI_ERROR_INVALID_CONTROL_TYPE, //invalid control type
 +	ASI_ERROR_CAMERA_CLOSED, //camera didn't open
 +	ASI_ERROR_CAMERA_REMOVED, //failed to find the camera, maybe the camera has been removed
 +	ASI_ERROR_INVALID_PATH, //cannot find the path of the file
 +	ASI_ERROR_INVALID_FILEFORMAT, 
 +	ASI_ERROR_INVALID_SIZE, //wrong video format size
 +	ASI_ERROR_INVALID_IMGTYPE, //unsupported image formate
 +	ASI_ERROR_OUTOF_BOUNDARY, //the startpos is out of boundary
 +	ASI_ERROR_TIMEOUT, //timeout
 +	ASI_ERROR_INVALID_SEQUENCE,//stop capture first
 +	ASI_ERROR_BUFFER_TOO_SMALL, //buffer size is not big enough
 +	ASI_ERROR_VIDEO_MODE_ACTIVE,
 +	ASI_ERROR_EXPOSURE_IN_PROGRESS,
 +	ASI_ERROR_GENERAL_ERROR,//general error, eg: value is out of valid range
 +	ASI_ERROR_INVALID_MODE,//the current mode is wrong
 +	ASI_ERROR_END
 +}ASI_ERROR_CODE;
 +
 +typedef enum ASI_BOOL{
 +	ASI_FALSE =0,
 +	ASI_TRUE
 +}ASI_BOOL;
 +
 +typedef struct _ASI_CAMERA_INFO
 +{
 +	char Name[64]; //the name of the camera, you can display this to the UI
 +	int CameraID; //this is used to control everything of the camera in other functions.Start from 0.
 +	long MaxHeight; //the max height of the camera
 +	long MaxWidth;	//the max width of the camera
 +
 +	ASI_BOOL IsColorCam; 
 +	ASI_BAYER_PATTERN BayerPattern;
 +
 +	int SupportedBins[16]; //1 means bin1 which is supported by every camera, 2 means bin 2 etc.. 0 is the end of supported binning method
 +	ASI_IMG_TYPE SupportedVideoFormat[8]; //this array will content with the support output format type.IMG_END is the end of supported video format
 +
 +	double PixelSize; //the pixel size of the camera, unit is um. such like 5.6um
 +	ASI_BOOL MechanicalShutter;
 +	ASI_BOOL ST4Port;
 +	ASI_BOOL IsCoolerCam;
 +	ASI_BOOL IsUSB3Host;
 +	ASI_BOOL IsUSB3Camera;
 +	float ElecPerADU;
 +	int BitDepth;
 +	ASI_BOOL IsTriggerCam;
 +
 +	char Unused[16];
 +} ASI_CAMERA_INFO;
 +
 +#define ASI_BRIGHTNESS ASI_OFFSET
 +#define ASI_AUTO_MAX_BRIGHTNESS ASI_AUTO_TARGET_BRIGHTNESS
 +
 +typedef enum ASI_CONTROL_TYPE{ //Control type//
 +	ASI_GAIN = 0,
 +	ASI_EXPOSURE,
 +	ASI_GAMMA,
 +	ASI_WB_R,
 +	ASI_WB_B,
 +	ASI_OFFSET,
 +	ASI_BANDWIDTHOVERLOAD,	
 +	ASI_OVERCLOCK,
 +	ASI_TEMPERATURE,// return 10*temperature
 +	ASI_FLIP,
 +	ASI_AUTO_MAX_GAIN,
 +	ASI_AUTO_MAX_EXP,//micro second
 +	ASI_AUTO_TARGET_BRIGHTNESS,//target brightness
 +	ASI_HARDWARE_BIN,
 +	ASI_HIGH_SPEED_MODE,
 +	ASI_COOLER_POWER_PERC,
 +	ASI_TARGET_TEMP,// not need *10
 +	ASI_COOLER_ON,
 +	ASI_MONO_BIN,//lead to less grid at software bin mode for color camera
 +	ASI_FAN_ON,
 +	ASI_PATTERN_ADJUST,
 +	ASI_ANTI_DEW_HEATER,
 +
 +}ASI_CONTROL_TYPE;
 +
 +typedef struct _ASI_CONTROL_CAPS
 +{
 +	char Name[64]; //the name of the Control like Exposure, Gain etc..
 +	char Description[128]; //description of this control
 +	long MaxValue;
 +	long MinValue;
 +	long DefaultValue;
 +	ASI_BOOL IsAutoSupported; //support auto set 1, don't support 0
 +	ASI_BOOL IsWritable; //some control like temperature can only be read by some cameras 
 +	ASI_CONTROL_TYPE ControlType;//this is used to get value and set value of the control
 +	char Unused[32];
 +} ASI_CONTROL_CAPS;
 +
 +typedef enum ASI_EXPOSURE_STATUS {
 +	ASI_EXP_IDLE = 0,//: idle states, you can start exposure now
 +	ASI_EXP_WORKING,//: exposing
 +	ASI_EXP_SUCCESS,//: exposure finished and waiting for download
 +	ASI_EXP_FAILED,//:exposure failed, you need to start exposure again
 +
 +}ASI_EXPOSURE_STATUS;
 +
 +typedef struct _ASI_ID{
 +	unsigned char id[8];
 +}ASI_ID;
 +
 +typedef struct _ASI_SUPPORTED_MODE{
 +	ASI_CAMERA_MODE SupportedCameraMode[16];// this array will content with the support camera mode type.ASI_MODE_END is the end of supported camera mode
 +}ASI_SUPPORTED_MODE;
 +
 +#ifndef __cplusplus
 +#define ASI_CONTROL_TYPE int
 +#define ASI_BOOL int
 +#define ASI_ERROR_CODE int
 +#define ASI_FLIP_STATUS int
 +#define ASI_IMG_TYPE int
 +#define ASI_GUIDE_DIRECTION int
 +#define ASI_BAYER_PATTERN int
 +#endif
 +
 +#ifdef __cplusplus
 +extern "C" {
 +#endif
 +
 +/***************************************************************************
 +Descriptions£º 
 +this should be the first API to be called
 +get number of connected ASI cameras,
 +
 +Paras£º 
 +
 +return£ºnumber of connected ASI cameras. 1 means 1 camera connected.
 +***************************************************************************/
 +ASICAMERA_API  int ASIGetNumOfConnectedCameras(); 
 +
 +/***************************************************************************
 +Descriptions:
 +get the product ID of each supported camera, at first set pPIDs as 0 and get length and then malloc a buffer to contain the PIDs
 +
 +Paras:
 +int* pPIDs: pointer to array of PIDs
 +
 +Return: length of the array.
 +***************************************************************************/
 +ASICAMERA_API int ASIGetProductIDs(int* pPIDs);
 +
 +/***************************************************************************
 +Descriptions£º
 +get the property of the connected cameras, you can do this without open the camera.
 +here is the sample code:
 +
 +int iNumofConnectCameras = ASIGetNumOfConnectedCameras();
 +ASI_CAMERA_INFO **ppASICameraInfo = (ASI_CAMERA_INFO **)malloc(sizeof(ASI_CAMERA_INFO *)*iNumofConnectCameras);
 +for(int i = 0; i < iNumofConnectCameras; i++)
 +{
 +ppASICameraInfo[i] = (ASI_CAMERA_INFO *)malloc(sizeof(ASI_CAMERA_INFO ));
 +ASIGetCameraProperty(ppASICameraInfo[i], i);
 +}
 +				
 +Paras£º		
 +	ASI_CAMERA_INFO *pASICameraInfo: Pointer to structure containing the property of camera
 +									user need to malloc the buffer
 +	int iCameraIndex: 0 means the first connect camera, 1 means the second connect camera
 +
 +return£º
 +	ASI_SUCCESS: Operation is successful
 +	ASI_ERROR_INVALID_INDEX  :no camera connected or index value out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIGetCameraProperty(ASI_CAMERA_INFO *pASICameraInfo, int iCameraIndex);
 +
 +/***************************************************************************
 +Descriptions£º
 +	open the camera before any operation to the camera, this will not affect the camera which is capturing
 +	All APIs below need to open the camera at first.
 +
 +Paras£º		
 +	int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +
 +return£º
 +ASI_SUCCESS: Operation is successful
 +ASI_ERROR_INVALID_ID  : no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_CAMERA_REMOVED: failed to find the camera, maybe camera has been removed
 +
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIOpenCamera(int iCameraID);
 +
 +/***************************************************************************
 +Descriptions
 +
 +	Initialise the camera after open, this function may take some while, this will affect the camera which is capturing
 +
 +Paras£º		
 +	int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIInitCamera(int iCameraID);
 +
 +/***************************************************************************
 +Descriptions£º
 +you need to close the camera to free all the resource
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +
 +return£º
 +ASI_SUCCESS :it will return success even the camera already closed
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASICloseCamera(int iCameraID);
 +
 +
 +
 +
 +/***************************************************************************
 +Descriptions£º
 +Get number of controls available for this camera. the camera need be opened at first.
 +
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int * piNumberOfControls: pointer to an int to save the number of controls
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIGetNumOfControls(int iCameraID, int * piNumberOfControls);
 +
 +
 +/***************************************************************************
 +Descriptions£º
 +Get controls property available for this camera. the camera need be opened at first.
 +user need to malloc and maintain the buffer.
 +
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int iControlIndex: index of control, NOT control type
 +ASI_CONTROL_CAPS * pControlCaps: Pointer to structure containing the property of the control
 +user need to malloc the buffer
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIGetControlCaps(int iCameraID, int iControlIndex, ASI_CONTROL_CAPS * pControlCaps);
 +
 +/***************************************************************************
 +Descriptions£º
 +Get controls property value and auto value
 +note:the value of the temperature is the float value * 10 to convert it to long type, control name is "Temperature"
 +because long is the only type for control(except cooler's target temperature, because it is an integer)
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int ControlType: this is get from control property use the API ASIGetControlCaps
 +long *plValue: pointer to the value you want to save the value get from control
 +ASI_BOOL *pbAuto: pointer to the ASI_BOOL type
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_INVALID_CONTROL_TYPE, //invalid Control type
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIGetControlValue(int  iCameraID, ASI_CONTROL_TYPE  ControlType, long *plValue, ASI_BOOL *pbAuto);
 +
 +/***************************************************************************
 +Descriptions£º
 +Set controls property value and auto value
 +it will return success and set the max value or min value if the value is beyond the boundary
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int ControlType: this is get from control property use the API ASIGetControlCaps
 +long lValue: the value set to the control
 +ASI_BOOL bAuto: set the control auto
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_INVALID_CONTROL_TYPE, //invalid Control type
 +ASI_ERROR_GENERAL_ERROR,//general error, eg: value is out of valid range; operate to camera hareware failed
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASISetControlValue(int  iCameraID, ASI_CONTROL_TYPE  ControlType, long lValue, ASI_BOOL bAuto);
 +
 + 
 +
 +/***************************************************************************
 +Descriptions£º
 +set the ROI area before capture.
 +you must stop capture before call it.
 +the width and height is the value after binning.
 +ie. you need to set width to 640 and height to 480 if you want to run at 640X480@BIN2
 +ASI120's data size must be times of 1024 which means width*height%1024=0
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int iWidth,  the width of the ROI area. Make sure iWidth%8 = 0. 
 +int iHeight,  the height of the ROI area. Make sure iHeight%2 = 0, 
 +further, for USB2.0 camera ASI120, please make sure that iWidth*iHeight%1024=0. 
 +int iBin,   binning method. bin1=1, bin2=2
 +ASI_IMG_TYPE Img_type: the output format you want 
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_INVALID_SIZE, //wrong video format size
 +ASI_ERROR_INVALID_IMGTYPE, //unsupported image format, make sure iWidth and iHeight and binning is set correct
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASISetROIFormat(int iCameraID, int iWidth, int iHeight,  int iBin, ASI_IMG_TYPE Img_type); 
 +
 +
 +/***************************************************************************
 +Descriptions£º
 +Get the current ROI area setting .
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int *piWidth,  pointer to the width of the ROI area   
 +int *piHeight, pointer to the height of the ROI area.
 +int *piBin,   pointer to binning method. bin1=1, bin2=2
 +ASI_IMG_TYPE *pImg_type: pointer to the output format
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIGetROIFormat(int iCameraID, int *piWidth, int *piHeight,  int *piBin, ASI_IMG_TYPE *pImg_type); 
 +
 +
 +/***************************************************************************
 +Descriptions£º
 +Set the start position of the ROI area.
 +you can call this API to move the ROI area when video is streaming
 +the camera will set the ROI area to the center of the full image as default
 +at bin2 or bin3 mode, the position is relative to the image after binning
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int iStartX, pointer to the start X
 +int iStartY  pointer to the start Y
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_OUTOF_BOUNDARY: the start x and start y make the image out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASISetStartPos(int iCameraID, int iStartX, int iStartY); 
 +
 +/***************************************************************************
 +Descriptions£º
 +Get the start position of current ROI area .
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int *piStartX, pointer to the start X
 +int *piStartY  pointer to the start Y
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIGetStartPos(int iCameraID, int *piStartX, int *piStartY); 
 +
 +/***************************************************************************
 +Descriptions£º
 +Get the droped frames .
 +drop frames happen when USB is traffic or harddisk write speed is slow
 +it will reset to 0 after stop capture
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +int *piDropFrames pointer to drop frames
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIGetDroppedFrames(int iCameraID,int *piDropFrames); 
 +
 +/***************************************************************************
 +Descriptions£º
 +provide a dark file's path to the function and enable dark subtract
 +this is used when there is hot pixel or need to do long exposure
 +you'd better make this dark file from the  "dark subtract" funtion 
 +of the "video capture filter" directshow page.
 +the dark file's size should be the same of camera's max width and height 
 +and should be RGB8 raw format.it will on even you changed the ROI setting
 +it only correct the hot pixels if out put isn't 16bit.
 +
 +it will be remembered in registry. so "Dark subtract" is on next time if you close your app.
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +char *pcBMPPath: the path to the bmp dark file. 
 +return£º
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_PATH, //cannot find the path of the file
 +ASI_ERROR_INVALID_FILEFORMAT, //the dark file's size should be the same of camera's max width and height  
 +
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIEnableDarkSubtract(int iCameraID, char *pcBMPPath);
 +
 +/***************************************************************************
 +Descriptions£º
 +Disable the dark subtract function.
 +you'd better call it at start if you don't want to use it.
 +because dark subtract function is remembered on windows platform
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIDisableDarkSubtract(int iCameraID);
 +
 +/***************************************************************************
 +Descriptions£º
 +Start video capture
 +then you can get the data from the API ASIGetVideoData
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +
 +return:
 +ASI_SUCCESS : Operation is successful, it will return success if already started
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_EXPOSURE_IN_PROGRESS: snap mode is working, you need to stop snap first
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIStartVideoCapture(int iCameraID);
 +
 +/***************************************************************************
 +Descriptions£º
 +Stop video capture
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +
 +return:
 +ASI_SUCCESS : Operation is successful, it will return success if already stopped
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIStopVideoCapture(int iCameraID);
 +
 +/***************************************************************************
 +Descriptions£º
 +get data from the video buffer.the buffer is very small 
 +you need to call this API as fast as possible, otherwise frame will be discarded
 +so the best way is maintain one buffer loop and call this API in a loop
 +please make sure the buffer size is biger enough to hold one image
 +otherwise the this API will crash
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +unsigned char* pBuffer, caller need to malloc the buffer, make sure the size is big enough
 +		the size in byte:
 +		8bit mono:width*height
 +		16bit mono:width*height*2
 +		RGB24:width*height*3
 +
 +int iWaitms, this API will block and wait iWaitms to get one image. the unit is ms
 +		-1 means wait forever. this value is recommend set to exposure*2+500ms
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_TIMEOUT: no image get and timeout
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIGetVideoData(int iCameraID, unsigned char* pBuffer, long lBuffSize, int iWaitms);
 +
 +
 +/***************************************************************************
 +Descriptions£º
 +PulseGuide of the ST4 port on. this function only work on the module which have ST4 port
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_GUIDE_DIRECTION direction the direction of guider
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIPulseGuideOn(int iCameraID, ASI_GUIDE_DIRECTION direction);
 +
 +/***************************************************************************
 +Descriptions£º
 +PulseGuide of the ST4 port off. this function only work on the module which have ST4 port
 +make sure where is ASIPulseGuideOn and there is ASIPulseGuideOff
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_GUIDE_DIRECTION direction the direction of guider
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIPulseGuideOff(int iCameraID, ASI_GUIDE_DIRECTION direction);
 +
 +
 +/***************************************************************************
 +Descriptions£º
 +Start camera exposure. the following 4 API is usually used when long exposure required
 +start exposure  and check the exposure status then get the data
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_BOOL bIsDark: means dark frame if there is mechanical shutter on the camera. otherwise useless
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_VIDEO_MODE_ACTIVE: video mode is working, you need to stop video capture first
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE  ASIStartExposure(int iCameraID, ASI_BOOL bIsDark);
 +
 +/***************************************************************************
 +Descriptions£º
 +to cancel the long exposure which is on.
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE  ASIStopExposure(int iCameraID);
 +
 +/***************************************************************************
 +Descriptions£º
 +to get the exposure status, work with ASIStartExposure.
 +you can read the data if get ASI_EXP_SUCCESS. or have to restart exposure again
 +if get ASI_EXP_FAILED
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_EXPOSURE_STATUS *pExpStatus: the exposure status
 +
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +
 +***************************************************************************/
 +
 +ASICAMERA_API ASI_ERROR_CODE  ASIGetExpStatus(int iCameraID, ASI_EXPOSURE_STATUS *pExpStatus);
 +
 +/***************************************************************************
 +Descriptions£º
 +get data after exposure.
 +please make sure the buffer size is biger enough to hold one image
 +otherwise the this API will crash
 +
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +unsigned char* pBuffer, caller need to malloc the buffer, make sure the size is big enough
 +the size in byte:
 +8bit mono:width*height
 +16bit mono:width*height*2
 +RGB24:width*height*3
 +
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +ASI_ERROR_TIMEOUT: no image get and timeout
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIGetDataAfterExp(int iCameraID, unsigned char* pBuffer, long lBuffSize);
 +
 +/***************************************************************************
 +Descriptions£º
 +get camera id stored in flash, only available for USB3.0 camera
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_ID* pID: pointer to ID
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASIGetID(int iCameraID, ASI_ID* pID);
 +
 +/***************************************************************************
 +Descriptions£º
 +write camera id to flash, only available for USB3.0 camera
 +
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_ID ID: ID
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API  ASI_ERROR_CODE ASISetID(int iCameraID, ASI_ID ID);
 +
 +/***************************************************************************
 +Descriptions£º
 +get pre-setting parameter
 +Paras£º		
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +Offset_HighestDR: offset at highest dynamic range, 
 +Offset_UnityGain: offset at unity gain
 +int *Gain_LowestRN, *Offset_LowestRN: gain and offset at lowest read noise
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE ASIGetGainOffset(int iCameraID, int *pOffset_HighestDR, int *pOffset_UnityGain, int *pGain_LowestRN, int *pOffset_LowestRN);
 +
 +/***************************************************************************
 +Descriptions£º
 +get version string, like "1, 13, 0503"
 +***************************************************************************/
 +ASICAMERA_API char* ASIGetSDKVersion();
 +
 +/***************************************************************************
 +Description:
 +Get the camera supported mode, only need to call when the IsTriggerCam in the CameraInfo is true.
 +Paras:
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_SUPPORTED_MODE: the camera supported mode
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE  ASIGetCameraSupportMode(int iCameraID, ASI_SUPPORTED_MODE* pSupportedMode);
 +
 +/***************************************************************************
 +Description:
 +Get the camera current mode, only need to call when the IsTriggerCam in the CameraInfo is true 
 +Paras:
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_CAMERA_MODE: the current camera mode
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_ID  :no camera of this ID is connected or ID value is out of boundary
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE  ASIGetCameraMode(int iCameraID, ASI_CAMERA_MODE* mode);
 +
 +/***************************************************************************
 +Description:
 +Set the camera mode, only need to call when the IsTriggerCam in the CameraInfo is true 
 +Paras:
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_CAMERA_MODE: this is get from the camera property use the API ASIGetCameraProperty
 +
 +return:
 +ASI_SUCCESS : Operation is successful
 +ASI_ERROR_CAMERA_CLOSED : camera didn't open
 +ASI_ERROR_INVALID_SEQUENCE : camera is in capture now, need to stop capture first.
 +ASI_ERROR_INVALID_MODE  : mode is out of boundary or this camera do not support this mode
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE  ASISetCameraMode(int iCameraID, ASI_CAMERA_MODE mode);
 +
 +/***************************************************************************
 +Description:
 +Send out a softTrigger. For edge trigger, it only need to set true which means send a
 +rising trigger to start exposure. For level trigger, it need to set true first means 
 +start exposure, and set false means stop exposure.it only need to call when the 
 +IsTriggerCam in the CameraInfo is true
 +Paras:
 +int CameraID: this is get from the camera property use the API ASIGetCameraProperty
 +ASI_BOOL starts:send a softTrigger start/stop signal
 +***************************************************************************/
 +ASICAMERA_API ASI_ERROR_CODE  ASISendSoftTrigger(int iCameraID, ASI_BOOL bStart);
 +#ifdef __cplusplus
 +}
 +#endif
 +
 +#endif
 | 
