#include "ConfigureCamera.h" void ConfigureCamera(pItkCamera pCam, int index, const char* deviceClass) { ITKSTATUS res = ITKSTATUS_OK; int ret = IK_RTN_OK; uint32_t numCameras = 0; /// \~chinese 枚举可用相机的数量。在打开相机前,必须调用 ItkManGetDeviceCount() 函数 \~english Enumerate /// the number of available cameras. Before opening the camera, ItkManGetDeviceCount() function must be called. res = ItkManGetDeviceCount(&numCameras); CHECK_IKAPC(res); if (numCameras == 0 || pCam == NULL) { printf("No camera.\n"); ItkManTerminate(); pressEnterToExit(); exit(EXIT_FAILURE); } uint32_t i = 0; ITKDEV_INFO di; /// \~chinese 打开采集卡连接的相机 \~english Open grabber linked camera for (; i < numCameras; i++) { /// \~chinese 获取相机设备信息 \~english Get camera device information res = ItkManGetDeviceInfo(i, &di); if (pCam->g_SerialNumber != NULL) { /// \~chinese 当设备序列号正确时 \~english When the serial number is proper if (strcmp(di.SerialNumber, pCam->g_SerialNumber) == 0 && strcmp(di.SerialNumber, "") != 0) { printf("Using camera: serial: %s, name: %s, interface: %s.\n", di.SerialNumber, di.FullName, di.DeviceClass); res = ItkDevOpen(i, ITKDEV_VAL_ACCESS_MODE_EXCLUSIVE, &pCam->g_hCamera); CHECK_IKAPC(res); break; } } else if (index >= 0) { /// \~chinese 当设备序号正确时 \~english When the index is proper if (i == index) { printf("Using camera: serial: %s, name: %s, interface: %s.\n", di.SerialNumber, di.FullName, di.DeviceClass); res = ItkDevOpen(i, ITKDEV_VAL_ACCESS_MODE_EXCLUSIVE, &pCam->g_hCamera); CHECK_IKAPC(res); pCam->g_index = i; break; } } else if (deviceClass != NULL) { /// \~chinese 当设备类型正确时 \~english When the device class is proper if (strcmp(di.DeviceClass, deviceClass) == 0) { printf("Using camera: serial: %s, name: %s, interface: %s.\n", di.SerialNumber, di.FullName, di.DeviceClass); res = ItkDevOpen(i, ITKDEV_VAL_ACCESS_MODE_EXCLUSIVE, &pCam->g_hCamera); CHECK_IKAPC(res); break; } } else { printf("Please set proper attribute to open camera.\n"); ItkManTerminate(); pressEnterToExit(); exit(EXIT_FAILURE); } } if (i >= numCameras) { printf("Cannot find proper camera.\n"); ItkManTerminate(); pressEnterToExit(); exit(EXIT_FAILURE); } // \~chinese 设置相机的超时时间 \~english set timeout of camera uint32_t timeout = 20000; res = ItkDevSetPrm(pCam->g_hCamera, ITKDEV_PRM_HEARTBEAT_TIMEOUT, &timeout); CHECK(res); // \~chinese 获取特征名称列表并配置参数设置方法 \~english Get list of features' name and select parameter // configure method GetAllConfigureMethods(pCam); pCam->g_devInfo = di; ITK_CXP_DEV_INFO cxp_cam_info = {}; ITK_GVB_DEV_INFO gvb_cam_info = {}; ITK_CL_DEV_INFO cl_cam_info = {}; void* info = NULL; if (strcmp(di.DeviceClass, "CoaXPress") == 0) { /// \~chinese 获取CoaXPress相机设备信息 \~english Get CoaXPress camera device information res = ItkManGetCXPDeviceInfo(i, &cxp_cam_info); CHECK_IKAPC(res); info = &cxp_cam_info; } else if (strcmp(di.DeviceClass, "GigEVisionBoard") == 0) { /// \~chinese 获取GigEVision相机设备信息 \~english Get GigEVision camera device information res = ItkManGetGVBDeviceInfo(i, &gvb_cam_info); CHECK_IKAPC(res); info = &gvb_cam_info; } else if (strcmp(di.DeviceClass, "CameraLink") == 0) { /// \~chinese 获取CameraLink相机设备信息 \~english Get CameraLink camera device information res = ItkManGetCLDeviceInfo(i, &cl_cam_info); CHECK_IKAPC(res); info = &cl_cam_info; } else { return; } pCam->g_hBoard = IKapOpenWithSpecificInfo(info); if (pCam->g_hBoard == INVALID_HANDLE_VALUE) CHECK_IKAPBOARD(IKStatus_OpenBoardFail); } void GetAllConfigureMethods(pItkCamera pCam) { ITKSTATUS res = ITKSTATUS_OK; ITK_FEATURE_BASE_INFO pFea = {}; // width if (ItkDevGetFeatureInfo(pCam->g_hCamera, "RegionEnable", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "RegionWidth", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_WIDTH_CONFIG_METHOD_1; } } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ROIEnable", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ROIWidth", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_WIDTH_CONFIG_METHOD_2; } } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "RegionWidth", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_WIDTH_CONFIG_METHOD_3; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ROIWidth", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_WIDTH_CONFIG_METHOD_4; } // height if (ItkDevGetFeatureInfo(pCam->g_hCamera, "RegionEnable", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "RegionHeight", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_HEIGHT_CONFIG_METHOD_1; } } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ROIEnable", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ROIHeight", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_HEIGHT_CONFIG_METHOD_2; } } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "RegionHeight", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_HEIGHT_CONFIG_METHOD_3; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ROIHeight", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG] = ITEK_CAMERA_HEIGHT_CONFIG_METHOD_4; } // exposure time if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureTimeRaw", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG] = ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_1; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AreaMode", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureTime", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG] = ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_2; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AreaExposureTime", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG] = ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_3; } } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureTime", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG] = ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_4; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "Area", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AreaExposureTime", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG] = ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_5; } } // digital Gain if (ItkDevGetFeatureInfo(pCam->g_hCamera, "DigitalGain", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_DIGITAL_GAIN_CONFIG] = ITEK_CAMERA_DIGITAL_GAIN_CONFIG_METHOD_1; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "Gain", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_DIGITAL_GAIN_CONFIG] = ITEK_CAMERA_DIGITAL_GAIN_CONFIG_METHOD_2; } // line Rate if (ItkDevGetFeatureInfo(pCam->g_hCamera, "LinePeriodTime", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_LINE_RATE_CONFIG] = ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_1; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AcquisitionLinePeriod", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_LINE_RATE_CONFIG] = ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_2; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AcquisitionLineRate", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_LINE_RATE_CONFIG] = ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_3; } // frame Rate if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AcquisitionFramePeriodRaw", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG] = ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_1; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AcquisitionFramePeriod", &pFea) == ITKSTATUS_OK) { if (ITKFEATURE_VAL_TYPE_INT64 == pFea.Type) { pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG] = ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_2; } else if (ITKFEATURE_VAL_TYPE_DOUBLE == pFea.Type) { pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG] = ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_3; } } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "FramePeriodTime", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG] = ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_4; } else if ( ItkDevGetFeatureInfo(pCam->g_hCamera, "AcquisitionFrameRateEnable", &pFea) == ITKSTATUS_OK && ItkDevGetFeatureInfo(pCam->g_hCamera, "AcquisitionFrameRate", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG] = ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_5; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "AcquisitionFrameRate", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG] = ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_6; } // line Trigger if (ItkDevGetFeatureInfo(pCam->g_hCamera, "TriggerSelector", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "TriggerMode", &pFea) == ITKSTATUS_OK && ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureMode", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_LINE_TRIGGER_CONFIG] = ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_1; } } else if ( ItkDevGetFeatureInfo(pCam->g_hCamera, "TriggerMode", &pFea) == ITKSTATUS_OK && ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureMode", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_LINE_TRIGGER_CONFIG] = ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_2; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "SynchronizationMode", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_LINE_TRIGGER_CONFIG] = ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_3; } // frame Trigger if (ItkDevGetFeatureInfo(pCam->g_hCamera, "TriggerSelector", &pFea) == ITKSTATUS_OK) { if (ItkDevGetFeatureInfo(pCam->g_hCamera, "TriggerMode", &pFea) == ITKSTATUS_OK && ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureMode", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_FRAME_TRIGGER_CONFIG] = ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_1; } } else if ( ItkDevGetFeatureInfo(pCam->g_hCamera, "FrameTriggerEnable", &pFea) == ITKSTATUS_OK && ItkDevGetFeatureInfo(pCam->g_hCamera, "FrameTriggerType", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_FRAME_TRIGGER_CONFIG] = ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_2; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureMode", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_FRAME_TRIGGER_CONFIG] = ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_3; } // trigger source if (ItkDevGetFeatureInfo(pCam->g_hCamera, "FrameTriggerSource", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_TRIGGER_SOURCE_CONFIG] = ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_1; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ExternalTriggerSource", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_TRIGGER_SOURCE_CONFIG] = ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_2; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "TriggerSource", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_TRIGGER_SOURCE_CONFIG] = ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_3; } // trigger polarity if (ItkDevGetFeatureInfo(pCam->g_hCamera, "FrameTriggerPolarity", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_TRIGGER_POLARITY_CONFIG] = ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_1; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ExternalTriggerActivation", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_TRIGGER_POLARITY_CONFIG] = ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_2; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "LinePolarity", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_TRIGGER_POLARITY_CONFIG] = ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_3; } else if (ItkDevGetFeatureInfo(pCam->g_hCamera, "TriggerActivation", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_TRIGGER_POLARITY_CONFIG] = ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_4; } // multi exposure if (ItkDevGetFeatureInfo(pCam->g_hCamera, "MultiExposureTimeCount", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_MULTI_EXPOSURE_CONFIG] = ITEK_CAMERA_MULTI_EXPOSURE_CONFIG_METHOD_1; } // chunk data if (ItkDevGetFeatureInfo(pCam->g_hCamera, "ChunkModeActive", &pFea) == ITKSTATUS_OK && ItkDevGetFeatureInfo(pCam->g_hCamera, "ChunkSelector", &pFea) == ITKSTATUS_OK && ItkDevGetFeatureInfo(pCam->g_hCamera, "ChunkEnable", &pFea) == ITKSTATUS_OK) { pCam->g_configMethod[ITEK_CAMERA_CHUNK_DATA_CONFIG] = ITEK_CAMERA_CHUNK_DATA_CONFIG_METHOD_1; } } ITKSTATUS SetWidth(pItkCamera pCam, int64_t width) { ITKSTATUS res = ITKSTATUS_OK; int ret = IK_RTN_OK; ITK_FEATURE_BASE_INFO pFea = {}; uint32_t accMode = ITKFEATURE_VAL_ACCESS_MODE_NA; ItkDevGetAccessMode(pCam->g_hCamera, "Width", &accMode); if (ItkDevGetFeatureInfo(pCam->g_hCamera, "Width", &pFea) == ITKSTATUS_OK && ITKFEATURE_VAL_ACCESS_MODE_RW == accMode) { return ItkDevSetInt64(pCam->g_hCamera, "Width", width); } switch (pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG]) { case ITEK_CAMERA_WIDTH_CONFIG_METHOD_1: res = ItkDevSetBool(pCam->g_hCamera, "RegionEnable", true); if (ITKSTATUS_OK != res) return res; res = ItkDevSetInt64(pCam->g_hCamera, "RegionWidth", width); if (ITKSTATUS_OK != res) return res; break; case ITEK_CAMERA_WIDTH_CONFIG_METHOD_2: res = ItkDevSetBool(pCam->g_hCamera, "ROIEnable", true); if (ITKSTATUS_OK != res) return res; res = ItkDevSetInt64(pCam->g_hCamera, "ROIWidth", width); if (ITKSTATUS_OK != res) return res; break; case ITEK_CAMERA_WIDTH_CONFIG_METHOD_3: res = ItkDevSetInt64(pCam->g_hCamera, "RegionWidth", width); if (ITKSTATUS_OK != res) return res; break; case ITEK_CAMERA_WIDTH_CONFIG_METHOD_4: res = ItkDevSetInt64(pCam->g_hCamera, "ROIWidth", width); if (ITKSTATUS_OK != res) return res; break; default: return ITKSTATUS_INVALID_ARG; break; } if (pCam->g_hBoard != INVALID_HANDLE_VALUE) { ret = IKapSetInfo(pCam->g_hBoard, IKP_IMAGE_WIDTH, (int)width); if (ret != IK_RTN_OK) { return ITKSTATUS_INVALID_ARG; } } return res; } ITKSTATUS GetWidth(pItkCamera pCam, int64_t* width) { return ItkDevGetInt64(pCam->g_hCamera, "Width", width); } ITKSTATUS SetHeight(pItkCamera pCam, int64_t height) { ITKSTATUS res = ITKSTATUS_OK; int ret = IK_RTN_OK; ITK_FEATURE_BASE_INFO pFea = {}; uint32_t accMode = ITKFEATURE_VAL_ACCESS_MODE_NA; ItkDevGetAccessMode(pCam->g_hCamera, "Height", &accMode); if (ItkDevGetFeatureInfo(pCam->g_hCamera, "Height", &pFea) == ITKSTATUS_OK && ITKFEATURE_VAL_ACCESS_MODE_RW == accMode) { return ItkDevSetInt64(pCam->g_hCamera, "Height", height); } switch (pCam->g_configMethod[ITEK_CAMERA_WIDTH_CONFIG]) { case ITEK_CAMERA_HEIGHT_CONFIG_METHOD_1: res = ItkDevSetBool(pCam->g_hCamera, "RegionEnable", true); if (ITKSTATUS_OK != res) return res; res = ItkDevSetInt64(pCam->g_hCamera, "RegionHeight", height); if (ITKSTATUS_OK != res) return res; break; case ITEK_CAMERA_HEIGHT_CONFIG_METHOD_2: res = ItkDevSetBool(pCam->g_hCamera, "ROIEnable", true); if (ITKSTATUS_OK != res) return res; res = ItkDevSetInt64(pCam->g_hCamera, "ROIHeight", height); if (ITKSTATUS_OK != res) return res; break; case ITEK_CAMERA_HEIGHT_CONFIG_METHOD_3: res = ItkDevSetInt64(pCam->g_hCamera, "RegionHeight", height); if (ITKSTATUS_OK != res) return res; break; case ITEK_CAMERA_HEIGHT_CONFIG_METHOD_4: res = ItkDevSetInt64(pCam->g_hCamera, "ROIHeight", height); if (ITKSTATUS_OK != res) return res; break; default: return ITKSTATUS_INVALID_ARG; break; } if (pCam->g_hBoard != INVALID_HANDLE_VALUE) { ret = IKapSetInfo(pCam->g_hBoard, IKP_IMAGE_HEIGHT, (int)height); if (ret != IK_RTN_OK) { return ITKSTATUS_INVALID_ARG; } } return res; } ITKSTATUS GetHeight(pItkCamera pCam, int64_t* height) { return ItkDevGetInt64(pCam->g_hCamera, "Height", height); } ITKSTATUS SetPixelFormat(pItkCamera pCam, const char* pixelFormat) { return ItkDevFromString(pCam->g_hCamera, "PixelFormat", pixelFormat); } ITKSTATUS GetPixelFormat(pItkCamera pCam, char* pBuffer, uint32_t* count) { return ItkDevToString(pCam->g_hCamera, "PixelFormat", pBuffer, count); } ITKSTATUS SetExposureTime(pItkCamera pCam, double exposureTime) { ITKSTATUS res = ITKSTATUS_OK; int64_t exposureTime_int64 = (int64_t)exposureTime; bool areaMode = false; uint32_t ExposureTimeType = ITKFEATURE_VAL_TYPE_UNDEFINED; uint32_t AreaExposureTimeType = ITKFEATURE_VAL_TYPE_UNDEFINED; ITK_FEATURE_BASE_INFO featureInfo = {}; if (ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_2 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG] || ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_4 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]) { res = ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureTime", &featureInfo); if (ITKSTATUS_OK != res) return res; ExposureTimeType = featureInfo.Type; } if (ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_3 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]|| ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_5 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]) { res = ItkDevGetFeatureInfo(pCam->g_hCamera, "AreaExposureTime", &featureInfo); if (ITKSTATUS_OK != res) return res; AreaExposureTimeType = featureInfo.Type; } switch (pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]) { case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_1: return ItkDevSetInt64(pCam->g_hCamera, "ExposureTimeRaw", exposureTime_int64); break; case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_2: res = ItkDevGetBool(pCam->g_hCamera, "AreaMode", &areaMode); if (ITKSTATUS_OK != res) return res; if (false == areaMode) return ITKSTATUS_INVALID_ARG; if (ITKFEATURE_VAL_TYPE_INT64 == ExposureTimeType) { return ItkDevSetInt64(pCam->g_hCamera, "ExposureTime", exposureTime_int64); } else if (ITKFEATURE_VAL_TYPE_DOUBLE == ExposureTimeType) { return ItkDevSetDouble(pCam->g_hCamera, "ExposureTime", exposureTime); } break; case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_3: res = ItkDevGetBool(pCam->g_hCamera, "AreaMode", &areaMode); if (ITKSTATUS_OK != res) return res; if (false == areaMode) return ITKSTATUS_INVALID_ARG; if (ITKFEATURE_VAL_TYPE_INT64 == AreaExposureTimeType) { return ItkDevSetInt64(pCam->g_hCamera, "AreaExposureTime", exposureTime_int64); } else if (ITKFEATURE_VAL_TYPE_DOUBLE == ExposureTimeType) { return ItkDevSetDouble(pCam->g_hCamera, "AreaExposureTime", exposureTime); } break; case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_4: if (ITKFEATURE_VAL_TYPE_INT64 == ExposureTimeType) { return ItkDevSetInt64(pCam->g_hCamera, "ExposureTime", exposureTime_int64); } else if (ITKFEATURE_VAL_TYPE_DOUBLE == ExposureTimeType) { return ItkDevSetDouble(pCam->g_hCamera, "ExposureTime", exposureTime); } break; case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_5: res = ItkDevGetBool(pCam->g_hCamera, "Area", &areaMode); if (ITKSTATUS_OK != res) return res; if (false == areaMode) return ITKSTATUS_INVALID_ARG; if (ITKFEATURE_VAL_TYPE_INT64 == AreaExposureTimeType) { return ItkDevSetInt64(pCam->g_hCamera, "AreaExposureTime", exposureTime_int64); } else if (ITKFEATURE_VAL_TYPE_DOUBLE == ExposureTimeType) { return ItkDevSetDouble(pCam->g_hCamera, "AreaExposureTime", exposureTime); } break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetExposureTime(pItkCamera pCam, double* exposureTime) { ITKSTATUS res = ITKSTATUS_OK; if (!exposureTime) { return ITKSTATUS_INVALID_ARG; } uint32_t ExposureTimeType = ITKFEATURE_VAL_TYPE_UNDEFINED; uint32_t AreaExposureTimeType = ITKFEATURE_VAL_TYPE_UNDEFINED; ITK_FEATURE_BASE_INFO featureInfo = {}; if (ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_2 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG] || ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_4 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]) { res = ItkDevGetFeatureInfo(pCam->g_hCamera, "ExposureTime", &featureInfo); if (ITKSTATUS_OK != res) return res; ExposureTimeType = featureInfo.Type; } if (ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_3 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]|| ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_5 == pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]) { res = ItkDevGetFeatureInfo(pCam->g_hCamera, "AreaExposureTime", &featureInfo); if (ITKSTATUS_OK != res) return res; AreaExposureTimeType = featureInfo.Type; } int64_t expTime = 0; switch (pCam->g_configMethod[ITEK_CAMERA_EXPOSURE_TIME_CONFIG]) { case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_1: res = ItkDevGetInt64(pCam->g_hCamera, "ExposureTimeRaw", &expTime); if (res == ITKSTATUS_OK) { *exposureTime = (double)expTime; } break; case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_2: case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_4: if (ITKFEATURE_VAL_TYPE_INT64 == ExposureTimeType) { res = ItkDevGetInt64(pCam->g_hCamera, "ExposureTime", &expTime); if (res == ITKSTATUS_OK) { *exposureTime = (double)expTime; } } else if (ITKFEATURE_VAL_TYPE_DOUBLE == ExposureTimeType) { res = ItkDevGetDouble(pCam->g_hCamera, "ExposureTime", exposureTime); } else { return ITKSTATUS_INVALID_ARG; } break; case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_3: case ITEK_CAMERA_EXPOSURE_TIME_CONFIG_METHOD_5: if (ITKFEATURE_VAL_TYPE_INT64 == AreaExposureTimeType) { res = ItkDevGetInt64(pCam->g_hCamera, "AreaExposureTime", &expTime); if (res == ITKSTATUS_OK) { *exposureTime = (double)expTime; } } else if (ITKFEATURE_VAL_TYPE_DOUBLE == AreaExposureTimeType) { res = ItkDevGetDouble(pCam->g_hCamera, "AreaExposureTime", exposureTime); } else { return ITKSTATUS_INVALID_ARG; } break; default: break; } return res; } ITKSTATUS SetDigitalGain(pItkCamera pCam, double digitalGain) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_DIGITAL_GAIN_CONFIG]) { case ITEK_CAMERA_DIGITAL_GAIN_CONFIG_METHOD_1: return ItkDevSetDouble(pCam->g_hCamera, "DigitalGain", digitalGain); ; break; case ITEK_CAMERA_DIGITAL_GAIN_CONFIG_METHOD_2: return ItkDevSetDouble(pCam->g_hCamera, "Gain", digitalGain); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetDigitalGain(pItkCamera pCam, double* digitalGain) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_DIGITAL_GAIN_CONFIG]) { case ITEK_CAMERA_DIGITAL_GAIN_CONFIG_METHOD_1: return ItkDevGetDouble(pCam->g_hCamera, "DigitalGain", digitalGain); break; case ITEK_CAMERA_DIGITAL_GAIN_CONFIG_METHOD_2: return ItkDevGetDouble(pCam->g_hCamera, "Gain", digitalGain); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS SetPixelGain(pItkCamera pCam, const char* pixelGain) { ITKSTATUS res = ITKSTATUS_OK; return ItkDevFromString(pCam->g_hCamera, "PixelGain", pixelGain); } ITKSTATUS GetPixelGain(pItkCamera pCam, char* pixelGain, uint32_t* len) { ITKSTATUS res = ITKSTATUS_OK; return ItkDevToString(pCam->g_hCamera, "PixelGain", pixelGain, len); } ITKSTATUS SetLineRate(pItkCamera pCam, double lineRate) { ITKSTATUS res = ITKSTATUS_OK; if (lineRate <= 0) return ITKSTATUS_INVALID_ARG; double linePeriodTime = 1000000 / lineRate; // us switch (pCam->g_configMethod[ITEK_CAMERA_LINE_RATE_CONFIG]) { case ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_1: return ItkDevSetDouble(pCam->g_hCamera, "LinePeriodTime", linePeriodTime); break; case ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_2: return ItkDevSetDouble(pCam->g_hCamera, "AcquisitionLinePeriod", linePeriodTime); break; case ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_3: return ItkDevSetDouble(pCam->g_hCamera, "AcquisitionLineRate", lineRate); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetLineRate(pItkCamera pCam, double* lineRate) { ITKSTATUS res = ITKSTATUS_OK; double linePeriodTime = 0; switch (pCam->g_configMethod[ITEK_CAMERA_LINE_RATE_CONFIG]) { case ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_1: res = ItkDevGetDouble(pCam->g_hCamera, "LinePeriodTime", &linePeriodTime); if (ITKSTATUS_OK != res) return res; *lineRate = 1000000 / linePeriodTime; return res; break; case ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_2: res = ItkDevGetDouble(pCam->g_hCamera, "AcquisitionLinePeriod", &linePeriodTime); if (ITKSTATUS_OK != res) return res; *lineRate = 1000000 / linePeriodTime; return res; break; case ITEK_CAMERA_LINE_RATE_CONFIG_METHOD_3: return ItkDevGetDouble(pCam->g_hCamera, "AcquisitionLineRate", lineRate); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS SetFrameRate(pItkCamera pCam, double frameRate) { ITKSTATUS res = ITKSTATUS_OK; if (frameRate <= 0) { return ITKSTATUS_INVALID_ARG; } double framePeriod = 1000000 / frameRate; int64_t framePeriod_int64 = (int64_t)framePeriod; switch (pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG]) { case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_1: return ItkDevSetInt64(pCam->g_hCamera, "AcquisitionFramePeriodRaw", framePeriod_int64); break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_2: return ItkDevSetInt64(pCam->g_hCamera, "AcquisitionFramePeriod", framePeriod_int64); break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_3: return ItkDevSetDouble(pCam->g_hCamera, "AcquisitionFramePeriod", framePeriod); break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_4: return ItkDevSetInt64(pCam->g_hCamera, "FramePeriodTime", framePeriod_int64); break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_5: res = ItkDevSetBool(pCam->g_hCamera, "AcquisitionFrameRateEnable", true); if (ITKSTATUS_OK != res) return res; return ItkDevSetDouble(pCam->g_hCamera, "AcquisitionFrameRate", frameRate); break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_6: return ItkDevSetDouble(pCam->g_hCamera, "AcquisitionFrameRate", frameRate); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetFrameRate(pItkCamera pCam, double* frameRate) { ITKSTATUS res = ITKSTATUS_OK; int64_t framePeriod_int64 = 0; double framePeriod = 0; switch (pCam->g_configMethod[ITEK_CAMERA_FRAME_RATE_CONFIG]) { case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_1: res = ItkDevGetInt64(pCam->g_hCamera, "AcquisitionFramePeriodRaw", &framePeriod_int64); if (framePeriod_int64 > 0) { *frameRate = (double)1000000 / (double)framePeriod_int64; } return res; break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_2: res = ItkDevGetInt64(pCam->g_hCamera, "AcquisitionFramePeriod", &framePeriod_int64); if (framePeriod_int64 > 0) { *frameRate = (double)1000000 / (double)framePeriod_int64; } return res; break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_3: res = ItkDevGetDouble(pCam->g_hCamera, "AcquisitionFramePeriod", &framePeriod); if (framePeriod > 0) { *frameRate = 1000000 / framePeriod; } return res; break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_4: res = ItkDevGetInt64(pCam->g_hCamera, "FramePeriodTime", &framePeriod_int64); if (framePeriod_int64 > 0) { *frameRate = (double)1000000 / (double)framePeriod_int64; } return res; break; case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_5: case ITEK_CAMERA_FRAME_RATE_CONFIG_METHOD_6: return ItkDevGetDouble(pCam->g_hCamera, "AcquisitionFrameRate", frameRate); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS SetFrameTrigger(pItkCamera pCam, const char* status, bool level) { ITKSTATUS res = ITKSTATUS_OK; bool bSet = false; if (strcmp(status, "On") == 0) { bSet = true; } if (level) { switch (pCam->g_configMethod[ITEK_CAMERA_FRAME_TRIGGER_CONFIG]) { case ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_1: res = ItkDevFromString(pCam->g_hCamera, "TriggerSelector", "FrameActive"); if (ITKSTATUS_OK != res) return res; return ItkDevFromString(pCam->g_hCamera, "TriggerMode", status); break; case ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_2: res = ItkDevSetBool(pCam->g_hCamera, "FrameTriggerEnable", bSet); if (ITKSTATUS_OK != res) return res; return ItkDevFromString(pCam->g_hCamera, "FrameTriggerType", "LevelSensitive"); break; case ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_3: if (bSet) { return ItkDevFromString(pCam->g_hCamera, "ExposureMode", "TriggerWidth"); } else { return ItkDevFromString(pCam->g_hCamera, "ExposureMode", "Timed"); } break; default: break; } } else { switch (pCam->g_configMethod[ITEK_CAMERA_FRAME_TRIGGER_CONFIG]) { case ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_1: res = ItkDevFromString(pCam->g_hCamera, "TriggerSelector", "FrameStart"); if (ITKSTATUS_OK != res) return res; return ItkDevFromString(pCam->g_hCamera, "TriggerMode", status); break; case ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_2: res = ItkDevSetBool(pCam->g_hCamera, "FrameTriggerEnable", bSet); if (ITKSTATUS_OK != res) return res; return ItkDevFromString(pCam->g_hCamera, "FrameTriggerType", "EdgeSensitive"); break; case ITEK_CAMERA_FRAME_TRIGGER_CONFIG_METHOD_3: if (bSet) { return ItkDevFromString(pCam->g_hCamera, "ExposureMode", "TriggerPulse"); } else { return ItkDevFromString(pCam->g_hCamera, "ExposureMode", "Timed"); } break; default: break; } } return ITKSTATUS_INVALID_ARG; } ITKSTATUS SetLineTrigger(pItkCamera pCam, const char* status, bool level) { ITKSTATUS res = ITKSTATUS_OK; bool bSet = false; if (strcmp(status, "On") == 0) { bSet = true; } if (level) { switch (pCam->g_configMethod[ITEK_CAMERA_LINE_TRIGGER_CONFIG]) { case ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_1: res = ItkDevFromString(pCam->g_hCamera, "TriggerSelector", "LineStart"); if (ITKSTATUS_OK != res) return res; case ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_2: res = ItkDevFromString(pCam->g_hCamera, "TriggerMode", status); if (ITKSTATUS_OK != res) return res; if (bSet) { return ItkDevFromString(pCam->g_hCamera, "ExposureMode", "TriggerWidth"); } else { return ItkDevFromString(pCam->g_hCamera, "ExposureMode", "Timed"); } break; case ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_3: if (bSet) { return ItkDevFromString(pCam->g_hCamera, "SynchronizationMode", "TriggerWidth"); } else { return ItkDevFromString(pCam->g_hCamera, "SynchronizationMode", "Timed"); } break; default: break; } } else { switch (pCam->g_configMethod[ITEK_CAMERA_LINE_TRIGGER_CONFIG]) { case ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_1: res = ItkDevFromString(pCam->g_hCamera, "TriggerSelector", "LineStart"); if (ITKSTATUS_OK != res) return res; case ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_2: res = ItkDevFromString(pCam->g_hCamera, "TriggerMode", status); if (ITKSTATUS_OK != res) return res; return ItkDevFromString(pCam->g_hCamera, "ExposureMode", "Timed"); break; case ITEK_CAMERA_LINE_TRIGGER_CONFIG_METHOD_3: if (bSet) { return ItkDevFromString(pCam->g_hCamera, "SynchronizationMode", "TriggerPulse"); } else { return ItkDevFromString(pCam->g_hCamera, "SynchronizationMode", "Timed"); } break; default: break; } } return ITKSTATUS_INVALID_ARG; } // ITKSTATUS SetTriggerMode(pItkCamera pCam, const char *triggerSelector, // const char *exposureMode) { // ITKSTATUS res = ITKSTATUS_OK; // if (triggerSelector) { // res = ItkDevFromString(pCam->g_hCamera, "TriggerSelector", triggerSelector); // if (res != ITKSTATUS_OK) { // return res; // } // } // res = ItkDevFromString(pCam->g_hCamera, "TriggerMode", "On"); // if (ITKSTATUS_OK == res) // return res; // res = ItkDevSetBool(pCam->g_hCamera, "FrameTriggerEnable", true); // if (ITKSTATUS_OK == res) // return res; // res = ItkDevFromString(pCam->g_hCamera, "ExposureMode", exposureMode); // if (ITKSTATUS_OK == res) // return res; // return ItkDevFromString(pCam->g_hCamera, "SynchronizationMode", exposureMode); //} // // ITKSTATUS GetTriggerMode(pItkCamera pCam, char* triggerSelector, uint32_t* triggerSelectorLen, char* // TriggerModeOrexposureMode, uint32_t* Len, bool* frameTriggerEnable) //{ // ITKSTATUS res = ITKSTATUS_OK; // if (triggerSelector) // { // res = ItkDevToString(pCam->g_hCamera, "TriggerSelector", // triggerSelector, triggerSelectorLen); // if (res!=ITKSTATUS_OK) // { // return res; // } // } // res = ItkDevToString(pCam->g_hCamera, "TriggerMode", TriggerModeOrexposureMode,Len); // if (res==ITKSTATUS_OK) // { // return res; // } // if (frameTriggerEnable) // { // if (ItkDevGetBool(pCam->g_hCamera, "FrameTriggerEnable", frameTriggerEnable)==ITKSTATUS_OK) { // return ITKSTATUS_OK; // } // } // // if (ItkDevToString(pCam->g_hCamera,"ExposureMode", TriggerModeOrexposureMode,Len) == ITKSTATUS_OK || // ItkDevToString(pCam->g_hCamera, "SynchronizationMode", TriggerModeOrexposureMode, Len) == ITKSTATUS_OK) // { // return ITKSTATUS_OK; // } // return ITKSTATUS_INVALID_ARG; //} ITKSTATUS SetTriggerSource(pItkCamera pCam, const char* triggerSource) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_TRIGGER_SOURCE_CONFIG]) { case ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_1: return ItkDevFromString(pCam->g_hCamera, "FrameTriggerSource", triggerSource); break; case ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_2: return ItkDevFromString(pCam->g_hCamera, "ExternalTriggerSource", triggerSource); break; case ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_3: return ItkDevFromString(pCam->g_hCamera, "TriggerSource", triggerSource); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetTriggerSource(pItkCamera pCam, char* triggerSource, uint32_t* len) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_TRIGGER_SOURCE_CONFIG]) { case ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_1: return ItkDevToString(pCam->g_hCamera, "FrameTriggerSource", triggerSource, len); break; case ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_2: return ItkDevToString(pCam->g_hCamera, "ExternalTriggerSource", triggerSource, len); break; case ITEK_CAMERA_TRIGGER_SOURCE_CONFIG_METHOD_3: return ItkDevToString(pCam->g_hCamera, "TriggerSource", triggerSource, len); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS SetTriggerPolarity(pItkCamera pCam, const char* triggerPolarity) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_TRIGGER_POLARITY_CONFIG]) { case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_1: return ItkDevFromString(pCam->g_hCamera, "FrameTriggerPolarity", triggerPolarity); break; case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_2: return ItkDevFromString(pCam->g_hCamera, "ExternalTriggerActivation", triggerPolarity); break; case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_3: return ItkDevFromString(pCam->g_hCamera, "LinePolarity", triggerPolarity); break; case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_4: return ItkDevFromString(pCam->g_hCamera, "TriggerActivation", triggerPolarity); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetTriggerPolarity(pItkCamera pCam, char* triggerPolarity, uint32_t* len) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_TRIGGER_POLARITY_CONFIG]) { case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_1: return ItkDevToString(pCam->g_hCamera, "FrameTriggerPolarity", triggerPolarity, len); break; case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_2: return ItkDevToString(pCam->g_hCamera, "ExternalTriggerActivation", triggerPolarity, len); break; case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_3: return ItkDevToString(pCam->g_hCamera, "LinePolarity", triggerPolarity, len); break; case ITEK_CAMERA_TRIGGER_POLARITY_CONFIG_METHOD_4: return ItkDevToString(pCam->g_hCamera, "TriggerActivation", triggerPolarity, len); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS SetMultiExposureTime(pItkCamera pCam, char* multiExposureTime) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_MULTI_EXPOSURE_CONFIG]) { case ITEK_CAMERA_MULTI_EXPOSURE_CONFIG_METHOD_1: return ItkDevFromString(pCam->g_hCamera,"MultiExposureTimeCount", multiExposureTime); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetMultiExposureTime(pItkCamera pCam, char* multiExposureTime, uint32_t* bufLen) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_MULTI_EXPOSURE_CONFIG]) { case ITEK_CAMERA_MULTI_EXPOSURE_CONFIG_METHOD_1: return ItkDevToString(pCam->g_hCamera, "MultiExposureTimeCount", multiExposureTime, bufLen); break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS SetChunkData(pItkCamera pCam, bool benable) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_CHUNK_DATA_CONFIG]) { case ITEK_CAMERA_CHUNK_DATA_CONFIG_METHOD_1: { res= ItkDevSetBool(pCam->g_hCamera, "ChunkModeActive", benable); if (res!=ITKSTATUS_OK) { return res; } if (benable) { ITK_FEATURE_BASE_INFO featureInfo = {}; res = ItkDevGetFeatureInfo(pCam->g_hCamera, "ChunkSelector", &featureInfo); if (res != ITKSTATUS_OK) { return res; } uint32_t enumCount = featureInfo.EnumCount; if (enumCount == 0) { return ITKSTATUS_INVALID_ARG; } for (int i = 0; i < (int)enumCount; i++) { ITK_FEATURE_ENUM_ENTRY_INFO enumEntryInfo = {}; res = ItkDevGetEnumEntryFeatureInfo(pCam->g_hCamera, "ChunkSelector", uint64_t(i), &enumEntryInfo); if (res != ITKSTATUS_OK) { return res; } res = ItkDevFromString(pCam->g_hCamera, "ChunkSelector", enumEntryInfo.ValueStr); if (res != ITKSTATUS_OK) { return res; } res = ItkDevSetBool(pCam->g_hCamera, "ChunkEnable", true); if (res != ITKSTATUS_OK) { return res; } } } } break; default: break; } return ITKSTATUS_INVALID_ARG; } ITKSTATUS GetChunkData(pItkCamera pCam, bool* pbenable) { ITKSTATUS res = ITKSTATUS_OK; switch (pCam->g_configMethod[ITEK_CAMERA_CHUNK_DATA_CONFIG]) { case ITEK_CAMERA_CHUNK_DATA_CONFIG_METHOD_1: return ItkDevGetBool(pCam->g_hCamera, "ChunkModeActive", pbenable); break; default: break; } return ITKSTATUS_INVALID_ARG; }