
			
//-------------------------------------------------------------------------------------------------------------------
// xiApi header file
#ifndef __XIAPI_H
#define __XIAPI_H

#ifdef WIN32
#include <windows.h>
#else
// linux
#include "wintypedefs.h"
#endif
#include <stddef.h>
#include "m3Identify.h"
#ifdef XIAPI_EXPORTS
#define XIAPI __declspec(dllexport)
#else
#define XIAPI __declspec(dllimport)
#endif

#include <stdint.h>

typedef int XI_RETURN;

#ifdef __cplusplus
extern "C" {
#endif

//-------------------------------------------------------------------------------------------------------------------
// xiApi parameters

// Basic
#define  XI_PRM_EXPOSURE                                   "exposure"                               // Exposure time in microseconds 
#define  XI_PRM_EXPOSURE_TIME_SELECTOR                     "exposure_time_selector"                 // Selector for Exposure parameter XI_EXPOSURE_TIME_SELECTOR_TYPE
#define  XI_PRM_EXPOSURE_BURST_COUNT                       "exposure_burst_count"                   // Sets the number of times of exposure in one frame. 
#define  XI_PRM_GAIN_SELECTOR                              "gain_selector"                          // Gain selector for parameter Gain allows to select different type of gains. XI_GAIN_SELECTOR_TYPE
#define  XI_PRM_GAIN                                       "gain"                                   // Gain in dB 
#define  XI_PRM_DOWNSAMPLING                               "downsampling"                           // Change image resolution by binning or skipping. XI_DOWNSAMPLING_VALUE
#define  XI_PRM_DOWNSAMPLING_TYPE                          "downsampling_type"                      // Change image downsampling type. XI_DOWNSAMPLING_TYPE
#define  XI_PRM_TEST_PATTERN_GENERATOR_SELECTOR            "test_pattern_generator_selector"        // Selects which test pattern generator is controlled by the test pattern feature. XI_TEST_PATTERN_GENERATOR
#define  XI_PRM_TEST_PATTERN                               "test_pattern"                           // Selects which test pattern type is generated by the selected generator. XI_TEST_PATTERN
#define  XI_PRM_IMAGE_DATA_FORMAT                          "imgdataformat"                          // Output data format. XI_IMG_FORMAT
#define  XI_PRM_IMAGE_DATA_SIGN                            "image_data_sign"                        // Signedness of image data. XI_DATA_SM
#define  XI_PRM_SHUTTER_TYPE                               "shutter_type"                           // Change sensor shutter type(CMOS sensor). XI_SHUTTER_TYPE
#define  XI_PRM_SENSOR_TAPS                                "sensor_taps"                            // Number of taps XI_SENSOR_TAP_CNT
#define  XI_PRM_AEAG                                       "aeag"                                   // Automatic exposure/gain 
#define  XI_PRM_AEAG_ROI_OFFSET_X                          "aeag_roi_offset_x"                      // Automatic exposure/gain ROI offset X 
#define  XI_PRM_AEAG_ROI_OFFSET_Y                          "aeag_roi_offset_y"                      // Automatic exposure/gain ROI offset Y 
#define  XI_PRM_AEAG_ROI_WIDTH                             "aeag_roi_width"                         // Automatic exposure/gain ROI Width 
#define  XI_PRM_AEAG_ROI_HEIGHT                            "aeag_roi_height"                        // Automatic exposure/gain ROI Height 
#define  XI_PRM_SENS_DEFECTS_CORR_LIST_SELECTOR            "bpc_list_selector"                      // Selector of list used by Sensor Defects Correction parameter XI_SENS_DEFFECTS_CORR_LIST_SELECTOR
#define  XI_PRM_SENS_DEFECTS_CORR_LIST_CONTENT             "sens_defects_corr_list_content"         // Sets/Gets sensor defects list in special text format 
#define  XI_PRM_SENS_DEFECTS_CORR                          "bpc"                                    // Correction of sensor defects (pixels, columns, rows) enable/disable 
#define  XI_PRM_AUTO_WB                                    "auto_wb"                                // Automatic white balance 
#define  XI_PRM_MANUAL_WB                                  "manual_wb"                              // Calculates White Balance(xiGetImage function must be called) 
#define  XI_PRM_WB_ROI_OFFSET_X                            "wb_roi_offset_x"                        // White balance offset X 
#define  XI_PRM_WB_ROI_OFFSET_Y                            "wb_roi_offset_y"                        // White balance offset Y 
#define  XI_PRM_WB_ROI_WIDTH                               "wb_roi_width"                           // White balance width 
#define  XI_PRM_WB_ROI_HEIGHT                              "wb_roi_height"                          // White balance height 
#define  XI_PRM_WB_KR                                      "wb_kr"                                  // White balance red coefficient 
#define  XI_PRM_WB_KG                                      "wb_kg"                                  // White balance green coefficient 
#define  XI_PRM_WB_KB                                      "wb_kb"                                  // White balance blue coefficient 
#define  XI_PRM_WIDTH                                      "width"                                  // Width of the Image provided by the device (in pixels). 
#define  XI_PRM_HEIGHT                                     "height"                                 // Height of the Image provided by the device (in pixels). 
#define  XI_PRM_OFFSET_X                                   "offsetX"                                // Horizontal offset from the origin to the area of interest (in pixels). 
#define  XI_PRM_OFFSET_Y                                   "offsetY"                                // Vertical offset from the origin to the area of interest (in pixels). 
#define  XI_PRM_REGION_SELECTOR                            "region_selector"                        // Selects Region in Multiple ROI which parameters are set by width, height, ... ,region mode 
#define  XI_PRM_REGION_MODE                                "region_mode"                            // Activates/deactivates Region selected by Region Selector 
#define  XI_PRM_HORIZONTAL_FLIP                            "horizontal_flip"                        // Horizontal flip enable 
#define  XI_PRM_VERTICAL_FLIP                              "vertical_flip"                          // Vertical flip enable 
#define  XI_PRM_INTERLINE_EXPOSURE_MODE                    "interline_exposure_mode"                // Selector for Exposure parameter XI_INTERLINE_EXPOSURE_MODE_TYPE
#define  XI_PRM_FFC                                        "ffc"                                    // Image flat field correction 
#define  XI_PRM_FFC_FLAT_FIELD_FILE_NAME                   "ffc_flat_field_file_name"               // Set name of file to be applied for FFC processor. 
#define  XI_PRM_FFC_DARK_FIELD_FILE_NAME                   "ffc_dark_field_file_name"               // Set name of file to be applied for FFC processor. 
#define  XI_PRM_TOF_READOUT_MODE                           "tof_readout_mode"                       // Sets ToF Readout Mode XI_TOF_READOUT_MODE
#define  XI_PRM_TOF_MODULATION_FREQUENCY                   "tof_modulation_frequency"               // Sets ToF Modulation Frequency in MHz 
#define  XI_PRM_TOF_MULTIPLE_PHASES_IN_BUFFER              "tof_multiple_phases_in_buffer"          // is multiple ToF phases concatenated in buffer 
#define  XI_PRM_TOF_PHASES_COUNT                           "tof_phases_count"                       // Sets the number of tof phases. E.g. 4 for four phases. 
#define  XI_PRM_TOF_PHASE_ANGLE                            "tof_phase_angle"                        // Sets Illumination angle for selected ToF phase 
#define  XI_PRM_TOF_PHASE_EXPOSURE_TIME                    "tof_phase_exposure_time"                // Sets Exposure time for selected ToF phase in microseconds. 
#define  XI_PRM_TOF_PHASE_SELECTOR                         "tof_phase_selector"                     // Selects tof phase 
// Image Format
#define  XI_PRM_BINNING_SELECTOR                           "binning_selector"                       // Binning engine selector. XI_BIN_SELECTOR
#define  XI_PRM_BINNING_VERTICAL_MODE                      "binning_vertical_mode"                  // Sets the mode to use to combine vertical pixel together. XI_BIN_MODE
#define  XI_PRM_BINNING_VERTICAL                           "binning_vertical"                       // Vertical Binning - number of vertical photo-sensitive cells to combine together. 
#define  XI_PRM_BINNING_VERTICAL_FLOAT                     "binning_vertical_float"                 // Vertical Binning Float - number of vertical photo-sensitive cells to combine together. 
#define  XI_PRM_BINNING_HORIZONTAL_MODE                    "binning_horizontal_mode"                // Sets the mode to use to combine horizontal pixel together. XI_BIN_MODE
#define  XI_PRM_BINNING_HORIZONTAL                         "binning_horizontal"                     // Horizontal Binning - number of horizontal photo-sensitive cells to combine together. 
#define  XI_PRM_BINNING_HORIZONTAL_FLOAT                   "binning_horizontal_float"               // Horizontal Binning Float - number of horizontal photo-sensitive cells to combine together. 
#define  XI_PRM_BINNING_HORIZONTAL_PATTERN                 "binning_horizontal_pattern"             // Binning horizontal pattern type. XI_BIN_PATTERN
#define  XI_PRM_BINNING_VERTICAL_PATTERN                   "binning_vertical_pattern"               // Binning vertical pattern type. XI_BIN_PATTERN
#define  XI_PRM_DECIMATION_SELECTOR                        "decimation_selector"                    // Decimation engine selector. XI_DEC_SELECTOR
#define  XI_PRM_DECIMATION_VERTICAL                        "decimation_vertical"                    // Vertical Decimation - vertical sub-sampling of the image - reduces the vertical resolution of the image by the specified vertical decimation factor. 
#define  XI_PRM_DECIMATION_HORIZONTAL                      "decimation_horizontal"                  // Horizontal Decimation - horizontal sub-sampling of the image - reduces the horizontal resolution of the image by the specified vertical decimation factor. 
#define  XI_PRM_DECIMATION_HORIZONTAL_PATTERN              "decimation_horizontal_pattern"          // Decimation horizontal pattern type. XI_DEC_PATTERN
#define  XI_PRM_DECIMATION_VERTICAL_PATTERN                "decimation_vertical_pattern"            // Decimation vertical pattern type. XI_DEC_PATTERN
// AE Setup
#define  XI_PRM_EXP_PRIORITY                               "exp_priority"                           // Exposure priority (0.8 - exposure 80%, gain 20%). 
#define  XI_PRM_AG_MAX_LIMIT                               "ag_max_limit"                           // Maximum limit of gain in AEAG procedure 
#define  XI_PRM_AE_MAX_LIMIT                               "ae_max_limit"                           // Maximum time (us) used for exposure in AEAG procedure 
#define  XI_PRM_AEAG_LEVEL                                 "aeag_level"                             // Average intensity of output signal AEAG should achieve(in %) 
#define  XI_PRM_AEAG_SKIP_FRAMES_COUNT                     "aeag_skip_frames_count"                 // Minimum number of frames to be skipped between AEAG compensation and AEAG re-evaluation 
// Performance
#define  XI_PRM_LIMIT_BANDWIDTH                            "limit_bandwidth"                        // Set/get bandwidth(data rate in Megabits) 
#define  XI_PRM_LIMIT_BANDWIDTH_MODE                       "limit_bandwidth_mode"                   // Bandwidth limit enabled XI_SWITCH
#define  XI_PRM_SENSOR_DATA_BIT_DEPTH                      "sensor_bit_depth"                       // Sensor output data bit depth. XI_BIT_DEPTH
#define  XI_PRM_OUTPUT_DATA_BIT_DEPTH                      "output_bit_depth"                       // Device output data bit depth. XI_BIT_DEPTH
#define  XI_PRM_IMAGE_DATA_BIT_DEPTH                       "image_data_bit_depth"                   // bit depth of data returned by function xiGetImage XI_BIT_DEPTH
#define  XI_PRM_OUTPUT_DATA_PACKING                        "output_bit_packing"                     // Device output data packing (or grouping) enabled. Packing could be enabled if output_data_bit_depth > 8 and packing capability is available. 
#define  XI_PRM_OUTPUT_DATA_PACKING_TYPE                   "output_bit_packing_type"                // Data packing type. Some cameras supports only specific packing type. XI_OUTPUT_DATA_PACKING_TYPE
// Temperature
#define  XI_PRM_IS_COOLED                                  "iscooled"                               // Returns 1 for cameras that support cooling. 
#define  XI_PRM_COOLING                                    "cooling"                                // Temperature control mode. XI_TEMP_CTRL_MODE_SELECTOR
#define  XI_PRM_TARGET_TEMP                                "target_temp"                            // Set sensor target temperature for cooling. 
#define  XI_PRM_TEMP_SELECTOR                              "temp_selector"                          // Selector of mechanical point where thermometer is located. XI_TEMP_SELECTOR
#define  XI_PRM_TEMP                                       "temp"                                   // Camera temperature (selected by XI_PRM_TEMP_SELECTOR) 
#define  XI_PRM_TEMP_CONTROL_MODE                          "device_temperature_ctrl_mode"           // Temperature control mode. XI_TEMP_CTRL_MODE_SELECTOR
#define  XI_PRM_CHIP_TEMP                                  "chip_temp"                              // Camera sensor temperature 
#define  XI_PRM_HOUS_TEMP                                  "hous_temp"                              // Camera housing temperature 
#define  XI_PRM_HOUS_BACK_SIDE_TEMP                        "hous_back_side_temp"                    // Camera housing back side temperature 
#define  XI_PRM_SENSOR_BOARD_TEMP                          "sensor_board_temp"                      // Camera sensor board temperature 
#define  XI_PRM_TEMP_ELEMENT_SEL                           "device_temperature_element_sel"         // Temperature element selector (TEC(Peltier), Fan). XI_TEMP_ELEMENT_SELECTOR
#define  XI_PRM_TEMP_ELEMENT_VALUE                         "device_temperature_element_val"         // Temperature element value in percents of full control range 
// Color Correction
#define  XI_PRM_CMS                                        "cms"                                    // Mode of color management system. XI_CMS_MODE
#define  XI_PRM_CMS_INTENT                                 "cms_intent"                             // Intent of color management system. XI_CMS_INTENT
#define  XI_PRM_APPLY_CMS                                  "apply_cms"                              // Enable applying of CMS profiles to xiGetImage (see XI_PRM_INPUT_CMS_PROFILE, XI_PRM_OUTPUT_CMS_PROFILE). 
#define  XI_PRM_INPUT_CMS_PROFILE                          "input_cms_profile"                      // Filename for input cms profile (e.g. input.icc) 
#define  XI_PRM_OUTPUT_CMS_PROFILE                         "output_cms_profile"                     // Filename for output cms profile (e.g. input.icc) 
#define  XI_PRM_IMAGE_IS_COLOR                             "iscolor"                                // Returns 1 for color cameras. 
#define  XI_PRM_COLOR_FILTER_ARRAY                         "cfa"                                    // Returns color filter array type of RAW data. XI_COLOR_FILTER_ARRAY
#define  XI_PRM_GAMMAY                                     "gammaY"                                 // Luminosity gamma 
#define  XI_PRM_GAMMAC                                     "gammaC"                                 // Chromaticity gamma 
#define  XI_PRM_SHARPNESS                                  "sharpness"                              // Sharpness strength 
#define  XI_PRM_CC_MATRIX_00                               "ccMTX00"                                // Color Correction Matrix element [0][0] 
#define  XI_PRM_CC_MATRIX_01                               "ccMTX01"                                // Color Correction Matrix element [0][1] 
#define  XI_PRM_CC_MATRIX_02                               "ccMTX02"                                // Color Correction Matrix element [0][2] 
#define  XI_PRM_CC_MATRIX_03                               "ccMTX03"                                // Color Correction Matrix element [0][3] 
#define  XI_PRM_CC_MATRIX_10                               "ccMTX10"                                // Color Correction Matrix element [1][0] 
#define  XI_PRM_CC_MATRIX_11                               "ccMTX11"                                // Color Correction Matrix element [1][1] 
#define  XI_PRM_CC_MATRIX_12                               "ccMTX12"                                // Color Correction Matrix element [1][2] 
#define  XI_PRM_CC_MATRIX_13                               "ccMTX13"                                // Color Correction Matrix element [1][3] 
#define  XI_PRM_CC_MATRIX_20                               "ccMTX20"                                // Color Correction Matrix element [2][0] 
#define  XI_PRM_CC_MATRIX_21                               "ccMTX21"                                // Color Correction Matrix element [2][1] 
#define  XI_PRM_CC_MATRIX_22                               "ccMTX22"                                // Color Correction Matrix element [2][2] 
#define  XI_PRM_CC_MATRIX_23                               "ccMTX23"                                // Color Correction Matrix element [2][3] 
#define  XI_PRM_CC_MATRIX_30                               "ccMTX30"                                // Color Correction Matrix element [3][0] 
#define  XI_PRM_CC_MATRIX_31                               "ccMTX31"                                // Color Correction Matrix element [3][1] 
#define  XI_PRM_CC_MATRIX_32                               "ccMTX32"                                // Color Correction Matrix element [3][2] 
#define  XI_PRM_CC_MATRIX_33                               "ccMTX33"                                // Color Correction Matrix element [3][3] 
#define  XI_PRM_DEFAULT_CC_MATRIX                          "defccMTX"                               // Set default Color Correction Matrix 
#define  XI_PRM_CC_MATRIX_NORM                             "ccMTXnorm"                              // Normalize color correction matrix 
// Device IO
#define  XI_PRM_TRG_SOURCE                                 "trigger_source"                         // Defines source of trigger. XI_TRG_SOURCE
#define  XI_PRM_TRG_SOFTWARE                               "trigger_software"                       // Generates an internal trigger. XI_PRM_TRG_SOURCE must be set to TRG_SOFTWARE. 
#define  XI_PRM_TRG_SELECTOR                               "trigger_selector"                       // Selects the type of trigger. XI_TRG_SELECTOR
#define  XI_PRM_TRG_OVERLAP                                "trigger_overlap"                        // The mode of Trigger Overlap. This influences of trigger acception/rejection policy XI_TRG_OVERLAP
#define  XI_PRM_ACQ_FRAME_BURST_COUNT                      "acq_frame_burst_count"                  // Sets number of frames acquired by burst. This burst is used only if trigger is set to FrameBurstStart 
#define  XI_PRM_TIMESTAMP                                  "timestamp"                              // Current value of the device timestamp counter 
// GPIO Setup
#define  XI_PRM_GPI_SELECTOR                               "gpi_selector"                           // Selects GPI XI_GPI_SELECTOR
#define  XI_PRM_GPI_MODE                                   "gpi_mode"                               // Defines GPI functionality XI_GPI_MODE
#define  XI_PRM_GPI_LEVEL                                  "gpi_level"                              // GPI level 
#define  XI_PRM_GPI_LEVEL_AT_IMAGE_EXP_START               "gpi_level_at_image_exp_start"           // GPI Level at image exposure start 
#define  XI_PRM_GPI_LEVEL_AT_IMAGE_EXP_END                 "gpi_level_at_image_exp_end"             // GPI Level at image exposure end 
#define  XI_PRM_GPI_LEVEL_AT_IMAGE_READOUT_END             "gpi_level_at_image_readout_end"         // GPI Level at image readout end 
#define  XI_PRM_GPO_SELECTOR                               "gpo_selector"                           // Selects GPO XI_GPO_SELECTOR
#define  XI_PRM_GPO_MODE                                   "gpo_mode"                               // Defines GPO functionality XI_GPO_MODE
#define  XI_PRM_METADATA_SAMPLING_MODE                     "metadata_sampling_mode"                 // Defines metadata sampling mode XI_METADATA_SAMPLING_MODE
#define  XI_PRM_LED_SELECTOR                               "led_selector"                           // Selects LED XI_LED_SELECTOR
#define  XI_PRM_LED_MODE                                   "led_mode"                               // Defines LED functionality XI_LED_MODE
#define  XI_PRM_DEBOUNCE_EN                                "dbnc_en"                                // Enable/Disable debounce to selected GPI 
// Debounce Setup
#define  XI_PRM_DEBOUNCE_T0                                "dbnc_t0"                                // Debounce time (x * 10us) 
#define  XI_PRM_DEBOUNCE_T1                                "dbnc_t1"                                // Debounce time (x * 10us) 
#define  XI_PRM_DEBOUNCE_POL                               "dbnc_pol"                               // Debounce polarity (pol = 1 t0 - falling edge, t1 - rising edge) 
// Lens Control
#define  XI_PRM_LENS_MODE                                  "lens_mode"                              // Status of lens control interface. This shall be set to XI_ON before any Lens operations. 
#define  XI_PRM_LENS_APERTURE_VALUE                        "lens_aperture_value"                    // Current lens aperture value in stops. Examples: 2.8, 4, 5.6, 8, 11 
#define  XI_PRM_LENS_APERTURE_INDEX                        "lens_aperture_index"                    // Current aperture index as reported by lens. 
#define  XI_PRM_LENS_FOCUS_MOVEMENT_VALUE                  "lens_focus_movement_value"              // Lens current focus movement value to be used by XI_PRM_LENS_FOCUS_MOVE in motor steps. 
#define  XI_PRM_LENS_FOCUS_MOVE                            "lens_focus_move"                        // Moves lens focus motor by steps set in XI_PRM_LENS_FOCUS_MOVEMENT_VALUE. 
#define  XI_PRM_LENS_FOCAL_LENGTH                          "lens_focal_length"                      // Lens focal distance in mm. 
#define  XI_PRM_LENS_FEATURE_SELECTOR                      "lens_feature_selector"                  // Selects the current feature which is accessible by XI_PRM_LENS_FEATURE. XI_LENS_FEATURE
#define  XI_PRM_LENS_FEATURE                               "lens_feature"                           // Allows access to lens feature value currently selected by XI_PRM_LENS_FEATURE_SELECTOR. 
// Device info parameters
#define  XI_PRM_DEVICE_NAME                                "device_name"                            // Return device name 
#define  XI_PRM_DEVICE_TYPE                                "device_type"                            // Return device type 
#define  XI_PRM_DEVICE_MODEL_ID                            "device_model_id"                        // Return device model id 
#define  XI_PRM_SENSOR_MODEL_ID                            "sensor_model_id"                        // Return device sensor model id 
#define  XI_PRM_DEVICE_SN                                  "device_sn"                              // Return device serial number 
#define  XI_PRM_DEVICE_SENS_SN                             "device_sens_sn"                         // Return sensor serial number 
#define  XI_PRM_DEVICE_INSTANCE_PATH                       "device_inst_path"                       // Return device system instance path. 
#define  XI_PRM_DEVICE_LOCATION_PATH                       "device_loc_path"                        // Represents the location of the device in the device tree. 
#define  XI_PRM_DEVICE_USER_ID                             "device_user_id"                         // Return custom ID of camera. 
#define  XI_PRM_DEVICE_MANIFEST                            "device_manifest"                        // Return device capability description XML. 
#define  XI_PRM_IMAGE_USER_DATA                            "image_user_data"                        // User image data at image header to track parameters synchronization. 
// Device acquisition settings
#define  XI_PRM_IMAGE_DATA_FORMAT_RGB32_ALPHA              "imgdataformatrgb32alpha"                // The alpha channel of RGB32 output image format. 
#define  XI_PRM_IMAGE_PAYLOAD_SIZE                         "imgpayloadsize"                         // Buffer size in bytes sufficient for output image returned by xiGetImage 
#define  XI_PRM_TRANSPORT_PIXEL_FORMAT                     "transport_pixel_format"                 // Current format of pixels on transport layer. XI_GenTL_Image_Format_e
#define  XI_PRM_TRANSPORT_DATA_TARGET                      "transport_data_target"                  // Target selector for data - CPU RAM or GPU RAM XI_TRANSPORT_DATA_TARGET_MODE
#define  XI_PRM_SENSOR_CLOCK_FREQ_HZ                       "sensor_clock_freq_hz"                   // Sensor clock frequency in Hz. 
#define  XI_PRM_SENSOR_CLOCK_FREQ_INDEX                    "sensor_clock_freq_index"                // Sensor clock frequency index. Sensor with selected frequencies have possibility to set the frequency only by this index. 
#define  XI_PRM_SENSOR_OUTPUT_CHANNEL_COUNT                "sensor_output_channel_count"            // Number of output channels from sensor used for data transfer. XI_SENSOR_OUTPUT_CHANNEL_COUNT
#define  XI_PRM_FRAMERATE                                  "framerate"                              // Define framerate in Hz 
#define  XI_PRM_COUNTER_SELECTOR                           "counter_selector"                       // Select counter XI_COUNTER_SELECTOR
#define  XI_PRM_COUNTER_VALUE                              "counter_value"                          // Counter status 
#define  XI_PRM_ACQ_TIMING_MODE                            "acq_timing_mode"                        // Type of sensor frames timing. XI_ACQ_TIMING_MODE
#define  XI_PRM_AVAILABLE_BANDWIDTH                        "available_bandwidth"                    // Measure available interface bandwidth (in Megabits) 
#define  XI_PRM_BUFFER_POLICY                              "buffer_policy"                          // Data move policy XI_BP
#define  XI_PRM_LUT_EN                                     "LUTEnable"                              // Activates LUT. 
#define  XI_PRM_LUT_INDEX                                  "LUTIndex"                               // Control the index (offset) of the coefficient to access in the LUT. 
#define  XI_PRM_LUT_VALUE                                  "LUTValue"                               // Value at entry LUTIndex of the LUT 
#define  XI_PRM_TRG_DELAY                                  "trigger_delay"                          // Specifies the delay in microseconds (us) to apply after the trigger reception before activating it. 
#define  XI_PRM_TS_RST_MODE                                "ts_rst_mode"                            // Defines how TimeStamp reset engine will be armed XI_TS_RST_MODE
#define  XI_PRM_TS_RST_SOURCE                              "ts_rst_source"                          // Defines which source will be used for timestamp reset. Writing this parameter will trigger settings of engine (arming) XI_TS_RST_SOURCE
// Extended Device parameters
#define  XI_PRM_IS_DEVICE_EXIST                            "isexist"                                // Returns 1 if camera connected and works properly. 
#define  XI_PRM_ACQ_BUFFER_SIZE                            "acq_buffer_size"                        // Acquisition buffer size in buffer_size_unit. Default bytes. 
#define  XI_PRM_ACQ_BUFFER_SIZE_UNIT                       "acq_buffer_size_unit"                   // Acquisition buffer size unit in bytes. Default 1. E.g. Value 1024 means that buffer_size is in KiBytes 
#define  XI_PRM_ACQ_TRANSPORT_BUFFER_SIZE                  "acq_transport_buffer_size"              // Acquisition transport buffer size in bytes 
#define  XI_PRM_ACQ_TRANSPORT_PACKET_SIZE                  "acq_transport_packet_size"              // Acquisition transport packet size in bytes 
#define  XI_PRM_BUFFERS_QUEUE_SIZE                         "buffers_queue_size"                     // Queue of field/frame buffers 
#define  XI_PRM_ACQ_TRANSPORT_BUFFER_COMMIT                "acq_transport_buffer_commit"            // Total number of buffers to be committed to transport layer. Increasing can enhance transport capacity. E.g. on USB 
#define  XI_PRM_RECENT_FRAME                               "recent_frame"                           // GetImage returns most recent frame 
#define  XI_PRM_DEVICE_RESET                               "device_reset"                           // Resets the camera to default state. 
#define  XI_PRM_CONCAT_IMG_MODE                            "concat_img_mode"                        // Enable/disable the Concatenated Images in One Buffer feature 
#define  XI_PRM_CONCAT_IMG_COUNT                           "concat_img_count"                       // Number of Concatenated Images in One Buffer 
#define  XI_PRM_CONCAT_IMG_TRANSPORT_IMG_OFFSET            "concat_img_transport_img_offset"        // Offset between images data in transport buffer when feature Concatenated Images in One Buffer is enabled 
#define  XI_PRM_PROBE_SELECTOR                             "probe_selector"                         // Select Probe XI_PROBE_SELECTOR
#define  XI_PRM_PROBE_VALUE                                "probe_value"                            // Returns Value of the selected Probe 
// Sensor Defects Correction
#define  XI_PRM_COLUMN_FPN_CORRECTION                      "column_fpn_correction"                  // Correction of column FPN XI_SWITCH
#define  XI_PRM_ROW_FPN_CORRECTION                         "row_fpn_correction"                     // Correction of row FPN XI_SWITCH
#define  XI_PRM_COLUMN_BLACK_OFFSET_CORRECTION             "column_black_offset_correction"         // Correction of column black offset XI_SWITCH
#define  XI_PRM_ROW_BLACK_OFFSET_CORRECTION                "row_black_offset_correction"            // Correction of row black offset XI_SWITCH
// Sensor features
#define  XI_PRM_SENSOR_MODE                                "sensor_mode"                            // Current sensor mode. Allows to select sensor mode by one integer. Setting of this parameter affects: image dimensions and downsampling. XI_SENSOR_MODE
#define  XI_PRM_HDR                                        "hdr"                                    // Enable High Dynamic Range feature. 
#define  XI_PRM_HDR_KNEEPOINT_COUNT                        "hdr_kneepoint_count"                    // The number of kneepoints in the PWLR. 
#define  XI_PRM_HDR_T1                                     "hdr_t1"                                 // position of first kneepoint(in % of XI_PRM_EXPOSURE) 
#define  XI_PRM_HDR_T2                                     "hdr_t2"                                 // position of second kneepoint (in % of XI_PRM_EXPOSURE) 
#define  XI_PRM_KNEEPOINT1                                 "hdr_kneepoint1"                         // value of first kneepoint (% of sensor saturation) 
#define  XI_PRM_KNEEPOINT2                                 "hdr_kneepoint2"                         // value of second kneepoint (% of sensor saturation) 
#define  XI_PRM_IMAGE_BLACK_LEVEL                          "image_black_level"                      // Last image black level counts (same as in XI_IMG). Setting can be used only for Offline Processing. 
#define  XI_PRM_IMAGE_AREA                                 "image_area"                             // Defines image area of sensor as output. XI_IMAGE_AREA_SELECTOR
#define  XI_PRM_DUAL_ADC_MODE                              "dual_adc_mode"                          // Sets DualADC Mode XI_DUAL_ADC_MODE
#define  XI_PRM_DUAL_ADC_GAIN_RATIO                        "dual_adc_gain_ratio"                    // Sets DualADC Gain Ratio in dB 
#define  XI_PRM_DUAL_ADC_THRESHOLD                         "dual_adc_threshold"                     // Sets DualADC Threshold value 
#define  XI_PRM_COMPRESSION_REGION_SELECTOR                "compression_region_selector"            // Sets Compression Region Selector 
#define  XI_PRM_COMPRESSION_REGION_START                   "compression_region_start"               // Sets Compression Region Start 
#define  XI_PRM_COMPRESSION_REGION_GAIN                    "compression_region_gain"                // Sets Compression Region Gain 
// Version info
#define  XI_PRM_VERSION_SELECTOR                           "version_selector"                       // Selects module/unit, which version we get. XI_VERSION
#define  XI_PRM_VERSION                                    "version"                                // Returns version of selected module/unit(XI_PRM_VERSION_SELECTOR). 
#define  XI_PRM_API_VERSION                                "api_version"                            // Returns version of API. 
#define  XI_PRM_DRV_VERSION                                "drv_version"                            // Returns version of current device driver. 
#define  XI_PRM_MCU1_VERSION                               "version_mcu1"                           // Returns version of MCU1 firmware. 
#define  XI_PRM_MCU2_VERSION                               "version_mcu2"                           // Returns version of MCU2 firmware. 
#define  XI_PRM_MCU3_VERSION                               "version_mcu3"                           // Returns version of MCU3 firmware. 
#define  XI_PRM_FPGA1_VERSION                              "version_fpga1"                          // Returns version of FPGA firmware currently running. 
#define  XI_PRM_XMLMAN_VERSION                             "version_xmlman"                         // Returns version of XML manifest. 
#define  XI_PRM_HW_REVISION                                "hw_revision"                            // Returns hardware revision number. 
#define  XI_PRM_FACTORY_SET_VERSION                        "factory_set_version"                    // Returns version of factory set. 
// API features
#define  XI_PRM_DEBUG_LEVEL                                "debug_level"                            // Set debug level XI_DEBUG_LEVEL
#define  XI_PRM_AUTO_BANDWIDTH_CALCULATION                 "auto_bandwidth_calculation"             // Automatic bandwidth calculation, 
#define  XI_PRM_NEW_PROCESS_CHAIN_ENABLE                   "new_process_chain_enable"               // Enables (2015/FAPI) processing chain for MQ MU cameras. If disabled - legacy processing 2006 is used. 
#define  XI_PRM_PROC_NUM_THREADS                           "proc_num_threads"                       // Number of threads per image processor 
// Camera FFS
#define  XI_PRM_READ_FILE_FFS                              "read_file_ffs"                          // Read file from camera flash filesystem. 
#define  XI_PRM_WRITE_FILE_FFS                             "write_file_ffs"                         // Write file to camera flash filesystem. 
#define  XI_PRM_FFS_FILE_NAME                              "ffs_file_name"                          // Set name of file to be written/read from camera FFS. 
#define  XI_PRM_FFS_FILE_ID                                "ffs_file_id"                            // File number. 
#define  XI_PRM_FFS_FILE_SIZE                              "ffs_file_size"                          // Size of file. 
#define  XI_PRM_FREE_FFS_SIZE                              "free_ffs_size"                          // Size of free camera FFS. 
#define  XI_PRM_USED_FFS_SIZE                              "used_ffs_size"                          // Size of used camera FFS. 
#define  XI_PRM_FFS_ACCESS_KEY                             "ffs_access_key"                         // Setting of key enables file operations on some cameras. 
// APIContextControl
#define  XI_PRM_API_CONTEXT_LIST                           "xiapi_context_list"                     // List of current parameters settings context - parameters with values. Used for offline processing. 
// Sensor Control
#define  XI_PRM_SENSOR_FEATURE_SELECTOR                    "sensor_feature_selector"                // Selects the current feature which is accessible by XI_PRM_SENSOR_FEATURE_VALUE. XI_SENSOR_FEATURE_SELECTOR
#define  XI_PRM_SENSOR_FEATURE_VALUE                       "sensor_feature_value"                   // Allows access to sensor feature value currently selected by XI_PRM_SENSOR_FEATURE_SELECTOR. 
// Extended Features
#define  XI_PRM_ACQUISITION_STATUS_SELECTOR                "acquisition_status_selector"            // Selects the internal acquisition signal to read using XI_PRM_ACQUISITION_STATUS. XI_ACQUISITION_STATUS_SELECTOR
#define  XI_PRM_ACQUISITION_STATUS                         "acquisition_status"                     // Acquisition status(True/False) XI_SWITCH
#define  XI_PRM_DP_UNIT_SELECTOR                           "dp_unit_selector"                       // Data Pipe Unit Selector. XI_DP_UNIT_SELECTOR
#define  XI_PRM_DP_PROC_SELECTOR                           "dp_proc_selector"                       // Data Pipe Processor Selector. XI_DP_PROC_SELECTOR
#define  XI_PRM_DP_PARAM_SELECTOR                          "dp_param_selector"                      // Data Pipe Processor parameter Selector. XI_DP_PARAM_SELECTOR
#define  XI_PRM_DP_PARAM_VALUE                             "dp_param_value"                         // Data Pipe processor parameter value 
#define  XI_PRM_GENTL_DATASTREAM_ENABLED                   "gentl_stream_en"                        // Enable or disable low level streaming via GenTL. 
#define  XI_PRM_GENTL_DATASTREAM_CONTEXT                   "gentl_stream_context"                   // Get GenTL stream context pointer for low level streaming 
// User Set Control
#define  XI_PRM_USER_SET_SELECTOR                          "user_set_selector"                      // Selects the feature User Set to load, save or configure. XI_USER_SET_SELECTOR
#define  XI_PRM_USER_SET_LOAD                              "user_set_load"                          // Loads the User Set specified by User Set Selector to the device and makes it active. 
#define  XI_PRM_USER_SET_DEFAULT                           "user_set_default"                       // Selects the feature User Set to load and make active by default when the device is reset. Change might affect default mode in other applications, e.g. CamTool. XI_USER_SET_SELECTOR

//-------------------------------------------------------------------------------------------------------------------
// Error codes xiApi
typedef enum
{	
	XI_OK                                       = 0, // Function call succeeded
	XI_INVALID_HANDLE                           = 1, // Invalid handle
	XI_READREG                                  = 2, // Register read error
	XI_WRITEREG                                 = 3, // Register write error
	XI_FREE_RESOURCES                           = 4, // Freeing resources error
	XI_FREE_CHANNEL                             = 5, // Freeing channel error
	XI_FREE_BANDWIDTH                           = 6, // Freeing bandwith error
	XI_READBLK                                  = 7, // Read block error
	XI_WRITEBLK                                 = 8, // Write block error
	XI_NO_IMAGE                                 = 9, // No image
	XI_TIMEOUT                                  =10, // Timeout
	XI_INVALID_ARG                              =11, // Invalid arguments supplied
	XI_NOT_SUPPORTED                            =12, // Not supported
	XI_ISOCH_ATTACH_BUFFERS                     =13, // Attach buffers error
	XI_GET_OVERLAPPED_RESULT                    =14, // Overlapped result
	XI_MEMORY_ALLOCATION                        =15, // Memory allocation error
	XI_DLLCONTEXTISNULL                         =16, // DLL context is NULL
	XI_DLLCONTEXTISNONZERO                      =17, // DLL context is non zero
	XI_DLLCONTEXTEXIST                          =18, // DLL context exists
	XI_TOOMANYDEVICES                           =19, // Too many devices connected
	XI_ERRORCAMCONTEXT                          =20, // Camera context error
	XI_UNKNOWN_HARDWARE                         =21, // Unknown hardware
	XI_INVALID_TM_FILE                          =22, // Invalid TM file
	XI_INVALID_TM_TAG                           =23, // Invalid TM tag
	XI_INCOMPLETE_TM                            =24, // Incomplete TM
	XI_BUS_RESET_FAILED                         =25, // Bus reset error
	XI_NOT_IMPLEMENTED                          =26, // Not implemented
	XI_SHADING_TOOBRIGHT                        =27, // Shading is too bright
	XI_SHADING_TOODARK                          =28, // Shading is too dark
	XI_TOO_LOW_GAIN                             =29, // Gain is too low
	XI_INVALID_BPL                              =30, // Invalid sensor defect correction list
	XI_BPL_REALLOC                              =31, // Error while sensor defect correction list reallocation
	XI_INVALID_PIXEL_LIST                       =32, // Invalid pixel list
	XI_INVALID_FFS                              =33, // Invalid Flash File System
	XI_INVALID_PROFILE                          =34, // Invalid profile
	XI_INVALID_CALIBRATION                      =35, // Invalid calibration
	XI_INVALID_BUFFER                           =36, // Invalid buffer
	XI_INVALID_DATA                             =38, // Invalid data
	XI_TGBUSY                                   =39, // Timing generator is busy
	XI_IO_WRONG                                 =40, // Wrong operation open/write/read/close
	XI_ACQUISITION_ALREADY_UP                   =41, // Acquisition already started
	XI_OLD_DRIVER_VERSION                       =42, // Old version of device driver installed to the system.
	XI_GET_LAST_ERROR                           =43, // To get error code please call GetLastError function.
	XI_CANT_PROCESS                             =44, // Data cannot be processed
	XI_ACQUISITION_STOPED                       =45, // Acquisition is stopped. It needs to be started to perform operation.
	XI_ACQUISITION_STOPED_WERR                  =46, // Acquisition has been stopped with an error.
	XI_INVALID_INPUT_ICC_PROFILE                =47, // Input ICC profile missing or corrupted
	XI_INVALID_OUTPUT_ICC_PROFILE               =48, // Output ICC profile missing or corrupted
	XI_DEVICE_NOT_READY                         =49, // Device not ready to operate
	XI_SHADING_TOOCONTRAST                      =50, // Shading is too contrast
	XI_ALREADY_INITIALIZED                      =51, // Module already initialized
	XI_NOT_ENOUGH_PRIVILEGES                    =52, // Application does not have enough privileges (one or more app)
	XI_NOT_COMPATIBLE_DRIVER                    =53, // Installed driver is not compatible with current software
	XI_TM_INVALID_RESOURCE                      =54, // TM file was not loaded successfully from resources
	XI_DEVICE_HAS_BEEN_RESETED                  =55, // Device has been reset, abnormal initial state
	XI_NO_DEVICES_FOUND                         =56, // No Devices Found
	XI_RESOURCE_OR_FUNCTION_LOCKED              =57, // Resource (device) or function locked by mutex
	XI_BUFFER_SIZE_TOO_SMALL                    =58, // Buffer provided by user is too small
	XI_COULDNT_INIT_PROCESSOR                   =59, // Could not initialize processor.
	XI_NOT_INITIALIZED                          =60, // The object/module/procedure/process being referred to has not been started.
	XI_RESOURCE_NOT_FOUND                       =61, // Resource not found(could be processor, file, item...).
	XI_UNKNOWN_PARAM                            =100, // Unknown parameter
	XI_WRONG_PARAM_VALUE                        =101, // Wrong parameter value
	XI_WRONG_PARAM_TYPE                         =103, // Wrong parameter type
	XI_WRONG_PARAM_SIZE                         =104, // Wrong parameter size
	XI_BUFFER_TOO_SMALL                         =105, // Input buffer is too small
	XI_NOT_SUPPORTED_PARAM                      =106, // Parameter is not supported
	XI_NOT_SUPPORTED_PARAM_INFO                 =107, // Parameter info not supported
	XI_NOT_SUPPORTED_DATA_FORMAT                =108, // Data format is not supported
	XI_READ_ONLY_PARAM                          =109, // Read only parameter
	XI_BANDWIDTH_NOT_SUPPORTED                  =111, // This camera does not support currently available bandwidth
	XI_INVALID_FFS_FILE_NAME                    =112, // FFS file selector is invalid or NULL
	XI_FFS_FILE_NOT_FOUND                       =113, // FFS file not found
	XI_PARAM_NOT_SETTABLE                       =114, // Parameter value cannot be set (might be out of range or invalid).
	XI_SAFE_POLICY_NOT_SUPPORTED                =115, // Safe buffer policy is not supported. E.g. when transport target is set to GPU (GPUDirect).
	XI_GPUDIRECT_NOT_AVAILABLE                  =116, // GPUDirect is not available. E.g. platform isn't supported or CUDA toolkit isn't installed.
	XI_INCORRECT_SENS_ID_CHECK                  =117, // Incorrect sensor board unique identifier checksum.
	XI_INCORRECT_FPGA_TYPE                      =118, // Incorrect or unknown FPGA firmware type used for camera.
	XI_PARAM_CONDITIONALLY_NOT_AVAILABLE        =119, // Parameter is not available in current context. Available only if another feature is turned on.
	XI_ERR_FRAME_BUFFER_RAM_INIT                =120, // Frame buffer RAM initialization error.
	XI_NOT_SUPPORTED_WHILE_ACQUISITION          =121, // Parameter is not supported while acquisition is running.
	XI_PROC_OTHER_ERROR                         =201, // Processing error - other
	XI_PROC_PROCESSING_ERROR                    =202, // Error while image processing.
	XI_PROC_INPUT_FORMAT_UNSUPPORTED            =203, // Input format is not supported for processing.
	XI_PROC_OUTPUT_FORMAT_UNSUPPORTED           =204, // Output format is not supported for processing.
	XI_OUT_OF_RANGE                             =205, // Parameter value is out of range
	
}XI_RET;

		
//-------------------------------------------------------------------------------------------------------------------
// Enumeration of XIMEA ImageProcessing Result Codes
typedef enum		
{
	XIPR_OK                                     =   0, // Result OK
	XIPR_INVALID_ARG                            =1001, // Invalid argument detected (out of range)
	XIPR_NOT_IMPLEMENTED                        =1002, // Implementation is not yet done
	XIPR_NOT_SUPPORTED                          =1003, // This value is not supported
	XIPR_UNKNOWN_PARAM                          =1004, // Using of unknown parameter
	XIPR_INPUT_BUFFER_NOT_ALLOCATED             =1005, // Input buffer is not allocated
	XIPR_OUTPUT_BUFFER_NOT_ALLOCATED            =1006, // Output buffer is not allocated
	XIPR_OUTPUT_BUFFER_MEMORY_ALLOCATION_ERROR  =1007, // Output buffer allocation error
	XIPR_NO_PROCESSORS_AVAILABLE                =1008, // There are no processors in chain
	XIPR_INVALID_REQUIREMENTS                   =1009, // Some requirement is not met
	XIPR_NO_MORE_SPACE_IN_PROCESSORS_CHAIN      =1010, // Processors chain is full
	XIPR_PROCESSOR_NOT_INITIALIZED              =1011, // Processor is not initialized yet
	XIPR_PROCESSING_ERROR                       =1012, // Processor generates error
	XIPR_UNKNOWN_DATA_FORMAT                    =1013, // Unknown data format
	XIPR_UNKNOWN_CFA_PATTERN                    =1014, // Unknown color filter array pattern type
	XIPR_UNKNOWN_LOAD_LIBRARY                   =1020, // Couldn't load library
	XIPR_UNKNOWN_LOAD_LIBRARY_FUNC              =1021, // Couldn't load function
	XIPR_UNKNOWN_OPEN_PROCESS                   =1022, // Couldn't open process
	XIPR_UNKNOWN_BPL_STRING                     =1023, // Couldn't open process
	XIPR_UNSUPPORTED_INPUT_FORMAT               =1024, // Unsupported input format
	XIPR_UNSUPPORTED_OUTPUT_FORMAT              =1025, // Unsupported output format
	XIPR_IMAGE_INTENSITY_OUT_OF_RANGE           =1026, // Image intensity is our of range
	XIPR_TIMEOUT_WAITING_FOR_EVENT              =1027, // Timeout waiting for event
	XIPR_PROCESSOR_EXECUTION_DISABLED           =1028, // Processor execution disabled
	XIPR_DEFECT_ALREADY_IN_LIST                 =1029, // Defect already in list
	XIPR_ERROR_OPEN_FILE                        =1030, // Couldn't open input file
	XIPR_ERROR_MEMORY_ALLOCATE                  =1031, // Couldn't allocate memory
	XIPR_ERROR_READ_OPERATION                   =1032, // Couldn't read
	XIPR_ERROR_WRITE_OPERATION                  =1033, // Couldn't write
	XIPR_READ_ONLY_OPERATION                    =1034, // Operation is read only
	XIPR_FFC_INCORRECT_DATA_FORMAT              =1035, // Input data not compatible with current FFC processor settings
	XIPR_IMAGE_CANT_PROCESSED_DUETO_WIDTH_ALIGNMENT=1036, // Image can't be processed due to image width alignment is not supported by Image Processor.
	
}xip_res;

//-------------------------------------------------------------------------------------------------------------------
// xiAPI enumerators
// Downsampling value enumerator.
typedef enum
{
	XI_DWN_1x1                   =1, // 1 sensor pixel = 1 image pixel
	XI_DWN_2x2                   =2, // 2x2 sensor pixels = 1 image pixel
	XI_DWN_3x3                   =3, // Downsampling 3x3.
	XI_DWN_4x4                   =4, // 4x4 sensor pixels = 1 image pixel
	XI_DWN_5x5                   =5, // Downsampling 5x5.
	XI_DWN_6x6                   =6, // Downsampling 6x6.
	XI_DWN_7x7                   =7, // Downsampling 7x7.
	XI_DWN_8x8                   =8, // Downsampling 8x8.
	XI_DWN_9x9                   =9, // Downsampling 9x9.
	XI_DWN_10x10                 =10, // Downsampling 10x10.
	XI_DWN_16x16                 =16, // Downsampling 16x16.
	
} XI_DOWNSAMPLING_VALUE;

// Test Pattern Generator
typedef enum
{
	XI_TESTPAT_GEN_SENSOR        =0, // Sensor test pattern generator
	XI_TESTPAT_GEN_FPGA          =1, //  FPGA Test Pattern Generator
	XI_TESTPAT_GEN_MCU           =2, //  MCU Test Pattern Generator
	
} XI_TEST_PATTERN_GENERATOR;

// Module/Unit version selector
typedef enum
{
	XI_VER_API                   =0, // version of API
	XI_VER_DRV                   =1, // version of device driver
	XI_VER_MCU1                  =2, // version of MCU1 firmware.
	XI_VER_MCU2                  =3, // version of MCU2 firmware.
	XI_VER_MCU3                  =4, // version of MCU3 firmware.
	XI_VER_FPGA1                 =5, // version of FPGA1 firmware.
	XI_VER_XMLMAN                =6, // version of XML manifest.
	XI_VER_HW_REV                =7, // version of hardware revision.
	XI_VER_FACTORY_SET           =8, // version of factory set.
	
} XI_VERSION;

// Test Pattern Type
typedef enum
{
	XI_TESTPAT_OFF               =0, //  Testpattern turned off.
	XI_TESTPAT_BLACK             =1, //  Image is filled with darkest possible image.
	XI_TESTPAT_WHITE             =2, //  Image is filled with brightest possible image.
	XI_TESTPAT_GREY_HORIZ_RAMP   =3, //  Image is filled horizontally with an image that goes from the darkest possible value to the brightest.
	XI_TESTPAT_GREY_VERT_RAMP    =4, //  Image is filled vertically with an image that goes from the darkest possible value to the brightest.
	XI_TESTPAT_GREY_HORIZ_RAMP_MOVING=5, //  Image is filled horizontally with an image that goes from the darkest possible value to the brightest and moves from left to right.
	XI_TESTPAT_GREY_VERT_RAMP_MOVING=6, //  Image is filled vertically with an image that goes from the darkest possible value to the brightest and moves from left to right.
	XI_TESTPAT_HORIZ_LINE_MOVING =7, //  A moving horizontal line is superimposed on the live image.
	XI_TESTPAT_VERT_LINE_MOVING  =8, //  A moving vertical line is superimposed on the live image.
	XI_TESTPAT_COLOR_BAR         =9, //  Image is filled with stripes of color including White, Black, Red, Green, Blue, Cyan, Magenta and Yellow.
	XI_TESTPAT_FRAME_COUNTER     =10, //  A frame counter is superimposed on the live image.
	XI_TESTPAT_DEVICE_SPEC_COUNTER=11, //  128bit counter.
	
} XI_TEST_PATTERN;

// Decimation Pattern Format
typedef enum
{
	XI_DEC_MONO                  =1, // adjacent pixels are decimated
	XI_DEC_BAYER                 =2, // 	Bayer pattern is preserved during pixel decimation
	
} XI_DEC_PATTERN;

// Binning Pattern Format
typedef enum
{
	XI_BIN_MONO                  =1, // adjacent pixels are combined
	XI_BIN_BAYER                 =2, // Bayer pattern is preserved during pixel combining
	
} XI_BIN_PATTERN;

// Binning Engine Selector
typedef enum
{
	XI_BIN_SELECT_SENSOR         =0, // parameters for image sensor binning are selected
	XI_BIN_SELECT_DEVICE_FPGA    =1, // parameters for device (camera) FPGA decimation are selected
	XI_BIN_SELECT_HOST_CPU       =2, // parameters for Host CPU binning are selected
	
} XI_BIN_SELECTOR;

// Selects binning mode; to be used with
typedef enum
{
	XI_BIN_MODE_SUM              =0, // The response from the combined pixels will be added, resulting in increased sensitivity.
	XI_BIN_MODE_AVERAGE          =1, // The response from the combined pixels will be averaged, resulting in increased signal/noise ratio.
	
} XI_BIN_MODE;

// Decimation Engine Selector
typedef enum
{
	XI_DEC_SELECT_SENSOR         =0, // parameters for image sensor decimation are selected
	XI_DEC_SELECT_DEVICE_FPGA    =1, // parameters for device (camera) FPGA decimation are selected
	XI_DEC_SELECT_HOST_CPU       =2, // parameters for Host CPU decimation are selected
	
} XI_DEC_SELECTOR;

// Sensor tap count enumerator.
typedef enum
{
	XI_TAP_CNT_1                 =1, // 1 sensor tap selected.
	XI_TAP_CNT_2                 =2, // 2 sensor taps selected.
	XI_TAP_CNT_4                 =4, // 4 sensor taps selected.
	
} XI_SENSOR_TAP_CNT;

// Bit depth enumerator.
typedef enum
{
	XI_BPP_8                     =8, // 8 bit per pixel
	XI_BPP_9                     =9, // 9 bit per pixel
	XI_BPP_10                    =10, // 10 bit per pixel
	XI_BPP_11                    =11, // 11 bit per pixel
	XI_BPP_12                    =12, // 12 bit per pixel
	XI_BPP_13                    =13, // 13 bit per pixel
	XI_BPP_14                    =14, // 14 bit per pixel
	XI_BPP_15                    =15, // 15 bit per pixel
	XI_BPP_16                    =16, // 16 bit per pixel
	XI_BPP_24                    =24, // 24 bit per pixel
	XI_BPP_32                    =32, // 32 bit per pixel
	
} XI_BIT_DEPTH;

// Debug level enumerator.
typedef enum
{
	XI_DL_DETAIL                 =0, // (see Note1)
	XI_DL_TRACE                  =1, // Prints errors, warnings and important informations
	XI_DL_WARNING                =2, // Prints all errors and warnings
	XI_DL_ERROR                  =3, // Prints all errors
	XI_DL_FATAL                  =4, // Prints only important errors
	XI_DL_DISABLED               =100, // Prints no messages
	
} XI_DEBUG_LEVEL;

// Image output format enumerator.
typedef enum
{
	XI_MONO8                     =0, // 8 bits per pixel. 	[Intensity] (see Note5,Note6)
	XI_MONO16                    =1, // 16 bits per pixel. [Intensity LSB] [Intensity MSB] (see Note5,Note6)
	XI_RGB24                     =2, // RGB data format. [Blue][Green][Red] (see Note5)
	XI_RGB32                     =3, // RGBA data format. 	[Blue][Green][Red][0] (see Note5)
	XI_RGB_PLANAR                =4, // RGB planar data format. [Red][Red]...[Green][Green]...[Blue][Blue]... (see Note5)
	XI_RAW8                      =5, // 8 bits per pixel raw data from sensor. 	[pixel byte] raw data from transport (camera output)
	XI_RAW16                     =6, // 16 bits per pixel raw data from sensor. 	[pixel byte low] [pixel byte high] 16 bits (depacked) raw data
	XI_FRM_TRANSPORT_DATA        =7, // Data from transport layer (e.g. packed). Depends on data on the transport layer (see Note7)
	XI_RGB48                     =8, // RGB data format. [Blue low byte][Blue high byte][Green low][Green high][Red low][Red high] (see Note5)
	XI_RGB64                     =9, // RGBA data format. [Blue low byte][Blue high byte][Green low][Green high][Red low][Red high][0][0] (Note5)
	XI_RGB16_PLANAR              =10, // RGB16 planar data format
	XI_RAW8X2                    =11, // 8 bits per pixel raw data from sensor(2 components in a row). [ch1 pixel byte] [ch2 pixel byte] 8 bits raw data from 2 channels (e.g. high gain and low gain channels of sCMOS cameras)
	XI_RAW8X4                    =12, // 8 bits per pixel raw data from sensor(4 components in a row). 	[ch1 pixel byte [ch2 pixel byte] [ch3 pixel byte] [ch4 pixel byte] 8 bits raw data from 4 channels (e.g. sCMOS cameras)
	XI_RAW16X2                   =13, // 16 bits per pixel raw data from sensor(2 components in a row). 	[ch1 pixel byte low] [ch1 pixel byte high] [ch2 pixel byte low] [ch2 pixel byte high] 16 bits (depacked) raw data from 2 channels (e.g. high gain and low gain channels of sCMOS cameras)
	XI_RAW16X4                   =14, // 16 bits per pixel raw data from sensor(4 components in a row). 	[ch1 pixel byte low] [ch1 pixel byte high] [ch2 pixel byte low] [ch2 pixel byte high] [ch3 pixel byte low] [ch3 pixel byte high] [ch4 pixel byte low] [ch4 pixel byte high] 16 bits (depacked) raw data from 4 channels (e.g. sCMOS cameras)
	XI_RAW32                     =15, // 32 bits per pixel raw data from sensor in integer format (LSB first). 4 bytes (LSB first) pixel (depacked) raw data
	XI_RAW32FLOAT                =16, // 32 bits per pixel raw data from sensor in single-precision floating point format. 4 bytes per pixel (depacked) raw data
	XI_RAW8X3                    =17, // 8 bits per pixel raw data from sensor(3 components in a row). 	[ch1 pixel byte] [ch2 pixel byte] [ch3 pixel byte] raw data from 3 channels (e.g. ToF cameras)
	XI_RAW16X3                   =18, // 16 bits per pixel raw data from sensor(3 components in a row). [ch1 pixel byte low] [ch1 pixel byte high] [ch2 pixel byte low] [ch2 pixel byte high] [ch3 pixel byte low] [ch3 pixel byte high] 16 bits (depacked) raw data from 3 channels (e.g. ToF cameras)
	
} XI_IMG_FORMAT;

// Bayer color matrix enumerator.
typedef enum
{
	XI_CFA_NONE                  =0, // Result pixels have no filters applied in this format
	XI_CFA_BAYER_RGGB            =1, // Regular RGGB
	XI_CFA_CMYG                  =2, // AK Sony sens
	XI_CFA_RGR                   =3, // 2R+G readout
	XI_CFA_BAYER_BGGR            =4, // BGGR readout
	XI_CFA_BAYER_GRBG            =5, // GRBG readout
	XI_CFA_BAYER_GBRG            =6, // GBRG readout
	XI_CFA_POLAR_A_BAYER_BGGR    =7, // BGGR polarized 4x4 macropixel
	XI_CFA_POLAR_A               =8, // Polarized 2x2 macropixel
	XI_CFA_TOF_ANB               =9, // ToF A and B
	XI_CFA_TOF_AMB               =10, // ToF A minus B
	XI_CFA_TOF_APB               =11, // ToF A plus B
	XI_CFA_TOF_A                 =12, // ToF A only
	XI_CFA_TOF_B                 =13, // ToF B only
	XI_CFA_TOF_X1X2X3            =14, // ToF X1,X2,X3
	
} XI_COLOR_FILTER_ARRAY;

// Image sequence type.
typedef enum
{
	XI_IMAGE_SEQUENCE_TYPE_DISABLED=0, // No image sequence.
	XI_IMAGE_SEQUENCE_TYPE_EXPOSURES=1, // Image sequence off different exposures. E.g. for HDR.
	
} XI_IMAGE_SEQUENCE_TYPE;

// structure containing information about buffer policy(can be safe, data will be copied to user/app buffer or unsafe, user will get internally allocated buffer without data copy).
typedef enum
{
	XI_BP_UNSAFE                 =0, // User gets pointer to internally allocated circle buffer and data may be overwritten by device.
	XI_BP_SAFE                   =1, // Data from device will be copied to user allocated buffer or xiApi allocated memory.
	
} XI_BP;

// structure containing information about trigger source
typedef enum
{
	XI_TRG_OFF                   =0, // Capture of next image is automatically started after previous.
	XI_TRG_EDGE_RISING           =1, // Capture is started on rising edge of selected input.
	XI_TRG_EDGE_FALLING          =2, // Capture is started on falling edge of selected input
	XI_TRG_SOFTWARE              =3, // Capture is started with software trigger.
	XI_TRG_LEVEL_HIGH            =4, // Specifies that the trigger is considered valid as long as the level of the source signal is high.
	XI_TRG_LEVEL_LOW             =5, // Specifies that the trigger is considered valid as long as the level of the source signal is low.
	
} XI_TRG_SOURCE;

// structure containing information about trigger functionality
typedef enum
{
	XI_TRG_SEL_FRAME_START       =0, // Trigger starts the capture of one frame
	XI_TRG_SEL_EXPOSURE_ACTIVE   =1, // Trigger controls the start and length of the exposure.
	XI_TRG_SEL_FRAME_BURST_START =2, // Trigger starts the capture of the bursts of frames in an acquisition.
	XI_TRG_SEL_FRAME_BURST_ACTIVE=3, // Trigger controls the duration of the capture of the bursts of frames in an acquisition.
	XI_TRG_SEL_MULTIPLE_EXPOSURES=4, // Trigger which when first trigger starts exposure and consequent pulses are gating exposure(active HI)
	XI_TRG_SEL_EXPOSURE_START    =5, // Trigger controls the start of the exposure of one Frame.
	XI_TRG_SEL_MULTI_SLOPE_PHASE_CHANGE=6, // Trigger controls the multi slope phase in one Frame (phase0 -> phase1) or (phase1 -> phase2).
	XI_TRG_SEL_ACQUISITION_START =7, // Selects a trigger that starts the Acquisition.
	
} XI_TRG_SELECTOR;

// Trigger overlap modes
typedef enum
{
	XI_TRG_OVERLAP_OFF           =0, // No trigger overlap is permitted.
	XI_TRG_OVERLAP_READ_OUT      =1, // Trigger is accepted immediately after the exposure period. (see Note1)
	XI_TRG_OVERLAP_PREV_FRAME    =2, // Trigger is accepted (latched) at any time during the capture of the previous frame.
	
} XI_TRG_OVERLAP;

// structure containing information about acquisition timing modes
typedef enum
{
	XI_ACQ_TIMING_MODE_FREE_RUN  =0, // camera acquires images at a maximum possible framerate
	XI_ACQ_TIMING_MODE_FRAME_RATE=1, // Selects a mode when sensor frame acquisition frequency is set to parameter FRAMERATE
	XI_ACQ_TIMING_MODE_FRAME_RATE_LIMIT=2, // Selects a mode when sensor frame acquisition frequency is limited by parameter FRAMERATE
	
} XI_ACQ_TIMING_MODE;

// Enumerator for data target modes
typedef enum
{
	XI_TRANSPORT_DATA_TARGET_CPU_RAM=0, // normal CPU memory buffer is used for image data
	XI_TRANSPORT_DATA_TARGET_GPU_RAM=1, // data is delivered straight to GPU memory using GPUDirect technology
	XI_TRANSPORT_DATA_TARGET_UNIFIED=2, // CUDA managed memory is used for image data.
	XI_TRANSPORT_DATA_TARGET_ZEROCOPY=3, // CUDA zerocopy memory is used for image data.
	
} XI_TRANSPORT_DATA_TARGET_MODE;

// Enumeration for XI_PRM_GPI_SELECTOR for CB cameras.
typedef enum
{
	XI_GPI_SEL_CB_IN1            =1, // Input1 - Pin3 (Opto Isolated).
	XI_GPI_SEL_CB_IN2            =2, // Input2 - Pin4 (Opto Isolated).
	XI_GPI_SEL_CB_INOUT1         =3, // Input/Output1 - Pin6
	XI_GPI_SEL_CB_INOUT2         =4, // Input/Output2 - Pin7
	XI_GPI_SEL_CB_INOUT3         =5, // Input/Output3 - Pin11
	XI_GPI_SEL_CB_INOUT4         =6, // Input/Output4 - Pin12
	
} XI_GPI_SEL_CB;

// Enumeration for XI_PRM_GPO_SELECTOR for CB cameras.
typedef enum
{
	XI_GPO_SEL_CB_OUT1           =1, // Output1 - Pin8 (Opto Isolated).
	XI_GPO_SEL_CB_OUT2           =2, // Output2 - Pin9 (Opto Isolated).
	XI_GPO_SEL_CB_INOUT1         =3, // Input/Output1 - Pin6
	XI_GPO_SEL_CB_INOUT2         =4, // Input/Output2 - Pin7
	XI_GPO_SEL_CB_INOUT3         =5, // Input/Output3 - Pin11
	XI_GPO_SEL_CB_INOUT4         =6, // Input/Output4 - Pin12
	
} XI_GPO_SEL_CB;

// structure containing information about GPI functionality
typedef enum
{
	XI_GPI_OFF                   =0, // Input is not used for triggering, but can be used to get parameter GPI_LEVEL. This can be used to switch I/O line on some cameras to input mode.
	XI_GPI_TRIGGER               =1, // Input can be used for triggering.
	XI_GPI_EXT_EVENT             =2, // External signal input (not implemented)
	
} XI_GPI_MODE;

// Enumerator for GPI port selection.
typedef enum
{
	XI_GPI_PORT1                 =1, // GPI port 1
	XI_GPI_PORT2                 =2, // GPI port 2
	XI_GPI_PORT3                 =3, // GPI port 3
	XI_GPI_PORT4                 =4, // GPI port 4
	XI_GPI_PORT5                 =5, // GPI port 5
	XI_GPI_PORT6                 =6, // GPI port 6
	XI_GPI_PORT7                 =7, // GPI port 7
	XI_GPI_PORT8                 =8, // GPI port 8
	XI_GPI_PORT9                 =9, // GPI port 9
	XI_GPI_PORT10                =10, // GPI port 10
	XI_GPI_PORT11                =11, // GPI port 11
	XI_GPI_PORT12                =12, // GPI port 12
	
} XI_GPI_SELECTOR;

// structure containing information about GPO functionality
typedef enum
{
	XI_GPO_OFF                   =0, // Output is off (zero voltage or switched_off)
	XI_GPO_ON                    =1, // Output is on (voltage or switched_on)
	XI_GPO_FRAME_ACTIVE          =2, // Output is on while frame exposure,read,transfer.
	XI_GPO_FRAME_ACTIVE_NEG      =3, // Output is off while frame exposure,read,transfer.
	XI_GPO_EXPOSURE_ACTIVE       =4, // Output is on while frame exposure
	XI_GPO_EXPOSURE_ACTIVE_NEG   =5, // Output is off while frame exposure
	XI_GPO_FRAME_TRIGGER_WAIT    =6, // Output is on while camera is ready for trigger
	XI_GPO_FRAME_TRIGGER_WAIT_NEG=7, // Output is off while camera is ready for trigger.
	XI_GPO_EXPOSURE_PULSE        =8, // Output is on short pulse at the beginning of frame exposure.
	XI_GPO_EXPOSURE_PULSE_NEG    =9, // Output is off short pulse at the beginning of frame exposure.
	XI_GPO_BUSY                  =10, // Output is on when camera has received trigger until end of transfer
	XI_GPO_BUSY_NEG              =11, // Output is off when camera has received trigger until end of transfer
	XI_GPO_HIGH_IMPEDANCE        =12, // Associated pin is in high impedance (tri-stated) and can be driven externally. E.g. for triggering or reading status by GPI_LEVEL.
	XI_GPO_FRAME_BUFFER_OVERFLOW =13, // Frame buffer overflow status.
	XI_GPO_EXPOSURE_ACTIVE_FIRST_ROW=14, // Output is on while the first row exposure.
	XI_GPO_EXPOSURE_ACTIVE_FIRST_ROW_NEG=15, // Output is off while the first row exposure.
	XI_GPO_EXPOSURE_ACTIVE_ALL_ROWS=16, // Output is on while all rows exposure together.
	XI_GPO_EXPOSURE_ACTIVE_ALL_ROWS_NEG=17, // Output is off while all rows exposure together.
	XI_GPO_TXD                   =18, // Output is connected to TXD of UART module
	
} XI_GPO_MODE;

// Enumerator for GPO port selection.
typedef enum
{
	XI_GPO_PORT1                 =1, // GPO port 1
	XI_GPO_PORT2                 =2, // GPO port 2
	XI_GPO_PORT3                 =3, // GPO port 3
	XI_GPO_PORT4                 =4, // GPO port 4
	XI_GPO_PORT5                 =5, // GPO port 5
	XI_GPO_PORT6                 =6, // GPO port 6
	XI_GPO_PORT7                 =7, // GPO port 7
	XI_GPO_PORT8                 =8, // GPO port 8
	XI_GPO_PORT9                 =9, // GPO port 9
	XI_GPO_PORT10                =10, // GPO port 10
	XI_GPO_PORT11                =11, // GPO port 11
	XI_GPO_PORT12                =12, // GPO port 12
	
} XI_GPO_SELECTOR;

// Metadata sampling mode selector
typedef enum
{
	XI_METADATA_SAMPLING_OFF     =0, // Metadata sampling turned off
	XI_METADATA_SAMPLING_POINT_EXPOSURE_START=1, // Selects the sampling point to exposure start
	XI_METADATA_SAMPLING_POINT_EXPOSURE_END=2, // Selects the sampling point to exposure end
	XI_METADATA_SAMPLING_POINT_EXPOSURE_START_END=3, // Selects the sampling point to exposure start and end
	XI_METADATA_SAMPLING_POINT_READOUT_END=4, // Selects the sampling point to readout end
	
} XI_METADATA_SAMPLING_MODE;

// structure containing information about LED functionality
typedef enum
{
	XI_LED_HEARTBEAT             =0, // Set led to blink (1 Hz) if link is OK.
	XI_LED_TRIGGER_ACTIVE        =1, // Set led to blink if trigger detected.
	XI_LED_EXT_EVENT_ACTIVE      =2, // Set led to blink if external signal detected.
	XI_LED_LINK                  =3, // Set led to blink if link is OK.
	XI_LED_ACQUISITION           =4, // Set led to blink if data streaming
	XI_LED_EXPOSURE_ACTIVE       =5, // Set led to blink if sensor integration time.
	XI_LED_FRAME_ACTIVE          =6, // Set led to blink if device busy/not busy.
	XI_LED_OFF                   =7, // Set led to off.
	XI_LED_ON                    =8, // Set led to on.
	XI_LED_BLINK                 =9, // Blinking (1Hz).
	
} XI_LED_MODE;

// Enumerator for LED selection.
typedef enum
{
	XI_LED_SEL1                  =1, // LED 1
	XI_LED_SEL2                  =2, // LED 2
	XI_LED_SEL3                  =3, // LED 3
	XI_LED_SEL4                  =4, // LED 4
	XI_LED_SEL5                  =5, // LED 5
	
} XI_LED_SELECTOR;

// structure contains frames counter
typedef enum
{
	XI_CNT_SEL_TRANSPORT_SKIPPED_FRAMES=0, // Number of skipped frames on transport layer (e.g. when image gets lost while transmission). Occur when capacity of transport channel does not allow to transfer all data.
	XI_CNT_SEL_API_SKIPPED_FRAMES=1, // Number of skipped frames on API layer. Occur when application does not process the images as quick as they are received from the camera.
	XI_CNT_SEL_TRANSPORT_TRANSFERRED_FRAMES=2, // Number of delivered buffers since last acquisition start.
	XI_CNT_SEL_FRAME_MISSED_TRIGGER_DUETO_OVERLAP=3, // Number of missed triggers overlapped with exposure or read-out stage of previous frame – see XI_PRM_TRG_OVERLAP. (see Note1)
	XI_CNT_SEL_FRAME_MISSED_TRIGGER_DUETO_FRAME_BUFFER_OVR=4, // Number of missed triggers due to frame buffer full. (see Note1)
	XI_CNT_SEL_FRAME_BUFFER_OVERFLOW=5, // Internal camera frame buffer memory (RAM) full events counter. It can be incremented multiple times per one frame. (see Note1)
	XI_CNT_SEL_TRANSPORT_QUEUE_UNDERRUN=6, // Incremented when camera starts to transfer new image, however no target buffer is queued in the transport queue. Connected to GenTL.STREAM_INFO_NUM_UNDERRUN. (see Note1)
	XI_CNT_SEL_ACQUISITION_AUTO_RESTARTED_ON_FAILURE=7, // Acquisition can be restarted, due to failures on bus
	
} XI_COUNTER_SELECTOR;

// structure containing information about timestamp reset arming
typedef enum
{
	XI_TS_RST_ARM_ONCE           =0, // Engine is disabled after TimeStamp has been reset after selected event.
	XI_TS_RST_ARM_PERSIST        =1, // Engine is armed permanently so each selected event will trigger TimeStamp reset. 
	
} XI_TS_RST_MODE;

// structure containing information about possible timestamp reset sources
typedef enum
{
	XI_TS_RST_OFF                =0, // No source selected TimeStamp reset is not armed.
	XI_TS_RST_SRC_GPI_1          =1, // GPI1 rising edge is active (signal after de-bounce module)
	XI_TS_RST_SRC_GPI_2          =2, // GPI2 rising edge is active
	XI_TS_RST_SRC_GPI_3          =3, // GPI3 rising edge is active
	XI_TS_RST_SRC_GPI_4          =4, // GPI4 rising edge is active
	XI_TS_RST_SRC_GPI_1_INV      =5, // GPI1 falling edge is active
	XI_TS_RST_SRC_GPI_2_INV      =6, // GPI2 falling edge is active
	XI_TS_RST_SRC_GPI_3_INV      =7, // GPI3 falling edge is active
	XI_TS_RST_SRC_GPI_4_INV      =8, // GPI4 falling edge is active
	XI_TS_RST_SRC_GPO_1          =9, // TimeStamp reset source selected GPO1
	XI_TS_RST_SRC_GPO_2          =10, // TimeStamp reset source selected GPO2
	XI_TS_RST_SRC_GPO_3          =11, // TimeStamp reset source selected GPO3
	XI_TS_RST_SRC_GPO_4          =12, // TimeStamp reset source selected GPO4
	XI_TS_RST_SRC_GPO_1_INV      =13, // TimeStamp reset source selected GPO1 inverted
	XI_TS_RST_SRC_GPO_2_INV      =14, // TimeStamp reset source selected GPO2 inverted
	XI_TS_RST_SRC_GPO_3_INV      =15, // TimeStamp reset source selected GPO3 inverted
	XI_TS_RST_SRC_GPO_4_INV      =16, // TimeStamp reset source selected GPO4 inverted
	XI_TS_RST_SRC_TRIGGER        =17, // TRIGGER to sensor rising edge is active
	XI_TS_RST_SRC_TRIGGER_INV    =18, // TRIGGER to sensor rising edge is active
	XI_TS_RST_SRC_SW             =19, // TRIGGER to sensor rising edge is active. TimeStamp is reset by software take effect imminently.
	XI_TS_RST_SRC_EXPACTIVE      =20, // Exposure Active signal rising edge 
	XI_TS_RST_SRC_EXPACTIVE_INV  =21, // Exposure Active signal falling edge 
	XI_TS_RST_SRC_FVAL           =22, // Frame valid signal rising edge (internal signal in camera)
	XI_TS_RST_SRC_FVAL_INV       =23, // Frame valid signal falling edge (internal signal in camera)
	XI_TS_RST_SRC_GPI_5          =24, // GPI5 rising edge is active
	XI_TS_RST_SRC_GPI_6          =25, // GPI6 rising edge is active
	XI_TS_RST_SRC_GPI_5_INV      =26, // GPI5 falling edge is active
	XI_TS_RST_SRC_GPI_6_INV      =27, // GPI6 falling edge is active
	XI_TS_RST_SRC_GPI_7          =28, // TimeStamp reset source selected GPI7 (after de bounce)
	XI_TS_RST_SRC_GPI_8          =29, // TimeStamp reset source selected GPI8 (after de bounce)
	XI_TS_RST_SRC_GPI_9          =30, // TimeStamp reset source selected GPI9 (after de bounce)
	XI_TS_RST_SRC_GPI_10         =31, // TimeStamp reset source selected GPI10 (after de bounce)
	XI_TS_RST_SRC_GPI_11         =32, // TimeStamp reset source selected GPI11 (after de bounce)
	XI_TS_RST_SRC_GPI_7_INV      =33, // TimeStamp reset source selected GPI7 inverted (after de bounce)
	XI_TS_RST_SRC_GPI_8_INV      =34, // TimeStamp reset source selected GPI8 inverted (after de bounce)
	XI_TS_RST_SRC_GPI_9_INV      =35, // TimeStamp reset source selected GPI9 inverted (after de bounce)
	XI_TS_RST_SRC_GPI_10_INV     =36, // TimeStamp reset source selected GPI10 inverted (after de bounce)
	XI_TS_RST_SRC_GPI_11_INV     =37, // TimeStamp reset source selected GPI11 inverted (after de bounce)
	
} XI_TS_RST_SOURCE;

// structure containing information about parameters type
typedef enum
{
	xiTypeInteger                =0, // integer parameter type
	xiTypeFloat                  =1, // float parameter type
	xiTypeString                 =2, // string parameter type
	xiTypeEnum                   =3, // enumerator parameter type
	xiTypeBoolean                =4, // boolean parameter type
	xiTypeCommand                =5, // command parameter type
	xiTypeInteger64              =6, // 64bit integer parameter type
	
} XI_PRM_TYPE;

// Turn parameter On/Off
typedef enum
{
	XI_OFF                       =0, // Turn parameter off
	XI_ON                        =1, // Turn parameter on
	
} XI_SWITCH;

// Temperature selector
typedef enum
{
	XI_TEMP_IMAGE_SENSOR_DIE_RAW =0, // Image sensor die (non-calibrated)
	XI_TEMP_IMAGE_SENSOR_DIE     =1, // Image sensor die (calibrated)
	XI_TEMP_SENSOR_BOARD         =2, // Image sensor PCB
	XI_TEMP_INTERFACE_BOARD      =3, // Data interface PCB
	XI_TEMP_FRONT_HOUSING        =4, // Front part of camera housing
	XI_TEMP_REAR_HOUSING         =5, // Rear part of camera housing
	XI_TEMP_TEC1_COLD            =6, // TEC1 cold side temperature
	XI_TEMP_TEC1_HOT             =7, // TEC1 hot side temperature
	XI_TEMP_VCSEL_BOARD_A        =8, // VCSEL board temperature 
	
} XI_TEMP_SELECTOR;

// Temperature selector
typedef enum
{
	XI_TEMP_CTRL_MODE_OFF        =0, // Controlling of elements (TEC/Peltier, Fans) is turned off
	XI_TEMP_CTRL_MODE_AUTO       =1, // Controlling of elements is performed automatically by API or camera in order to reach parameter TARGET_TEMP.
	XI_TEMP_CTRL_MODE_MANUAL     =2, // Controlling of elements is done manually by application.
	
} XI_TEMP_CTRL_MODE_SELECTOR;

// Temperature element selector
typedef enum
{
	XI_TEMP_ELEM_TEC1            =11, // TEC1 = TEC/Peltier that is closest to the image sensor
	XI_TEMP_ELEM_TEC2            =12, // TEC2 = TEC/Peltier location depends on camera model
	XI_TEMP_ELEM_FAN1            =31, // Temperature element fan current or rotation (FAN1 = Fan)
	XI_TEMP_ELEM_FAN1_THRS_TEMP  =32, // Temperature element fan start rotation threshold temperature
	
} XI_TEMP_ELEMENT_SELECTOR;

// Data packing(grouping) types.
typedef enum
{
	XI_DATA_PACK_XI_GROUPING     =0, // Data grouping (10g160, 12g192, 14g224).
	XI_DATA_PACK_PFNC_LSB_PACKING=1, // Data packing (10p, 12p)
	
} XI_OUTPUT_DATA_PACKING_TYPE;

// Downsampling types
typedef enum
{
	XI_BINNING                   =0, // pixels are interpolated - better image
	XI_SKIPPING                  =1, // pixels are skipped - higher frame rate
	
} XI_DOWNSAMPLING_TYPE;

// Exposure time selector
typedef enum
{
	XI_EXPOSURE_TIME_SELECTOR_COMMON=0, // Selects the common Exposure Time
	XI_EXPOSURE_TIME_SELECTOR_GROUP1=1, // Selects the common Exposure Time for pixel group 1 (for InterlineExposureMode)
	XI_EXPOSURE_TIME_SELECTOR_GROUP2=2, // Selects the common Exposure Time for pixel group 2 (for InterlineExposureMode)
	XI_EXPOSURE_TIME_SELECTOR_DUAL_TRG_EXP_ZONE_1=3, // Selects the Exposure Time for Zone 1 (for Dual Trigger Exposure feature)
	XI_EXPOSURE_TIME_SELECTOR_DUAL_TRG_EXP_ZONE_2=4, // Selects the Exposure Time for Zone 2 (for Dual Trigger Exposure feature)
	
} XI_EXPOSURE_TIME_SELECTOR_TYPE;

// Interline exposure mode
typedef enum
{
	XI_INTERLINE_EXPOSURE_MODE_OFF=0, // Disabled
	XI_INTERLINE_EXPOSURE_MODE_ON=1, // Enabled
	
} XI_INTERLINE_EXPOSURE_MODE_TYPE;

// Gain selector
typedef enum
{
	XI_GAIN_SELECTOR_ALL         =0, // Gain selector selects all channels. Implementation of gain type depends on camera.
	XI_GAIN_SELECTOR_ANALOG_ALL  =1, // Gain selector selects all analog channels. This is available only on some cameras.
	XI_GAIN_SELECTOR_DIGITAL_ALL =2, // Gain selector selects all digital channels. This is available only on some cameras.
	XI_GAIN_SELECTOR_ANALOG_TAP1 =3, // Gain selector selects tap 1. This is available only on some cameras.
	XI_GAIN_SELECTOR_ANALOG_TAP2 =4, // Gain selector selects tap 2. This is available only on some cameras.
	XI_GAIN_SELECTOR_ANALOG_TAP3 =5, // Gain selector selects tap 3. This is available only on some cameras.
	XI_GAIN_SELECTOR_ANALOG_TAP4 =6, // Gain selector selects tap 4. This is available only on some cameras.
	XI_GAIN_SELECTOR_ANALOG_N    =7, // First of two channels of programmable gain control (PGC) function - Gain setting of R, B pixels (North column analog gain). This is available only on some cameras.
	XI_GAIN_SELECTOR_ANALOG_S    =8, // Second of two channels of programmable gain control (PGC) function - Gain setting of Gr, Gb pixels (South column analog gain). This is available only on some cameras.
	
} XI_GAIN_SELECTOR_TYPE;

// Shutter mode types
typedef enum
{
	XI_SHUTTER_GLOBAL            =0, // Sensor Global Shutter(CMOS sensor)
	XI_SHUTTER_ROLLING           =1, // Sensor Electronic Rolling Shutter(CMOS sensor)
	XI_SHUTTER_GLOBAL_RESET_RELEASE=2, // Sensor Global Reset Release Shutter(CMOS sensor)
	
} XI_SHUTTER_TYPE;

// structure containing information about CMS functionality
typedef enum
{
	XI_CMS_DIS                   =0, // disables color management
	XI_CMS_EN                    =1, // enables color management (high CPU usage)
	XI_CMS_EN_FAST               =2, // enables fast color management (high RAM usage)
	
} XI_CMS_MODE;

// structure containing information about ICC Intents
typedef enum
{
	XI_CMS_INTENT_PERCEPTUAL     =0, // CMS intent perceptual
	XI_CMS_INTENT_RELATIVE_COLORIMETRIC=1, // CMS intent relative colorimetry
	XI_CMS_INTENT_SATURATION     =2, // CMS intent saturation
	XI_CMS_INTENT_ABSOLUTE_COLORIMETRIC=3, // CMS intent absolute colorimetry
	
} XI_CMS_INTENT;

// structure containing information about options for selection of camera before opening
typedef enum
{
	XI_OPEN_BY_INST_PATH         =0, // Open camera by its hardware path
	XI_OPEN_BY_SN                =1, // Open camera by its serial number
	XI_OPEN_BY_USER_ID           =2, // open camera by its custom user ID
	XI_OPEN_BY_LOC_PATH          =3, // Open camera by its hardware location path
	
} XI_OPEN_BY;

// Lens feature selector selects which feature will be accessed.
typedef enum
{
	XI_LENS_FEATURE_MOTORIZED_FOCUS_SWITCH=1, // Status of lens motorized focus switch
	XI_LENS_FEATURE_MOTORIZED_FOCUS_BOUNDED=2, // On read = 1 if motorized focus is on one of limits.
	XI_LENS_FEATURE_MOTORIZED_FOCUS_CALIBRATION=3, // (planned feature) On read = 1 if motorized focus is calibrated. Write 1 to start calibration.
	XI_LENS_FEATURE_IMAGE_STABILIZATION_ENABLED=4, // On read = 1 if image stabilization is enabled. Write 1 to enable image stabilization.
	XI_LENS_FEATURE_IMAGE_STABILIZATION_SWITCH_STATUS=5, // On read = 1 if image stabilization switch is in position On.
	XI_LENS_FEATURE_IMAGE_ZOOM_SUPPORTED=6, // On read = 1 if lens supports zoom = are not prime.
	
} XI_LENS_FEATURE;

// Sensor feature selector selects which feature will be accessed.
typedef enum
{
	XI_SENSOR_FEATURE_ZEROROT_ENABLE=0, // Sensor Zero ROT enable for ONSEMI PYTHON family. For camera model:MQ013xG-ON (on/off)
	XI_SENSOR_FEATURE_BLACK_LEVEL_CLAMP=1, // Black level offset clamping (value). for Camera model:MD
	XI_SENSOR_FEATURE_MD_FPGA_DIGITAL_GAIN_DISABLE=2, // Disable digital component of gain for MD family (1=disabled/0=enabled)
	XI_SENSOR_FEATURE_ACQUISITION_RUNNING=3, // Sensor acquisition is running status (0/1). Could be stopped by setting of 0. For camera model:CB,MC,MX,MT
	XI_SENSOR_FEATURE_TIMING_MODE=4, // Sensor timing mode (value depends on sensor)
	XI_SENSOR_FEATURE_PARALLEL_ADC=5, //  Enables the parallel ADC readout mode, where all exposed pixels undergo dual sampling, leading to reduced readout noise at the cost of increased readout time 
	XI_SENSOR_FEATURE_BLACK_LEVEL_OFFSET_RAW=6, // Sensor specific register raw black level offset (value)
	XI_SENSOR_FEATURE_SHORT_INTERVAL_SHUTTER=7, // Sensor short Interval Shutter (on/off)
	XI_SENSOR_FEATURE_AUTO_LOW_POWER_MODE_AUTO=8, // Sensor low power mode (on/off)
	XI_SENSOR_FEATURE_HIGH_CONVERSION_GAIN=9, // Enables high conversion gain feature which applies additional gain to the signal at the pixel level. This leads to a reduction in read noise and a boost in sensitivity and signal-to-noise ratio, particularly in low-light situations. Consequently, the camera exhibits superior performance in dark environments, capturing images with minimal noise and enhanced detail.
	XI_SENSOR_FEATURE_DUAL_TRG_EXP_ZONE_DIVIDER_POSITION=10, // Sensor Dual Trigger Exposure Zone Divider Position
	XI_SENSOR_FEATURE_TOF_VCSEL_CTRL_VOLTAGE_MV=11, // ToF VCSEL Control Voltage in mV
	XI_SENSOR_FEATURE_MULTIPLE_ADC=12, // Multiple ADC
	XI_SENSOR_FEATURE_FAST_TRIGGER_MODE_ENABLE=13, // Enables a sensor trigger mode that starts exposure immediately at the beginning of the trigger signal. When fast trigger mode is disabled, the camera operates in a trigger mode that allows exposure and readout to overlap, resulting in a higher FPS. For camera model: MU051xG. (on/off)
	
} XI_SENSOR_FEATURE_SELECTOR;

// Camera sensor mode enumerator.
typedef enum
{
	XI_SENS_MD0                  =0, // Sensor mode number 0
	XI_SENS_MD1                  =1, // Sensor mode number 1
	XI_SENS_MD2                  =2, // Sensor mode number 2
	XI_SENS_MD3                  =3, // Sensor mode number 3
	XI_SENS_MD4                  =4, // Sensor mode number 4
	XI_SENS_MD5                  =5, // Sensor mode number 5
	XI_SENS_MD6                  =6, // Sensor mode number 6
	XI_SENS_MD7                  =7, // Sensor mode number 7
	XI_SENS_MD8                  =8, // Sensor mode number 8
	XI_SENS_MD9                  =9, // Sensor mode number 9
	XI_SENS_MD10                 =10, // Sensor mode number 10
	XI_SENS_MD11                 =11, // Sensor mode number 11
	XI_SENS_MD12                 =12, // Sensor mode number 12
	XI_SENS_MD13                 =13, // Sensor mode number 13
	XI_SENS_MD14                 =14, // Sensor mode number 14
	XI_SENS_MD15                 =15, // Sensor mode number 15
	
} XI_SENSOR_MODE;

// Defines image sensor area as output.
typedef enum
{
	XI_IMAGE_AREA_ACTIVE         =0, // All light sensitive pixels suggested by image vendor.
	XI_IMAGE_AREA_ACTIVE_AND_MASKED=1, // All Active pixels plus masked pixels surrounding the Active area.
	
} XI_IMAGE_AREA_SELECTOR;

// Camera channel count enumerator.
typedef enum
{
	XI_CHANN_CNT2                =2, // 2 sensor readout channels.
	XI_CHANN_CNT4                =4, // 4 sensor readout channels.
	XI_CHANN_CNT8                =8, // 8 sensor readout channels.
	XI_CHANN_CNT16               =16, // 16 sensor readout channels.
	XI_CHANN_CNT24               =24, // 24 sensor readout channels.
	XI_CHANN_CNT32               =32, // 32 sensor readout channels.
	XI_CHANN_CNT48               =48, // 48 sensor readout channels.
	
} XI_SENSOR_OUTPUT_CHANNEL_COUNT;

// Sensor defects correction list selector
typedef enum
{
	XI_SENS_DEFFECTS_CORR_LIST_SEL_FACTORY=0, // Factory defect correction list
	XI_SENS_DEFFECTS_CORR_LIST_SEL_USER0=1, // User defect correction list
	XI_SENS_DEFFECTS_CORR_LIST_SEL_IN_CAMERA=2, // Device specific defect correction list
	
} XI_SENS_DEFFECTS_CORR_LIST_SELECTOR;

// Acquisition status Selector
typedef enum
{
	XI_ACQUISITION_STATUS_ACQ_ACTIVE=0, //  Device is currently doing an acquisition of one or many frames.
	
} XI_ACQUISITION_STATUS_SELECTOR;

// Select unit where data-pipe is configured
typedef enum
{
	XI_DP_UNIT_SENSOR            =0, // Selects device image sensor
	XI_DP_UNIT_FPGA              =1, // Selects device image FPGA
	
} XI_DP_UNIT_SELECTOR;

// Select unit processor
typedef enum
{
	XI_DP_PROC_NONE              =0, // Default empty processor
	XI_DP_PROC_CHANNEL_MUXER     =1, // Channel Muxer (selected processor combines multiple input channels)
	XI_DP_PROC_PIXEL_SEQUENCER   =2, // Selects pixel data output sequence
	XI_DP_PROC_CHANNEL_1         =3, // Selects sensor output channel 1
	XI_DP_PROC_CHANNEL_2         =4, // Selects sensor output channel 2
	XI_DP_PROC_FRAME_BUFFER      =5, // Selects frame buffer memory
	
} XI_DP_PROC_SELECTOR;

// Select processor parameter
typedef enum
{
	XI_DP_PARAM_NONE             =0, // Empty parameter
	XI_DP_PARAM_CHMUX_CHANNEL_SELECTOR=1, // Defines output of Channel Muxer processor
	XI_DP_PARAM_CHMUX_ALPHA      =2, // Channel merger coefficient Alpha
	XI_DP_PARAM_CHMUX_BETA       =3, // Channel merger coefficient Beta
	XI_DP_PARAM_PIXSEQ_SELECTOR  =4, // PixSeq Selector
	XI_DP_PARAM_CHANNEL_TIMING   =5, // Selected channel timing
	XI_DP_PARAM_FRAMEBUF_MODE    =6, // Frame Buffer Mode
	XI_DP_PARAM_FRAMEBUF_SIZE    =7, // Frame Buffer Size Bytes
	
} XI_DP_PARAM_SELECTOR;

// Select processor parameter value
typedef enum
{
	XI_DP_PARAM_VALUE_CHMUX_CHANNEL_1=0, // Selected source channel 1
	XI_DP_PARAM_VALUE_CHMUX_CHANNEL_2=1, // Selected source channel 2
	XI_DP_PARAM_VALUE_CHMUX_CHANNEL_1_2=2, // Selected source channel 1 and 2
	XI_DP_PARAM_VALUE_CHMUX_MERGED=3, // Merged data of two channels
	XI_DP_PARAM_VALUE_CHMUX_CMS_S=4, // Correlated Multiple Sampling(summing)
	XI_DP_PARAM_VALUE_PIXSEQ_ONE_VALUE=5, // Output is one value per pixel
	XI_DP_PARAM_VALUE_PIXSEQ_TWO_VALUES=6, // Output are two values per pixel
	XI_DP_PARAM_VALUE_CHTIM_HG   =7, // High Gain channel timing
	XI_DP_PARAM_VALUE_CHTIM_LG   =8, // Low Gain channel timing
	XI_DP_PARAM_VALUE_FRAMEBUF_MODE_DISABLED=9, // Frame buffer is disabled
	XI_DP_PARAM_VALUE_FRAMEBUF_MODE_ENABLED=10, // Frame buffer is on
	XI_DP_PARAM_VALUE_PIXSEQ_FOUR_VALUES=11, // Output are four values per pixel
	XI_DP_PARAM_VALUE_CHMUX_CMS_A=12, // Correlated Multiple Sampling(averaging)
	
} XI_DP_PARAM_VALUE;

// User Set selector options.
typedef enum
{
	XI_US_12_STD_L               =10, // 12bit per channel STD Low Gain mode preset.
	XI_US_12_STD_H               =11, // 12bit per channel STD High Gain mode preset.
	XI_US_14_STD_L               =12, // 14bit per channel STD Low Gain mode preset.
	XI_US_NONE                   =999, // No preset selected.
	XI_US_14_STD_H               =13, // 14bit per channel STD High Gain mode preset.
	XI_US_2_12_CMS_S_L           =14, // 12bit per channel, 2 samples,  CMS(summing) Low Gain mode preset.
	XI_US_2_12_CMS_S_H           =15, // 12bit per channel, 2 samples,  CMS(summing) High Gain mode preset.
	XI_US_2_14_CMS_S_L           =16, // 14bit per channel, 2 samples,  CMS(summing) Low Gain mode preset.
	XI_US_2_14_CMS_S_H           =17, // 14bit per channel, 2 samples,  CMS(summing) High Gain mode preset.
	XI_US_4_12_CMS_S_L           =18, // 12bit per channel, 4 samples,  CMS(summing) Low Gain mode preset.
	XI_US_4_12_CMS_S_H           =19, // 12bit per channel, 4 samples,  CMS(summing) High Gain mode preset.
	XI_US_4_14_CMS_S_L           =20, // 14bit per channel, 4 samples,  CMS(summing) Low Gain mode preset.
	XI_US_4_14_CMS_S_H           =21, // 14bit per channel, 4 samples,  CMS(summing) High Gain mode preset.
	XI_US_2_12_HDR_HL            =22, // 12bit per channel, 2 samples,  HDR High Low Gain mode preset.
	XI_US_2_12_HDR_L             =23, // 12bit per channel, 2 samples,  HDR Low Gain mode preset.
	XI_US_2_12_HDR_H             =24, // 12bit per channel, 2 samples,  HDR High Gain mode preset.
	XI_US_4_12_CMS_HDR_HL        =25, // 12bit per channel, 4 samples,  CMS + HDR High Low Gain mode preset.
	XI_US_2_14_HDR_L             =26, // 14bit per channel, 2 samples,  HDR Low Gain mode preset.
	XI_US_2_14_HDR_H             =27, // 14bit per channel, 2 samples,  HDR High Gain mode preset.
	XI_US_2_12_CMS_A_L           =28, // 12bit per channel, 2 samples,  CMS(averaging) Low Gain mode preset.
	XI_US_2_12_CMS_A_H           =29, // 12bit per channel, 2 samples,  CMS(averaging) High Gain mode preset.
	XI_US_TOF_DEFAULT            =30, // 
	XI_US_TOF_LONG_RANGE         =31, // 
	XI_US_TOF_SINGLE_READOUT     =32, // 
	XI_US_TOF_DEFAULT_EXT_CDS    =33, // 
	XI_US_TOF_LONG_RANGE_EXT_CDS =34, // 
	XI_US_TOF_SINGLE_READOUT_EXT_CDS=35, // 
	
} XI_USER_SET_SELECTOR;

// Mode of DualADC feature
typedef enum
{
	XI_DUAL_ADC_MODE_OFF         =0, // Disable DualADC feature
	XI_DUAL_ADC_MODE_COMBINED    =1, // Set Combined mode
	XI_DUAL_ADC_MODE_NON_COMBINED=2, // Set NonCombined mode
	
} XI_DUAL_ADC_MODE;

// Probe Selector
typedef enum
{
	XI_PROBE_SELECTOR_CURRENT_MAINBOARD_VCC_IN=0, // Current probe on Main Board at VCC_IN power supply
	XI_PROBE_SELECTOR_VOLTAGE_MAINBOARD_VCC_IN=1, // Voltage probe on Main Board at VCC_IN power supply
	XI_PROBE_SELECTOR_CURRENT_MAINBOARD_VCC_ADJ2=2, // Current probe on Main Board at VCC_ADJ2 power supply
	XI_PROBE_SELECTOR_VOLTAGE_MAINBOARD_VCC_ADJ2=3, // Voltage probe on Main Board at VCC_ADJ2 power supply
	XI_PROBE_SELECTOR_CURRENT_MAINBOARD_VCC_ADJ1=4, // Current probe on Main Board at VCC_ADJ1 power supply
	XI_PROBE_SELECTOR_VOLTAGE_MAINBOARD_VCC_ADJ1=5, // Voltage probe on Main Board at VCC_ADJ1 power supply
	XI_PROBE_SELECTOR_CURRENT_MAINBOARD_VCC_PLT=6, // Current probe on Main Board at VCC_PLT power supply
	XI_PROBE_SELECTOR_VOLTAGE_MAINBOARD_VCC_PLT=7, // Voltage probe on Main Board at VCC_PLT power supply
	XI_PROBE_SELECTOR_VOLTAGE_SENSORBOARD_VCC_ADJ1=8, // Voltage probe on Sensor Board at VCC_ADJ1
	XI_PROBE_SELECTOR_VOLTAGE_SENSORBOARD_VCC_ADJ2=9, // Voltage probe on Sensor Board at VCC_ADJ2
	XI_PROBE_SELECTOR_VOLTAGE_SENSORBOARD_VCC_5V0=10, // Voltage probe on Sensor Board at VCC_5V0
	XI_PROBE_SELECTOR_VOLTAGE_SENSORBOARD_VCC_3V3=11, // Voltage probe on Sensor Board at VCC_3V3
	XI_PROBE_SELECTOR_VOLTAGE_DATA_CON_INPUT=12, // Voltage probe on device input, if device is bus powered
	XI_PROBE_SELECTOR_VOLTAGE_PELTIER1=13, // Voltage probe on peltier #1
	XI_PROBE_SELECTOR_CURRENT_PELTIER1=14, // Current probe on peltier #1
	XI_PROBE_SELECTOR_VOLTAGE_PELTIER2=15, // Voltage probe on peltier #2
	XI_PROBE_SELECTOR_CURRENT_PELTIER2=16, // Current probe on peltier #2
	XI_PROBE_SELECTOR_VOLTAGE_MAINBOARD_VCC_5V0=17, // Voltage probe on Main Board at VCC_5V0 power supply 
	XI_PROBE_SELECTOR_CURRENT_MAINBOARD_VCC_5V0=18, // Current probe on Main Board at VCC_5V0 power supply
	
} XI_PROBE_SELECTOR;

// ToF Readout Mode feature
typedef enum
{
	XI_TOF_READOUT_MODE_A_ONLY   =0, // A Only readout mode
	XI_TOF_READOUT_MODE_B_ONLY   =1, // B Only readout mode
	XI_TOF_READOUT_MODE_A_MINUS_B=2, // A Minus B readout mode
	XI_TOF_READOUT_MODE_A_PLUS_B =3, // A Plus B readout mode
	XI_TOF_READOUT_MODE_A_AND_B  =4, // A And B readout mode
	
} XI_TOF_READOUT_MODE;

// Image data signedness
typedef enum
{
	XI_DATA_SM_UNSIGNED          =0, // Unsigned if it can only represent non-negative numbers (zero or positive numbers).
	XI_DATA_SM_SIGNED_2C         =1, // Signed if it can represent both positive and negative numbers (two's complement).
	XI_DATA_SM_SIGNED_FLOATING   =2, // Signed floating point data type.
	
} XI_DATA_SM;

typedef enum
{			
	XI_GenTL_Image_Format_Mono8                        =0x01080001, // This enumeration value sets the pixel format to Mono 8.	
	XI_GenTL_Image_Format_BGRA8                        =0x02200017, // This enumeration value sets the pixel format to Bayer BG 8	
	XI_GenTL_Image_Format_RGB8Planar                   =0x02180021, // This enumeration value sets the pixel format to RGB 8 Planar.	
	XI_GenTL_Image_Format_BayerRG8                     =0x01080009, // Pixel format 'Bayer RG 8'.	
	XI_GenTL_Image_Format_Mono10                       =0x01100003, // Pixel format 'Mono10'	
	XI_GenTL_Image_Format_Mono12                       =0x01100005, // Pixel format 'Mono 12'	
	XI_GenTL_Image_Format_Mono14                       =0x01100025, // Pixel format 'Mono 14'	
	XI_GenTL_Image_Format_BayerRG10                    =0x0110000D, // Pixel format 'Bayer RG 10'	
	XI_GenTL_Image_Format_BayerRG12                    =0x01100011, // Pixel format 'Bayer RG 12'	
	XI_GenTL_Image_Format_BayerGR8                     =0x01080008, // Pixel format 'Bayer GR 8'	
	XI_GenTL_Image_Format_BayerGB8                     =0x0108000A, // Pixel format 'Bayer GB 8'	
	XI_GenTL_Image_Format_BayerGR10                    =0x0110000C, // Pixel format 'Bayer GR 10'	
	XI_GenTL_Image_Format_BayerGB10                    =0x0110000E, // Pixel format 'Bayer GB 10'	
	XI_GenTL_Image_Format_BayerGR12                    =0x01100010, // Pixel format ''Bayer GR 12	
	XI_GenTL_Image_Format_BayerBG8                     =0x0108000B, // Pixel format 'Bayer BG 8'	
	XI_GenTL_Image_Format_BayerBG10                    =0x0110000F, // Pixel format 'Bayer BG 10'	
	XI_GenTL_Image_Format_BayerBG12                    =0x01100013, // Pixel format 	
	XI_GenTL_Image_Format_BayerGB12                    =0x01100012, // Pixel format 	
	XI_GenTL_Image_Format_RGB8                         =0x02180014, // This enumeration value sets the pixel format to R8,G8,B8	
	XI_GenTL_Image_Format_BGR8                         =0x02180015, // This enumeration value sets the pixel format to B8,G8,R8	
	XI_GenTL_Image_Format_BayerRG14                    =0x0110010A, // Pixel format one 14 bit pixel in 2 bytes	
	XI_GenTL_Image_Format_BayerGR14                    =0x01100109, // Pixel format one 14 bit pixel in 2 bytes	
	XI_GenTL_Image_Format_BayerBG14                    =0x0110010C, // Pixel format one 14 bit pixel in 2 bytes	
	XI_GenTL_Image_Format_BayerGB14                    =0x0110010B, // Pixel format one 14 bit pixel in 2 bytes	
	XI_GenTL_Image_Format_BayerBG10p                   =0x010A0052, // Pixel format 10bit packed (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_BayerGB10p                   =0x010A0054, // Pixel format 10bit packed (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_BayerGR10p                   =0x010A0056, // Pixel format 10bit packed (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_BayerRG10p                   =0x010A0058, // Pixel format 10bit packed (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_Mono10p                      =0x010a0046, // Pixel format 10bit packed (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_BayerBG12p                   =0x010C0053, // Pixel format 12bit packed (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_BayerGB12p                   =0x010C0055, // Pixel format 12bit packed (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_BayerGR12p                   =0x010C0057, // Pixel format 12bit packed (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_BayerRG12p                   =0x010C0059, // Pixel format 12bit packed (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_Mono12p                      =0x010c0047, // Pixel format 12bit packed (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_BayerBG14p                   =0x010E0108, // Pixel format 14bit packed (4 pixels in 7 bytes)	
	XI_GenTL_Image_Format_BayerGB14p                   =0x010E0107, // Pixel format 14bit packed (4 pixels in 7 bytes)	
	XI_GenTL_Image_Format_BayerGR14p                   =0x010E0105, // Pixel format 14bit packed (4 pixels in 7 bytes)	
	XI_GenTL_Image_Format_BayerRG14p                   =0x010E0106, // Pixel format 14bit packed (4 pixels in 7 bytes)	
	XI_GenTL_Image_Format_Mono14p                      =0x010E0104, // Pixel format 14bit packed (4 pixels in 7 bytes)	
	XI_GenTL_Image_Format_xiBayerBG10g160              =0x8200010A, // Pixel format 10bit (16 pixels in 20 bytes)	
	XI_GenTL_Image_Format_xiBayerGB10g160              =0x8200020A, // Pixel format 10bit (16 pixels in 20 bytes)	
	XI_GenTL_Image_Format_xiBayerGR10g160              =0x8200030A, // Pixel format 10bit (16 pixels in 20 bytes)	
	XI_GenTL_Image_Format_xiBayerRG10g160              =0x8200040A, // Pixel format 10bit (16 pixels in 20 bytes)	
	XI_GenTL_Image_Format_xiMono10g160                 =0x8200000A, // Pixel format 10bit (16 pixels in 20 bytes)	
	XI_GenTL_Image_Format_xiBayerBG12g192              =0x8200010C, // Pixel format 12bit (16 pixels in 24 bytes)	
	XI_GenTL_Image_Format_xiBayerGB12g192              =0x8200020C, // Pixel format 12bit (16 pixels in 24 bytes)	
	XI_GenTL_Image_Format_xiBayerGR12g192              =0x8200030C, // Pixel format 12bit (16 pixels in 24 bytes)	
	XI_GenTL_Image_Format_xiBayerRG12g192              =0x8200040C, // Pixel format 12bit (16 pixels in 24 bytes)	
	XI_GenTL_Image_Format_xiMono12g192                 =0x8200000C, // Pixel format 12bit (16 pixels in 24 bytes)	
	XI_GenTL_Image_Format_xiBayerBG14g224              =0x8200010E, // Pixel format 14bit (16 pixels in 28 bytes)	
	XI_GenTL_Image_Format_xiBayerGB14g224              =0x8200020E, // Pixel format 14bit (16 pixels in 28 bytes)	
	XI_GenTL_Image_Format_xiBayerGR14g224              =0x8200030E, // Pixel format 14bit (16 pixels in 28 bytes)	
	XI_GenTL_Image_Format_xiBayerRG14g224              =0x8200040E, // Pixel format 14bit (16 pixels in 28 bytes)	
	XI_GenTL_Image_Format_xiMono14g224                 =0x8200000E, // Pixel format 14bit (16 pixels in 28 bytes)	
	XI_GenTL_Image_Format_xiMono8TS01                  =0x80010008, // Pixel format 8bit(2 taps)	
	XI_GenTL_Image_Format_xiMono10TS01                 =0x8001000A, // Pixel format 10bit(2 taps)	
	XI_GenTL_Image_Format_xiMono12TS01                 =0x8001000C, // Pixel format 12bit(2 taps)	
	XI_GenTL_Image_Format_xiMono14TS01                 =0x8001000E, // Pixel format 14bit(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG8TS01               =0x80010408, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerRG10TS01              =0x8001040A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG12TS01              =0x8001040C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG14TS01              =0x8001040E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG8TS01               =0x80010108, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerBG10TS01              =0x8001010A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG12TS01              =0x8001010C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG14TS01              =0x8001010E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB8TS01               =0x80010208, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerGB10TS01              =0x8001020A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB12TS01              =0x8001020C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB14TS01              =0x8001020E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR8TS01               =0x80010308, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerGR10TS01              =0x8001030A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR12TS01              =0x8001030C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR14TS01              =0x8001030E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiMono8TS03                  =0x80030008, // Pixel format 8bit(4 taps)	
	XI_GenTL_Image_Format_xiMono10TS03                 =0x8003000A, // Pixel format 10bit(4 taps)	
	XI_GenTL_Image_Format_xiMono12TS03                 =0x8003000C, // Pixel format 12bit(4 taps)	
	XI_GenTL_Image_Format_xiMono14TS03                 =0x8003000E, // Pixel format 14bit(4 taps)	
	XI_GenTL_Image_Format_xiBayerRG8TS03               =0x80030408, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerRG10TS03              =0x8003040A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerRG12TS03              =0x8003040C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerRG14TS03              =0x8003040E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG8TS03               =0x80030108, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerBG10TS03              =0x8003010A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG12TS03              =0x8003010C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG14TS03              =0x8003010E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB8TS03               =0x80030208, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerGB10TS03              =0x8003020A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB12TS03              =0x8003020C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB14TS03              =0x8003020E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR8TS03               =0x80030308, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerGR10TS03              =0x8003030A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR12TS03              =0x8003030C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR14TS03              =0x8003030E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_Mono16                       =0x01100007, // Pixel format 16 monochrome	
	XI_GenTL_Image_Format_BayerGR16                    =0x0110002E, // Pixel format Bayer GR 16	
	XI_GenTL_Image_Format_BayerRG16                    =0x0110002F, // Pixel format Bayer RG 16	
	XI_GenTL_Image_Format_BayerGB16                    =0x01100030, // Pixel format Bayer GB 16	
	XI_GenTL_Image_Format_BayerBG16                    =0x01100031, // Pixel format Bayer BG 16	
	XI_GenTL_Image_Format_xiMono16TS03                 =0x80030010, // Pixel format 16bit(4 taps)	
	XI_GenTL_Image_Format_xiMono16TS01                 =0x80010010, // Pixel format 16bit(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG16TS01              =0x80010410, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG16TS01              =0x80010110, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB16TS01              =0x80010210, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR16TS01              =0x80010310, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG16TS03              =0x80030410, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG16TS03              =0x80030110, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB16TS03              =0x80030210, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR16TS03              =0x80030310, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiMono16TS04                 =0x80040010, // Pixel format 16bit(4 taps)	
	XI_GenTL_Image_Format_xiBayerRG16TS04              =0x80040410, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG16TS04              =0x80040110, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB16TS04              =0x80040210, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR16TS04              =0x80040310, // Pixel format 16 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiMono16TS02                 =0x80020010, // Pixel format 16bit(2 taps)	
	XI_GenTL_Image_Format_xiMono8TS02                  =0x80020008, // Pixel format 8bit(2 taps)	
	XI_GenTL_Image_Format_xiMono10TS02                 =0x8002000A, // Pixel format 10bit(2 taps)	
	XI_GenTL_Image_Format_xiMono12TS02                 =0x8002000C, // Pixel format 12bit(2 taps)	
	XI_GenTL_Image_Format_xiMono14TS02                 =0x8002000E, // Pixel format 14bit(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG8TS02               =0x80020408, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerRG10TS02              =0x8002040A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG12TS02              =0x8002040C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG14TS02              =0x8002040E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerRG16TS02              =0x80020410, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG8TS02               =0x80020108, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerBG10TS02              =0x8002010A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG12TS02              =0x8002010C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG14TS02              =0x8002010E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerBG16TS02              =0x80020110, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB8TS02               =0x80020208, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerGB10TS02              =0x8002020A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB12TS02              =0x8002020C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB14TS02              =0x8002020E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGB16TS02              =0x80020210, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR8TS02               =0x80020308, // Pixel format (2 taps)	
	XI_GenTL_Image_Format_xiBayerGR10TS02              =0x8002030A, // Pixel format 10 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR12TS02              =0x8002030C, // Pixel format 12 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR14TS02              =0x8002030E, // Pixel format 14 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiBayerGR16TS02              =0x80020310, // Pixel format 16 bits in 2 bytes(2 taps)	
	XI_GenTL_Image_Format_xiMono8TS04                  =0x80040008, // Pixel format 8bit(4 taps)	
	XI_GenTL_Image_Format_xiMono10TS04                 =0x8004000A, // Pixel format 10bit(4 taps)	
	XI_GenTL_Image_Format_xiMono12TS04                 =0x8004000C, // Pixel format 12bit(4 taps)	
	XI_GenTL_Image_Format_xiMono14TS04                 =0x8004000E, // Pixel format 14bit(4 taps)	
	XI_GenTL_Image_Format_xiBayerRG8TS04               =0x80040408, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerRG10TS04              =0x8004040A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerRG12TS04              =0x8004040C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerRG14TS04              =0x8004040E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG8TS04               =0x80040108, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerBG10TS04              =0x8004010A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG12TS04              =0x8004010C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerBG14TS04              =0x8004010E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB8TS04               =0x80040208, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerGB10TS04              =0x8004020A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB12TS04              =0x8004020C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGB14TS04              =0x8004020E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR8TS04               =0x80040308, // Pixel format (4 taps)	
	XI_GenTL_Image_Format_xiBayerGR10TS04              =0x8004030A, // Pixel format 10 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR12TS04              =0x8004030C, // Pixel format 12 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_xiBayerGR14TS04              =0x8004030E, // Pixel format 14 bits in 2 bytes(4 taps)	
	XI_GenTL_Image_Format_Mono9p                       =0x81000009, // Pixel format 9bit packed (8 pixels in 9 bytes)	
	XI_GenTL_Image_Format_BayerBG9p                    =0x81000109, // Pixel format 9bit packed (8 pixels in 9 bytes)	
	XI_GenTL_Image_Format_BayerGB9p                    =0x81000209, // Pixel format 9bit packed (8 pixels in 9 bytes)	
	XI_GenTL_Image_Format_BayerGR9p                    =0x81000309, // Pixel format 9bit packed (8 pixels in 9 bytes)	
	XI_GenTL_Image_Format_BayerRG9p                    =0x81000409, // Pixel format 9bit packed (8 pixels in 9 bytes)	
	XI_GenTL_Image_Format_Mono11p                      =0x8100000B, // Pixel format 11bit packed (8 pixels in 11 bytes)	
	XI_GenTL_Image_Format_BayerBG11p                   =0x8100010B, // Pixel format 11bit packed (8 pixels in 11 bytes)	
	XI_GenTL_Image_Format_BayerGB11p                   =0x8100020B, // Pixel format 11bit packed (8 pixels in 11 bytes)	
	XI_GenTL_Image_Format_BayerGR11p                   =0x8100030B, // Pixel format 11bit packed (8 pixels in 11 bytes)	
	XI_GenTL_Image_Format_BayerRG11p                   =0x8100040B, // Pixel format 11bit packed (8 pixels in 11 bytes)	
	XI_GenTL_Image_Format_Mono9                        =0x80000009, // Pixel format 9bit	
	XI_GenTL_Image_Format_BayerBG9                     =0x80000109, // Pixel format 9bit	
	XI_GenTL_Image_Format_BayerGB9                     =0x80000209, // Pixel format 9bit	
	XI_GenTL_Image_Format_BayerGR9                     =0x80000309, // Pixel format 9bit	
	XI_GenTL_Image_Format_BayerRG9                     =0x80000409, // Pixel format 9bit 	
	XI_GenTL_Image_Format_Mono11                       =0x8000000B, // Pixel format 11bit 	
	XI_GenTL_Image_Format_BayerBG11                    =0x8000010B, // Pixel format 11bit	
	XI_GenTL_Image_Format_BayerGB11                    =0x8000020B, // Pixel format 11bit	
	XI_GenTL_Image_Format_BayerGR11                    =0x8000030B, // Pixel format 11bit	
	XI_GenTL_Image_Format_BayerRG11                    =0x8000040B, // Pixel format 11bit 	
	XI_GenTL_Image_Format_xiMono12g96l_m9e3            =0x8300100C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB12pMS41             =0x8141020C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12pMS41                =0x8141000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB10pMS41             =0x8141020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB12MS41              =0x8041020C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB10MS41              =0x8041020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pMS51                =0x8151000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pMS41                =0x8141000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB10pMS51             =0x8151020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono12MS41                 =0x8041000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono10MS51                 =0x8051000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10MS41                 =0x8041000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB10MS51              =0x8051020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB8MS41               =0x80410208, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono8MS51                  =0x80510008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono8MS41                  =0x80410008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGB8MS51               =0x80510208, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono_m9e3                  =0x80001010, // Pixel format 16bit	
	XI_GenTL_Image_Format_RGBA8                        =0x02200016, // This enumeration value sets the pixel format to Bayer RG 8	
	XI_GenTL_Image_Format_RGB16Planar                  =0x02300024, // This enumeration value sets the pixel format to RGB 16 Planar.	
	XI_GenTL_Image_Format_BGRA16                       =0x02400051, // This enumeration value sets the pixel format to Bayer BG 16	
	XI_GenTL_Image_Format_BGR16                        =0x0230004B, // This enumeration value sets the pixel format to Bayer BG 16	
	XI_GenTL_Image_Format_RGBA16                       =0x02400064, // This enumeration value sets the pixel format to Bayer RG 16	
	XI_GenTL_Image_Format_RGB16                        =0x02300033, // This enumeration value sets the pixel format to Bayer RG 16	
	XI_GenTL_Image_Format_xiMono8MS52                  =0x80520008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono10pMS52                =0x8152000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10MS52                 =0x8052000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono12p_m9e3               =0x8100100C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono16LS31                 =0x80310010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiPaBayerBG8                 =0x80000608, // Bayer BG 8 Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaBayerBG10                =0x8000060A, // Bayer BG 10 Polarized 4 pixels	
	XI_GenTL_Image_Format_xiMono12pLS31                =0x8131000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12LS31                 =0x8031000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono16LS32                 =0x80320010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono12pLS32                =0x8132000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12LS32                 =0x8032000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_Mono32                       =0x01200111, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerRG32                    =0x80000420, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerGR32                    =0x80000320, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerBG32                    =0x80000120, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerGB32                    =0x80000220, // Pixel format 32bit 	
	XI_GenTL_Image_Format_Mono32f                      =0x80003020, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerBG32f                   =0x80003120, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerGB32f                   =0x80003220, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerGR32f                   =0x80003320, // Pixel format 32bit 	
	XI_GenTL_Image_Format_BayerRG32f                   =0x80003420, // Pixel format 32bit 	
	XI_GenTL_Image_Format_xiMono_m13e3                 =0x80004010, // Pixel format 16bit	
	XI_GenTL_Image_Format_BayerBG24                    =0x80000118, // Pixel format 24bit 	
	XI_GenTL_Image_Format_BayerGB24                    =0x80000218, // Pixel format 24bit 	
	XI_GenTL_Image_Format_BayerGR24                    =0x80000318, // Pixel format 24bit 	
	XI_GenTL_Image_Format_BayerRG24                    =0x80000418, // Pixel format 24bit 	
	XI_GenTL_Image_Format_Mono24                       =0x80000018, // Pixel format 24bit 	
	XI_GenTL_Image_Format_xiBayerRG10MS41              =0x8041040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10MS41              =0x8041010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGR10MS41              =0x8041030A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pMS41             =0x8141010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGR10pMS41             =0x8141030A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerRG10pMS41             =0x8141040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG12MS41              =0x8041010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGR12MS41              =0x8041030C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerRG12MS41              =0x8041040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pMS41             =0x8141010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGR12pMS41             =0x8141030C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerRG12pMS41             =0x8141040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG8MS41               =0x80410108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGR8MS41               =0x80410308, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerRG8MS41               =0x80410408, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG11MS41              =0x8041010B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiBayerGB11MS41              =0x8041020B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiBayerGR11MS41              =0x8041030B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiBayerRG11MS41              =0x8041040B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiMono11MS41                 =0x8041000B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiBayerBG11pMS41             =0x8141010B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiBayerGB11pMS41             =0x8141020B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiBayerGR11pMS41             =0x8141030B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiBayerRG11pMS41             =0x8141040B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiMono11pMS41                =0x8141000B, // Pixel format 11bit	
	XI_GenTL_Image_Format_xiMono8LS32                  =0x80320008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono8LS31                  =0x80310008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiPaBayerBG10p               =0x8100060A, // Bayer BG 10p Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaBayerBG12                =0x8000060C, // Bayer BG 12 Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaBayerBG12p               =0x8100060C, // Bayer BG 12p Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaMono8                    =0x80000508, // Mono 8 Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaMono10                   =0x8000050A, // Mono 10 Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaMono10p                  =0x8100050A, // Mono 10p Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaMono12                   =0x8000050C, // Mono 12 Polarized 4 pixels	
	XI_GenTL_Image_Format_xiPaMono12p                  =0x8100050C, // Mono 12p Polarized 4 pixels	
	XI_GenTL_Image_Format_xiMono16MS41                 =0x80410010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG16MS41              =0x80410110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGB16MS41              =0x80410210, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGR16MS41              =0x80410310, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerRG16MS41              =0x80410410, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG14MS41              =0x8041010E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerBG14pMS41             =0x8141010E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGB14MS41              =0x8041020E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGB14pMS41             =0x8141020E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGR14MS41              =0x8041030E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGR14pMS41             =0x8141030E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerRG14MS41              =0x8041040E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerRG14pMS41             =0x8141040E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiMono14MS41                 =0x8041000E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiMono14pMS41                =0x8141000E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiMono8LS33                  =0x80330008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono16LS33                 =0x80330010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono12pLS33                =0x8133000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12LS33                 =0x8033000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono10pLS33                =0x8133000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10LS33                 =0x8033000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10LS33              =0x8033010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pLS33             =0x8133010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG12LS33              =0x8033010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pLS33             =0x8133010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG16LS33              =0x80330110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG8LS33               =0x80330108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG10LS34              =0x8034010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pLS34             =0x8134010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG12LS34              =0x8034010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pLS34             =0x8134010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG16LS34              =0x80340110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG8LS34               =0x80340108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono10LS34                 =0x8034000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pLS34                =0x8134000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono12LS34                 =0x8034000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12pLS34                =0x8134000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono16LS34                 =0x80340010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono8LS34                  =0x80340008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG10LS35              =0x8035010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10LS36              =0x8036010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pLS35             =0x8135010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pLS36             =0x8136010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG12LS35              =0x8035010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12LS36              =0x8036010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pLS35             =0x8135010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pLS36             =0x8136010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG16LS35              =0x80350110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG16LS36              =0x80360110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG8LS35               =0x80350108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG8LS36               =0x80360108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono10LS35                 =0x8035000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10LS36                 =0x8036000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pLS35                =0x8135000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pLS36                =0x8136000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono12LS35                 =0x8035000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12LS36                 =0x8036000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12pLS35                =0x8135000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12pLS36                =0x8136000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono16LS35                 =0x80350010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono16LS36                 =0x80360010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono8LS35                  =0x80350008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono8LS36                  =0x80360008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGR10LS35              =0x8035030A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGR10pLS35             =0x8135030A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGR12LS35              =0x8035030C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGR12pLS35             =0x8135030C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGR16LS35              =0x80350310, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGR8LS35               =0x80350308, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGB10LS35              =0x8035020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerRG10LS35              =0x8035040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerRG10pLS35             =0x8135040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB10pLS35             =0x8135020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB12LS35              =0x8035020C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerRG12pLS35             =0x8135040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB12pLS35             =0x8135020C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerRG12LS35              =0x8035040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB16LS35              =0x80350210, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerRG16LS35              =0x80350410, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGB8LS35               =0x80350208, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerRG8LS35               =0x80350408, // Pixel format 8bit	
	XI_GenTL_Image_Format_BayerBG13                    =0x8000010D, // Pixel format 13bit	
	XI_GenTL_Image_Format_BayerBG15                    =0x8000010F, // Pixel format 15bit	
	XI_GenTL_Image_Format_BayerGB13                    =0x8000020D, // Pixel format 13bit	
	XI_GenTL_Image_Format_BayerGB15                    =0x8000020F, // Pixel format 15bit	
	XI_GenTL_Image_Format_BayerGR13                    =0x8000030D, // Pixel format 13bit	
	XI_GenTL_Image_Format_BayerGR15                    =0x8000030F, // Pixel format 15bit	
	XI_GenTL_Image_Format_BayerRG13                    =0x8000040D, // Pixel format 13bit 	
	XI_GenTL_Image_Format_BayerRG15                    =0x8000040F, // Pixel format 15bit 	
	XI_GenTL_Image_Format_Mono13                       =0x8000000D, // Pixel format 13bit 	
	XI_GenTL_Image_Format_Mono15                       =0x8000000F, // Pixel format 15bit 	
	XI_GenTL_Image_Format_xiMono12g24                  =0x8400000C, // Pixel format 12bit (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_xiMono10g40                  =0x8400000A, // Pixel format 10bit (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_xiBayerRG12g24               =0x8400040C, // Pixel format 12bit (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_xiBayerGR10g40               =0x8400030A, // Pixel format 10bit (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_xiBayerGR12g24               =0x8400030C, // Pixel format 12bit (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_xiBayerGB10g40               =0x8400020A, // Pixel format 10bit (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_xiBayerGB12g24               =0x8400020C, // Pixel format 12bit (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_xiBayerBG12g24               =0x8400010C, // Pixel format 12bit (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_xiBayerRG10g40               =0x8400040A, // Pixel format 10bit (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_xiBayerBG10g40               =0x8400010A, // Pixel format 10bit (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_xiToF12g24AnB                =0x84AB0F0C, // Pixel format 12bit ToF A and B	
	XI_GenTL_Image_Format_xiToF12sg24AmB               =0x84A05F0C, // Pixel format 12bit ToF A - B (signed)	
	XI_GenTL_Image_Format_xiToF12g24ApB                =0x84A10F0C, // Pixel format 12bit ToF A + B	
	XI_GenTL_Image_Format_xiToF12sAmB                  =0x80A05F0C, // Pixel format 12bit ToF A - B (A-B in 2 bytes) ( (signed)	
	XI_GenTL_Image_Format_xiToF12g24Aon                =0x84A20F0C, // Pixel format 12bit ToF A only	
	XI_GenTL_Image_Format_xiToF12g24Bon                =0x84A30F0C, // Pixel format 12bit ToF B only	
	XI_GenTL_Image_Format_xiToF8sAmB                   =0x80A05F08, // Pixel format 8bit ToF A - B (A-B in 1 byte)  (signed)	
	XI_GenTL_Image_Format_xiToF12AnB                   =0x80AB0F0C, // Pixel format 12bit ToF A and B (A in 2 bytes, B in 2 bytes)	
	XI_GenTL_Image_Format_xiToF12Aon                   =0x80A20F0C, // Pixel format 12bit ToF A only (A in 2 bytes)	
	XI_GenTL_Image_Format_xiToF12ApB                   =0x80A10F0C, // Pixel format 12bit ToF A + B (A+B in 2 bytes)	
	XI_GenTL_Image_Format_xiToF12Bon                   =0x80A30F0C, // Pixel format 12bit ToF B only (B in 2 bytes)	
	XI_GenTL_Image_Format_xiToF8AnB                    =0x80AB0F08, // Pixel format 8bit ToF A and B (A in 1 byte, B in 1 byte)	
	XI_GenTL_Image_Format_xiToF8Aon                    =0x80A20F08, // Pixel format 8bit ToF A only (A in 1 byte)	
	XI_GenTL_Image_Format_xiToF8ApB                    =0x80A10F08, // Pixel format 8bit ToF A + B (A+B in 1 byte)	
	XI_GenTL_Image_Format_xiToF8Bon                    =0x80A30F08, // Pixel format 8bit ToF B only (B in 1 byte)	
	XI_GenTL_Image_Format_xiToF16sAmB                  =0x80A05F10, // Pixel format 16bit ToF A - B (A-B in 2 bytes) ( (signed)	
	XI_GenTL_Image_Format_xiMono12g24MS61              =0x8461000C, // Pixel format 12bit (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_xiMono10g40MS61              =0x8461020A, // Pixel format 10bit (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_xiBayerRG10g40MS61           =0x8461040A, // Pixel format 10bit (4 pixels in 5 bytes)	
	XI_GenTL_Image_Format_xiBayerRG12g24MS61           =0x8461040C, // Pixel format 12bit (2 pixels in 3 bytes)	
	XI_GenTL_Image_Format_xiBayerRG10MS61              =0x8061040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerRG12MS61              =0x8061040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono10MS61                 =0x8061020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono12MS61                 =0x8061000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono8LS3A                  =0x803A0008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG8LS3A               =0x803A0108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG10LS3A              =0x803A010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pLS3A             =0x813A010A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono10LS3A                 =0x803A000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pLS3A                =0x813A000A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB10LS3A              =0x803A020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB10pLS3A             =0x813A020A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB8LS3A               =0x803A0208, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGR10LS3A              =0x803A030A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGR10pLS3A             =0x813A030A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR8LS3A               =0x803A0308, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerRG10LS3A              =0x803A040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerRG10pLS3A             =0x813A040A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG8LS3A               =0x803A0408, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG12LS3A              =0x803A010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pLS3A             =0x813A010C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG16LS3A              =0x803A0110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGB12LS3A              =0x803A020C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB12pLS3A             =0x813A020C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB16LS3A              =0x803A0210, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGR12LS3A              =0x803A030C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGR12pLS3A             =0x813A030C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR16LS3A              =0x803A0310, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerRG12LS3A              =0x803A040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerRG12pLS3A             =0x813A040C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG16LS3A              =0x803A0410, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono12LS3A                 =0x803A000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12pLS3A                =0x813A000C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono16LS3A                 =0x803A0010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono14LS3A                 =0x803A000E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerBG14LS3A              =0x803A010E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGB14LS3A              =0x803A020E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGR14LS3A              =0x803A030E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerRG14LS3A              =0x803A040E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiMono14pLS3A                =0x813A000E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG14pLS3A             =0x813A010E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB14pLS3A             =0x813A020E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR14pLS3A             =0x813A030E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG14pLS3A             =0x813A040E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono8MS71                  =0x80710008, // Pixel format 8bit TOF (A+B+C)	
	XI_GenTL_Image_Format_xiMono10MS71                 =0x8071000A, // Pixel format 10bit TOF (A+B+C)	
	XI_GenTL_Image_Format_xiMono10pMS71                =0x8171000A, // Pixel format 10bit packed TOF (A+B+C)	
	XI_GenTL_Image_Format_xiMono12MS71                 =0x8071000C, // Pixel format 12bit TOF (A+B+C)	
	XI_GenTL_Image_Format_xiMono12pMS71                =0x8171000C, // Pixel format 12bit packed TOF (A+B+C)	
	XI_GenTL_Image_Format_xiMono16MS71                 =0x80710010, // Pixel format 16bit TOF (A+B+C)	
	XI_GenTL_Image_Format_xiBayerBG10LS37              =0x8037010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pLS37             =0x8137010A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG12LS37              =0x8037010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pLS37             =0x8137010C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG14LS37              =0x8037010E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerBG14pLS37             =0x8137010E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG16LS37              =0x80370110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG8LS37               =0x80370108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGB10LS37              =0x8037020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB10pLS37             =0x8137020A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB12LS37              =0x8037020C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB12pLS37             =0x8137020C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB14LS37              =0x8037020E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGB14pLS37             =0x8137020E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB16LS37              =0x80370210, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGB8LS37               =0x80370208, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGR10LS37              =0x8037030A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGR10pLS37             =0x8137030A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR12LS37              =0x8037030C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGR12pLS37             =0x8137030C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR14LS37              =0x8037030E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGR14pLS37             =0x8137030E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR16LS37              =0x80370310, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGR8LS37               =0x80370308, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerRG10LS37              =0x8037040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerRG10pLS37             =0x8137040A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG12LS37              =0x8037040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerRG12pLS37             =0x8137040C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG14LS37              =0x8037040E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerRG14pLS37             =0x8137040E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG16LS37              =0x80370410, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerRG8LS37               =0x80370408, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono10LS37                 =0x8037000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pLS37                =0x8137000A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono12LS37                 =0x8037000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12pLS37                =0x8137000C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono14LS37                 =0x8037000E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiMono14pLS37                =0x8137000E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono16LS37                 =0x80370010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono8LS37                  =0x80370008, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerBG10LS38              =0x8038010A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerBG10pLS38             =0x8138010A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG12LS38              =0x8038010C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerBG12pLS38             =0x8138010C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG14LS38              =0x8038010E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerBG14pLS38             =0x8138010E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerBG16LS38              =0x80380110, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerBG8LS38               =0x80380108, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGB10LS38              =0x8038020A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGB10pLS38             =0x8138020A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB12LS38              =0x8038020C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGB12pLS38             =0x8138020C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB14LS38              =0x8038020E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGB14pLS38             =0x8138020E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGB16LS38              =0x80380210, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGB8LS38               =0x80380208, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerGR10LS38              =0x8038030A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerGR10pLS38             =0x8138030A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR12LS38              =0x8038030C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerGR12pLS38             =0x8138030C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR14LS38              =0x8038030E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerGR14pLS38             =0x8138030E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerGR16LS38              =0x80380310, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerGR8LS38               =0x80380308, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiBayerRG10LS38              =0x8038040A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiBayerRG10pLS38             =0x8138040A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG12LS38              =0x8038040C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiBayerRG12pLS38             =0x8138040C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG14LS38              =0x8038040E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiBayerRG14pLS38             =0x8138040E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiBayerRG16LS38              =0x80380410, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiBayerRG8LS38               =0x80380408, // Pixel format 8bit	
	XI_GenTL_Image_Format_xiMono10LS38                 =0x8038000A, // Pixel format 10bit	
	XI_GenTL_Image_Format_xiMono10pLS38                =0x8138000A, // Pixel format 10bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono12LS38                 =0x8038000C, // Pixel format 12bit	
	XI_GenTL_Image_Format_xiMono12pLS38                =0x8138000C, // Pixel format 12bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono14LS38                 =0x8038000E, // Pixel format 14bit	
	XI_GenTL_Image_Format_xiMono14pLS38                =0x8138000E, // Pixel format 14bit packed (PFNC)	
	XI_GenTL_Image_Format_xiMono16LS38                 =0x80380010, // Pixel format 16bit	
	XI_GenTL_Image_Format_xiMono8LS38                  =0x80380008, // Pixel format 8bit	
} XI_GenTL_Image_Format_e;
	
//-------------------------------------------------------------------------------------------------------------------
// xiAPI structures
// structure containing description of image areas and format.
typedef struct
{
	DWORD                  Area0Left;          // Pixels of Area0 of image left.
	DWORD                  Area1Left;          // Pixels of Area1 of image left.
	DWORD                  Area2Left;          // Pixels of Area2 of image left.
	DWORD                  Area3Left;          // Pixels of Area3 of image left.
	DWORD                  Area4Left;          // Pixels of Area4 of image left.
	DWORD                  Area5Left;          // Pixels of Area5 of image left.
	DWORD                  ActiveAreaWidth;    // Width of active area.
	DWORD                  Area5Right;         // Pixels of Area5 of image right.
	DWORD                  Area4Right;         // Pixels of Area4 of image right.
	DWORD                  Area3Right;         // Pixels of Area3 of image right.
	DWORD                  Area2Right;         // Pixels of Area2 of image right.
	DWORD                  Area1Right;         // Pixels of Area1 of image right.
	DWORD                  Area0Right;         // Pixels of Area0 of image right.
	DWORD                  Area0Top;           // Pixels of Area0 of image top.
	DWORD                  Area1Top;           // Pixels of Area1 of image top.
	DWORD                  Area2Top;           // Pixels of Area2 of image top.
	DWORD                  Area3Top;           // Pixels of Area3 of image top.
	DWORD                  Area4Top;           // Pixels of Area4 of image top.
	DWORD                  Area5Top;           // Pixels of Area5 of image top.
	DWORD                  ActiveAreaHeight;   // Height of active area.
	DWORD                  Area5Bottom;        // Pixels of Area5 of image bottom.
	DWORD                  Area4Bottom;        // Pixels of Area4 of image bottom.
	DWORD                  Area3Bottom;        // Pixels of Area3 of image bottom.
	DWORD                  Area2Bottom;        // Pixels of Area2 of image bottom.
	DWORD                  Area1Bottom;        // Pixels of Area1 of image bottom.
	DWORD                  Area0Bottom;        // Pixels of Area0 of image bottom.
	DWORD                  format;             // Current format of pixels. XI_GenTL_Image_Format_e.
	DWORD                  flags;              // description of areas and image.
	
}XI_IMG_DESC,*LPXI_IMG_DESC;



// structure containing information about incoming image.
typedef struct
{
	DWORD                  size;               // Size of current structure on application side. When xiGetImage is called and size>=SIZE_XI_IMG_V2 then GPI_level, tsSec and tsUSec are filled.
	LPVOID                 bp;                 // Pointer to data. (see Note1)
	DWORD                  bp_size;            // Filled buffer size. (see Note2)
	XI_IMG_FORMAT          frm;                // Format of image data get from GetImage.
	DWORD                  width;              // width of incoming image.
	DWORD                  height;             // height of incoming image.
	DWORD                  nframe;             // Frame number. On some cameras it is reset by exposure, gain, downsampling change, auto exposure (AEAG).
	DWORD                  tsSec;              // Seconds part of image timestamp (see Note3).
	DWORD                  tsUSec;             // Micro-seconds part image timestamp (see Note3). Range 0-999999 us.
	DWORD                  GPI_level;          // Levels of digital inputs/outputs of the camera at time of exposure start/end (sample time and bits are specific for each camera model)
	DWORD                  black_level;        // Black level of image (ONLY for MONO and RAW formats). (see Note4)
	DWORD                  padding_x;          // Number of extra bytes provided at the end of each line to facilitate image alignment in buffers.
	DWORD                  AbsoluteOffsetX;    // Horizontal offset of origin of sensor and buffer image first pixel.
	DWORD                  AbsoluteOffsetY;    // Vertical offset of origin of sensor and buffer image first pixel.
	DWORD                  transport_frm;      // Current format of pixels on transport layer.
	XI_IMG_DESC            img_desc;           // description of image areas and format.
	DWORD                  DownsamplingX;      // Horizontal downsampling
	DWORD                  DownsamplingY;      // Vertical downsampling
	DWORD                  flags;              // description of XI_IMG.
	DWORD                  exposure_time_us;   // Exposure time of this image in microseconds. (see Note5)
	float                  gain_db;            // Gain used for this image in deci-bells. (see Note6)
	DWORD                  acq_nframe;         // Frame number. Reset only by acquisition start. NOT reset by change of exposure, gain, downsampling, auto exposure (AEAG).
	DWORD                  image_user_data;    // (see Note7)
	DWORD                  exposure_sub_times_us[5];// (see Note8)
	double                 data_saturation;    // Pixel value of saturation
	float                  wb_red;             // Red coefficient of white balance
	float                  wb_green;           // Green coefficient of white balance
	float                  wb_blue;            // Blue coefficient of white balance
	DWORD                  lg_black_level;     // In case of multi gain channel readout, the black level low gain channel
	DWORD                  hg_black_level;     // In case of multi gain channel readout, the black level high gain channel
	DWORD                  lg_range;           // In case of multi gain channel readout, the valid range of low gain channel
	DWORD                  hg_range;           // In case of multi gain channel readout, the valid range of high gain channel
	float                  gain_ratio;         // Gain ratio for dual-channel modes (high_gain_channel/low_gain_channel). Unitless.
	float                  fDownsamplingX;     // Horizontal downsampling
	float                  fDownsamplingY;     // Vertical downsampling
	XI_COLOR_FILTER_ARRAY  color_filter_array; //  Mosaic of tiny color filters placed over the pixel sensors of an image sensor.
	DWORD                  tof_phases_count;   // Number of phases of ToF sensor. E.g. 4 for four phases.
	DWORD                  tof_phase_id;       // Current phase ID of ToF sensor data starting from 1
	DWORD                  tof_multiple_phases_in_buffer;// Is multiple phases in buffer (bp)
	XI_DATA_SM             data_sign_mode;     // Sign mode or signedness is a property of data.
	XI_IMAGE_SEQUENCE_TYPE sequence_type;      // Type of image sequence (e.g. seq_disabled, seq_multiple_exposures)
	DWORD                  sequence_image_id;  // Current image in sequence. Starting from 1. Zero if sequence is disabled.
	DWORD                  sequence_length;    // Count of images in sequence. Zero for sequence disabled.
	
}XI_IMG,*LPXI_IMG;



//-------------------------------------------------------------------------------------------------------------------
// Global definitions

#define SIZE_XI_IMG_V1               offsetof(XI_IMG, tsSec)// structure size default
#define SIZE_XI_IMG_V2               offsetof(XI_IMG, black_level)// structure size with timestamp and GPI level information
#define SIZE_XI_IMG_V3               offsetof(XI_IMG, padding_x)// structure size with black level information
#define SIZE_XI_IMG_V4               offsetof(XI_IMG, AbsoluteOffsetX)// structure size with horizontal buffer padding information padding_x
#define SIZE_XI_IMG_V5               offsetof(XI_IMG, transport_frm)// structure size with AbsoluteOffsetX, AbsoluteOffsetY
#define SIZE_XI_IMG_V6               offsetof(XI_IMG, img_desc)// structure size with transport_frm
#define SIZE_XI_IMG_V7               offsetof(XI_IMG, DownsamplingX)// structure size with img_desc
#define SIZE_XI_IMG_V8               (offsetof(XI_IMG, flags)+sizeof(DWORD))// structure size with flags
#define SIZE_XI_IMG_V9               (offsetof(XI_IMG, gain_db)+sizeof(float))// structure size with gain_db
#define SIZE_XI_IMG_V10              (offsetof(XI_IMG, acq_nframe)+sizeof(DWORD))// structure size with acq_nframe
#define SIZE_XI_IMG_V11              (offsetof(XI_IMG, exposure_sub_times_us)+(5*sizeof(DWORD)))// structure size with exposure_sub_times_us[5]
#define SIZE_XI_IMG_V12              (offsetof(XI_IMG, data_saturation)+sizeof(double))// structure size with data_saturation
#define SIZE_XI_IMG_V13              (offsetof(XI_IMG, wb_blue)+sizeof(float))// structure size with wb_red, wb_green, wb_blue
#define SIZE_XI_IMG_V14              (offsetof(XI_IMG, gain_ratio)+sizeof(float))// structure size with lg_black_level, hg_black_level, lg_range, hg_range, gain_ratio
#define SIZE_XI_IMG_V15              (offsetof(XI_IMG, fDownsamplingY)+sizeof(float))// structure size with fDownsamplingX, fDownsamplingY
#define SIZE_XI_IMG_V16              (offsetof(XI_IMG, color_filter_array)+sizeof(XI_COLOR_FILTER_ARRAY))// structure size with color_filter_array
#define SIZE_XI_IMG_V17              (offsetof(XI_IMG, tof_multiple_phases_in_buffer)+sizeof(DWORD))// structure size with tof_phases_count, tof_phase_id, tof_multiple_phases_in_buffer
#define SIZE_XI_IMG_V18              (offsetof(XI_IMG, data_sign_mode)+sizeof(XI_DATA_SM))// structure size with data_sign_mode
#define SIZE_XI_IMG_V19              (offsetof(XI_IMG, sequence_length)+sizeof(DWORD))// structure size with sequence_length
#define XI_PRM_INFO_SETTABLE         ":settable"          // Is parameter settable(xiSetParamInt(handler, XI_PRM_ABC XI_PRM_INFO_SETTABLE, param_value);)
#define XI_PRM_INFO_MIN              ":min"               // Parameter minimum
#define XI_PRM_INFO_MAX              ":max"               // Parameter maximum
#define XI_PRM_INFO_INCREMENT        ":inc"               // Parameter increment
#define XI_PRM_INFO                  ":info"              // Parameter value
#define XI_PRMM_REQ_VAL_BUFFER_SIZE  ":req_buf_size"      // Parameter modifier for getting required value buffer size for xiGetParam (e.g. XI_PRM_DEVICE_MANIFEST XI_PRMM_REQ_BUFFER_SIZE can be used to get needed size of buffer for manifest)
#define XI_PRMM_DIRECT_UPDATE        ":direct_update"     // Parameter modifier for direct update without stopping the streaming. E.g. XI_PRM_EXPOSURE XI_PRMM_DIRECT_UPDATE can be used with this modifier
#define XI_MQ_LED_STATUS1            1                    // MQ Status 1 LED selection value.
#define XI_MQ_LED_STATUS2            2                    // MQ Status 2 LED selection value.
#define XI_MQ_LED_POWER              3                    // MQ Power LED selection value.
#define XI_PRM_BPC                   "bpc"                // Legacy xiAPI parameter name for defect correction. Kept for backward compatibility.
/*************************************************************************************/

#ifdef XIAPI_AS_APPLICATION
#undef XIAPI
#define XIAPI
#endif // XIAPI_AS_APPLICATION

/*************************************************************************************/
/**
   \brief Return number of discovered devices
   
   Returns the pointer to the number of all discovered devices.

   @param[out] pNumberDevices			number of discovered devices
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiGetNumberDevices(OUT PDWORD pNumberDevices);
/**
   \brief Get device parameter
   
   Allows the user to get the current device state and information.
  Parameters can be used:XI_PRM_DEVICE_SN, XI_PRM_DEVICE_INSTANCE_PATH, XI_PRM_DEVICE_TYPE, XI_PRM_DEVICE_NAME

   @param[in] DevId						index of the device
   @param[in] prm						parameter name string.
   @param[in] val						pointer to parameter set value.
   @param[in] size						pointer to integer.
   @param[in] type						pointer to type container.
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiGetDeviceInfo(IN DWORD DevId, const char* prm, void* val, DWORD * size, XI_PRM_TYPE * type);
/**
   \brief Initialize device
   
   This function prepares the camera's software for work.
   It populates structures, runs initializing procedures, allocates resources - prepares the camera for work.

	\note Function creates and returns handle of the specified device. To de-initialize the camera and destroy the handler xiCloseDevice should be called.	

   @param[in] DevId						index of the device
   @param[out] hDevice					handle to device
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiOpenDevice(IN DWORD DevId, OUT PHANDLE hDevice);
/**   
	\brief Initialize selected device      
	
	This function prepares the camera's software for work. Camera is selected by using appropriate enumerator and input parameters. 
	It populates structures, runs initializing procedures, allocates resources - prepares the camera for work.	
	
	\note Function creates and returns handle of the specified device. To de-initialize the camera and destroy the handler xiCloseDevice should be called.	  
	
	@param[in]  sel                     select method to be used for camera selection
	@param[in]  prm                     input string to be used during camera selection
	@param[out] hDevice					handle to device   @return XI_OK on success, error value otherwise. 
	*/
XIAPI XI_RETURN __cdecl xiOpenDeviceBy(IN XI_OPEN_BY sel, IN const char* prm, OUT PHANDLE hDevice);
/**
   \brief Uninitialize device
   
   Closes camera handle and releases allocated resources.

   @param[in] hDevice					handle to device
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiCloseDevice(IN HANDLE hDevice);
/**
   \brief Start image acquisition
   
   Begins the work cycle and starts data acquisition from the camera.

   @param[in] hDevice					handle to device
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiStartAcquisition(IN HANDLE hDevice);
/**
   \brief Stop image acquisition
   
   Ends the work cycle of the camera, stops data acquisition and deallocates internal image buffers.

   @param[in] hDevice					handle to device
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiStopAcquisition(IN HANDLE hDevice);
/**
   \brief Return pointer to image structure
   
   Allows the user to retrieve the frame into LPXI_IMG structure.

   @param[in] hDevice  handle to device
   @param[in] timeout  time interval required to wait for the image (in milliseconds).
   @param[out] img     pointer to image info structure
                       please read more in the manual about XI_PRM_BUFFER_POLICY
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiGetImage(IN HANDLE hDevice, IN DWORD timeout, OUT LPXI_IMG img);
/**
   \brief Set device parameter
   
   Allows the user to control device.

   @param[in] hDevice					handle to device
   @param[in] prm						parameter name string.
   @param[in] val						pointer to parameter set value.
   @param[in] size						size of val.
   @param[in] type						val data type.
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiSetParam(IN HANDLE hDevice, const char* prm, void* val, DWORD size, XI_PRM_TYPE type);
/**
   \brief Get device parameter
   
   Allows the user to get the current device state and information.

   @param[in] hDevice					handle to device
   @param[in] prm						parameter name string.
   @param[in] val						pointer to parameter set value.
   @param[in] size						pointer to integer.
   @param[in] type						pointer to type container.
   @return XI_OK on success, error value otherwise.
 */
XIAPI XI_RETURN __cdecl xiGetParam(IN HANDLE hDevice, const char* prm, void* val, DWORD * size, XI_PRM_TYPE * type);

/*-----------------------------------------------------------------------------------*/
//Set device parameter
XIAPI XI_RETURN __cdecl xiSetParamInt(IN HANDLE hDevice, const char* prm, const int val);
XIAPI XI_RETURN __cdecl xiSetParamInt64(IN HANDLE hDevice, const char* prm, const uint64_t val);
XIAPI XI_RETURN __cdecl xiSetParamFloat(IN HANDLE hDevice, const char* prm, const float val);
XIAPI XI_RETURN __cdecl xiSetParamString(IN HANDLE hDevice, const char* prm, void* val, DWORD size);
/*-----------------------------------------------------------------------------------*/
//Get device parameter
XIAPI XI_RETURN __cdecl xiGetParamInt(IN HANDLE hDevice, const char* prm, int* val);
XIAPI XI_RETURN __cdecl xiGetParamInt64(IN HANDLE hDevice, const char* prm, uint64_t* val);
XIAPI XI_RETURN __cdecl xiGetParamFloat(IN HANDLE hDevice, const char* prm, float* val);
XIAPI XI_RETURN __cdecl xiGetParamString(IN HANDLE hDevice, const char* prm, void* val, DWORD size);
/*-----------------------------------------------------------------------------------*/
//Get device info
XIAPI XI_RETURN __cdecl xiGetDeviceInfoInt(IN DWORD DevId, const char* prm, int* value);
XIAPI XI_RETURN __cdecl xiGetDeviceInfoString(IN DWORD DevId, const char* prm, char* value, DWORD value_size);
XIAPI XI_RETURN __cdecl xiSetDeviceInfoString(IN DWORD DevId, const char* prm, char* value, DWORD value_size);
/*-----------------------------------------------------------------------------------*/


/*************************************************************************************/
// XIMEA Offline Processing Interface
// All functions can be called independently on camera device
/*************************************************************************************/

/*-----------------------------------------------------------------------------------*/
// Workflow:
//
// xiProcessingHandle_t proc;
// xiProcOpen(proc)
// get cam_context (string) previously stored in acquisition time (e.g. XI_PRM_IMAGE_DATA_FORMAT)
// xiProcSetParam(proc, XI_PRM_API_CONTEXT_LIST, cam_context, strlen(cam_context), xiTypeString)
// Some parameters can be changed here. 
// E.g. image data format can be changed by: xiProcSetParam(proc, XI_PRM_IMAGE_DATA_FORMAT, ...)
// while (in_image is available)
// {
//    xiProcPushImage(proc, in_image)
//    xiProcPullImage(proc, out_image)
//    use processed image (out_image)
// }
// xiProcClose(proc)
/*-----------------------------------------------------------------------------------*/

typedef void* xiProcessingHandle_t;

/**
* xiProcOpen
* Opens new instance for Image Processing entity
* @param[out] processing_handle New processing handle - valid on success
*/
XIAPI XI_RETURN __cdecl xiProcOpen(xiProcessingHandle_t* processing_handle);

/**
* xiProcSetParam
* Sets the selected parameter to processing
* @param[in] processing_handle			Handle for processing
* @param[in] prm						parameter name string.
* @param[in] val						pointer to parameter set value.
* @param[in] size						size of val.
* @param[in] type						val data type.
* @return XI_OK on success, error value otherwise.
*/
XIAPI XI_RETURN __cdecl xiProcSetParam(xiProcessingHandle_t processing_handle, const char* prm, void* val, DWORD size, XI_PRM_TYPE type);

/**
* xiProcGetParam
* Gets the selected parameter from processing
* @param[in] processing_handle			Handle for processing
* @param[in] prm						parameter name string.
* @param[in] val						pointer to parameter set value.
* @param[in] size						size of val.
* @param[in] type						val data type.
* @return XI_OK on success, error value otherwise.
*/
XIAPI XI_RETURN __cdecl xiProcGetParam(xiProcessingHandle_t processing_handle, const char* prm, void* val, DWORD size, XI_PRM_TYPE type);

/**
* xiProcPushImage
* Set unprocessed image to processing chain
* @param[in] processing_handle Processing handle
* @param[in] first_pixel First byte of first pixel of image to be processed
*/
XIAPI XI_RETURN __cdecl xiProcPushImage(xiProcessingHandle_t processing_handle, unsigned char* first_pixel);

/**
* xiProcPushXiImg
* Set unprocessed image to processing chain with information from XI_IMG
* @param[in] processing_handle Processing handle
* @param[in] image Pointer to XI_IMG structure
*/
XIAPI XI_RETURN __cdecl xiProcPushXiImg(xiProcessingHandle_t processing_handle, XI_IMG* image);

/**
* xiProcPullImage
* Gets processed image from processing chain
* @param[in] processing_handle Processing handle
* @param[in] timeout_ms Processing handle
* @param[in/out] new_image buffer for new_image information. On call - it should contain valid size, bp, bp_size.
*                filling of XI_IMG is working the same way as on xiGetImage.
*/
XIAPI XI_RETURN __cdecl xiProcPullImage(xiProcessingHandle_t processing_handle, int timeout_ms, XI_IMG* new_image);

/**
* xiProcClose
* Closes instance for Image Processing entity
* @param[out] processing_handle Processing handle to be closed
*/
XIAPI XI_RETURN __cdecl xiProcClose(xiProcessingHandle_t processing_handle);

/*************************************************************************************/

#ifdef __cplusplus
}
#endif

#endif /* __XIAPI_H */
