From ac7604616ab2e44ad12a9d8d5dd90dec15feb5cc Mon Sep 17 00:00:00 2001 From: Andy Wortman Date: Thu, 14 Mar 2019 15:51:15 -0700 Subject: add ASI controls --- include/asi/ASICamera2.h | 821 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 821 insertions(+) create mode 100755 include/asi/ASICamera2.h (limited to 'include/asi') 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 -- cgit v1.1