xiapi-sys 0.1.2

Unsafe low-level ffi bindings to the XIMEA API
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762

			
//-------------------------------------------------------------------------------------------------------------------
// 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

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_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. 
// 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_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_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 %) 
// 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_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_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 and return available interface bandwidth(int 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 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_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;

//-------------------------------------------------------------------------------------------------------------------
// 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_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_14                    =14, // 14 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_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_COLOR_FILTER_ARRAY;

// 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, // Trigger starts acquisition of first frame.
	
} XI_TRG_SELECTOR;

// Trigger overlap modes
typedef enum
{
	XI_TRG_OVERLAP_OFF           =0, // No trigger overlap is permitted. If camera is in read-out phase, all triggers are rejected.
	XI_TRG_OVERLAP_READ_OUT      =1, // Trigger is accepted only when sensor is ready to start next exposure with defined exposure time. Trigger is rejected when sensor is not ready for new exposure with defined exposure time. (see Note1)
	XI_TRG_OVERLAP_PREV_FRAME    =2, // Trigger is accepted by camera any time. If sensor is not ready for the next exposure - the trigger is latched and sensor starts exposure as soon as exposure can be started with defined exposure time.
	
} 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;

// 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 due to overlap. (see Note2)
	XI_CNT_SEL_FRAME_MISSED_TRIGGER_DUETO_FRAME_BUFFER_OVR=4, // Number of missed triggers due to frame buffer full. (see Note2)
	XI_CNT_SEL_FRAME_BUFFER_OVERFLOW=5, // Frame buffer full counter. (see Note2)
	
} 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_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_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, // Gain selector selects North column analog gain. This is available only on some cameras.
	XI_GAIN_SELECTOR_ANALOG_S    =8, // Gain selector selects 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, // Sensor parallel ADC readout (on/off)
	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, // Sensor high conversion gain (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_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;

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_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.
	
}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 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
   @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 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 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
// xiProcSetParam(proc, XI_PRM_API_CONTEXT_LIST, cam_context, strlen(cam_context), xiTypeString)
// while (in_image is available)
// {
//    xiProcPushImage(proc, in_image)
//    xiProcPullImage(proc, out_image)
//    use processed image (out_image)
// }
// xiProcClose(proc)
/*-----------------------------------------------------------------------------------*/

typedef void* xiProcessingHandle_t;

/**
* OpenProcessing
* 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);

/**
* xiSetProcParam
* 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);

/**
* xiGetProcParam
* 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);

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

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

/**
* xiPullImage
* Gets processed image from processing chain
* @param[in] processing_handle Processing handle
* @param[in] timeout_ms Processing handle
*/
XIAPI XI_RETURN __cdecl xiProcPullImage(xiProcessingHandle_t processing_handle, int timeout_ms, XI_IMG* new_image);

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

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

#ifdef __cplusplus
}
#endif

#endif /* __XIAPI_H */