icube-sdk-sys 0.2.1

Bindings for the iCube SDK C 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
// Modified iCube SDK header file for use with https://github.com/LucaCiucci/icube-sdk-sys

#ifndef __ICubeSDK_H__
#define __ICubeSDK_H__


//#define ICUBE_USE_WINDOWS_HEADERS

#ifdef ICUBE_USE_WINDOWS_HEADERS
//#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#else
#include <stdbool.h>
//#define BOOl bool
//#define INT int
//#define UINT unsigned int
////#define UINT unsigned int
////#define INT int
typedef int BOOL;
typedef int INT;
typedef unsigned int UINT;
typedef unsigned long ULONG;
typedef float FLOAT;
#define IN

#define OUT

#define WINAPI      __stdcall

#define CONST const

typedef char CHAR;
typedef CHAR *PCHAR, *LPCH, *PCH;
typedef CONST CHAR *LPCCH, *PCCH;
#define CALLBACK    __stdcall

typedef unsigned char BYTE;
typedef long LONG;
typedef void VOID;
typedef void* PVOID;
typedef void* HWND;
typedef int* PINT;
typedef unsigned long* PULONG;
typedef float* PFLOAT;
#endif


//---------------------------------------------------------------------------
// Global Defines

#define IC_SUCCESS               0

#define IC_ERROR                 1


// Additional error codes

#define IC_IF_NOT_OPEN          -1

#define IC_WRONG_PARAM          -2

#define IC_OUT_OF_MEMORY        -3

#define IC_ALREADY_DONE         -4

#define IC_WRONG_CLOCK_VAL      -5

#define IC_COM_LIB_INIT         -6

#define IC_NOT_IF_STARTED       -7

#define IC_WRONG_ROI_ID         -8

#define IC_IF_NOT_ENABLED       -9

#define IC_COLOR_CAM_ONLY       -10

#define IC_DRIVER_VERSION       -11

#define IC_D3D_INIT             -12

#define IC_BAD_POINTER          -13

#define IC_ERROR_FILE_SIZE      -14

#define IC_RECONNECTION_ACTIVE  -15

#define IC_USB_REQUEST_FAIL     -16     // usb communication with the camera failed

#define IC_RESOURCE_IN_USE      -17     // 

#define IC_DEVICE_GONE          -18     // camera is not accsessible  

#define IC_DLL_MISMATCH         -19     // dll versions are not compatible

#define IC_WRONG_FW_VERSION     -20     // feature not supported by this firmware version

#define IC_NO_RGB_CALLBACK      -21     // SaveToFile() needs eihter a preview or rgb callback enabled

#define IC_NO_USB30_CAMERA      -22     // feature not supported by usb2.0 cameras

#define IC_ERR_FIX_RELATION     -23     // serial number of fix registered device does not match

#define IC_CRC_CONFIG_DATA      -24     // crc of config data is corrupt

#define IC_CONFIG_DATA          -25     // config data is corrupt

#define IC_ERR_START_PNP        -26

#define IC_INVALID_CAM_TYPE     -27 

#define IC_NOT_IF_STREAMING     -28     // feature not allowed, if camera is streaming

#define	IC_USB_STARTUP		    -29     // USB transfer error during start aquisition


// Video Mode definitions
// (used with: ICubeSDK_SetMode,ICubeSDK_GetMode)

#define MODE_320x240             0

#define MODE_640x480             1

#define MODE_752x480             2

#define MODE_800x600             3

#define MODE_1024x768            4

#define MODE_1280x1024           5

#define MODE_1600x1200           6

#define MODE_2048x1536           7

#define MODE_2592x1944           8

#define MODE_3840x2748           9

#define MODE_1920x1200           10


// BinSkip definitions
// (used with: ICubeSDK_SetBinSkip,ICubeSDK_GetBinSkip,ICubeSDK_GetBinSkipList)

#define MODE_SKIP                0

#define MODE_BIN                 1


#define BIN_SKIP_OFF             0

#define BIN_SKIP_2ND_PIXEL       1

#define BIN_SKIP_4TH_PIXEL       2



// Parameter definitions 
// (used with: ICubeSDK_SetCamParameter,ICubeSDK_GetCamParameter,
// ICubeSDK_GetCamParameterRange,ICubeSDK_GetParamAuto,ICubeSDK_SetParamAuto,
// ICubeSDK_SetParamAutoDef,ICubeSDK_SetParamOnePush)

// Measure field definitions
// (used with REG_MEASURE_FIELD_AE)

#define MEASUREFIELD_100         2      // 100% (full frame,default)

#define MEASUREFIELD_60          1      // 60%

#define MEASUREFIELD_30          0      // 30%


// Shutter definitions
// (used with REG_SHUTTER)

#define SHUTTER_ROLLING          0     // all models

#define SHUTTER_GLOBAL_RESET     1     // (4133CU/BU,4133CU only)

#define SHUTTER_GLOBAL           2     // (4133CU/BU (default),4133CU (default) only)


// Parameter ON||OFF definitions

#define OFF                      0

#define ON                       1


// Trigger invert definitions
// hardware trigger will be detected on the defined edge
// (used with REG_TRIGGER_INVERT)

#define FALLING_EDGE             0     // (default)

#define RISING_EDGE              1	


// Software trigger mode definitions
// (used with REG_SW_TRIG_MODE)

#define DELAYED_TRIGGER_RETURN   0     // camera checks for frame arrival (default),

                                       // ICubeSDK_SetTrigger(..,TRIG_SW_DO) returns this status
#define IMMEDIATE_TRIGGER_RETURN 1     // no camera check


// Data transmission definitions
// (used with REG_DATA_TRANSMISSION)

#define IS_8BIT                  0     // (default)  

#define IS_16BIT                 1           


// Bayer Conversion definitions
// (used with REG_BAYER_CONVERSION)

#define DE_BAYER_3x3             0          

#define DE_BAYER_5x5             1     // (default)           


// Gamma definitions
// (used with REG_GAMMA_MODE)

#define GAMMA_MODE_DEFAULT       2     // (default)   

#define GAMMA_MODE_sRGB          1

#define GAMMA_MODE_ITU709        0     // (HDTV)


// Graphic definitions 
// (used with REG_GRAPHIC_MODE)

#define DISPLAY_GDI              0

#define DISPLAY_D3D              1



// Camera parameters definitions

#define REG_BRIGHTNESS           1     // write: only when REG_COLOR_PROCCESSING enabled, read: always

#define REG_CONTRAST             2     // write: only when REG_COLOR_PROCCESSING enabled, read: always

#define REG_GAMMA                3     // write: only when REG_GAMMA_ENABLE enabled, read: always

#define REG_FLIPPED_V            4     // (ON||OFF); OFF (default)

#define REG_FLIPPED_H            5     // (ON||OFF); OFF (default)

#define REG_WHITE_BALANCE        6     // (one push)

#define REG_EXPOSURE_TIME        7     // all models

#define REG_EXPOSURE_TARGET      8     // sets the target-value for the auto exposure algorithm 

#define REG_RED                  9     // only for color models; RGB Gain value

#define REG_GREEN                10    // only for color models

#define REG_BLUE                 11    // only for color models

#define REG_BLACKLEVEL           12    // sensor blacklevel

#define REG_GAIN                 13    // sensor gain

#define REG_COLOR                14    // (ON||OFF) read: color || bw model

#define REG_PLL                  15    // all models

#define REG_STROBE_LENGHT        16    // length of strobe pulse output (msec)

#define REG_STROBE_DELAY         17    // delay before strobe pulse is executed (msec)

#define REG_TRIGGER_DELAY        18    // delay before hardware trigger is executed (msec)

#define REG_SATURATION           19    // only for color models, when REG_COLOR_PROCCESSING enabled 

#define REG_COLOR_ENHANCE        20    // obsolet

#define REG_TRIGGER_INVERT       21    // (FALLING_EDGE (default) || RISING_EDGE)

#define REG_RECONNECTIONS        22    // get the value of camera reconnections

#define REG_MEASURE_FIELD_AE     23    // measure field for auto exposure

#define REG_AVI_STATE            24    // get the avi stream save status (ON||OFF)

#define REG_FOCUS                25    // not implemented yet

#define REG_SHUTTER              26    // ((4133CU/BU,4203CU/BU))

#define REG_ROI_ID               27    // ((4133CU/BU,4203CU/BU),fpga board cameras)

#define REG_ROI_CYCLE            28    // (4133CU/BU,4203CU/BU) number of repetitions of the particular roi


#define REG_DEFECT_COR           43    // (4133CU/BU,4203CU/BU) DefectPixelCorrection (ON||OFF); OFF(default)


#define REG_BAD_FRAME            81    // read bad frame count (also possible with ICubeSDK_GetBrokenFrames)

#define REG_GOOD_FRAME           82    // read good frame count (also possible with ICubeSDK_GetGoodFrames)


#define REG_SW_TRIG_MODE         94    // (DELAYED_TRIGGER_RETURN (default) || IMMEDIATE_TRIGGER_RETURN)


#define REG_ROI_FPGA_ONE_FRAME   96    // (fpga board only) pseudo frame format (ON||OFF)	

#define REG_CALLBACK_BR_FRAMES   97    // Broken frames also triggering the callback function (ON||OFF); OFF(default)

#define REG_FGPA_VBLANKING       98    // (fpga board only) output Frame blanking

#define REG_FGPA_HBLANKING       99    // (fpga board only) output Frame blanking

#define REG_FGPA_CLK_DIVIDER     100   // (fpga board only) output clock divider (ON||OFF)

#define REG_FGPA_ON_BOARD        101   // check if camera has fpga board (ON||OFF)

#define REG_SET_GPIO             102   // bit masked: XXXX X J3-7 J3-6 J3-5

#define REG_GET_GPIO             103   // bit masked: XXXX X J3-7 J3-6 J3-5

#define REG_SET_GPIO_MODE        104   // (0==Input || 1==Output),bit masked: XXXX X J3-7 J3-6 J3-5

#define REG_MASK_ROI_ID          105   // roi_id masked in buffersize of callback 

#define REG_RED_OFFSET           106   // only for color models; RGB offset value

#define REG_GREEN_OFFSET         107   // only for color models

#define REG_BLUE_OFFSET          108   // only for color models

#define REG_HUE                  109   // only for color models; write: only when REG_COLOR_PROCCESSING enabled, read: always

#define REG_COLOR_CORRECTION     110   // (ON||OFF) ColorCorrection matrix; OFF (default)

#define REG_GAMMA_ENABLE         111   // (ON||OFF) en/disable gamma module to save CPU load; ON (default)

#define REG_GAMMA_MODE           112   // only for color models ; write: only when REG_GAMMA_ENABLE enabled, read: always

#define REG_INVERT_PIXEL         113   // (ON||OFF)  bw cams only

#define REG_TNR                  115   // (ON||OFF)  only for color models, temporal noise reduction

#define REG_BAYER_CONVERSION     116   // only for color models; choose different debayering

#define REG_COLOR_PROCESSING     117   // (ON||OFF) en/disable color proc module module to save CPU load;  ON (default)	

#define REG_USB_SPEED            118   // 0: usb port is high speed, 1: usb port is super speed capable (useful for super speed camera)

#define REG_DEVICE_SPEED         119   // 0: camera is high speed, 1: camera is super speed capable

#define REG_DATA_TRANSMISSION    120   // 0: 8 bit per pixel, 1: 16 bit per pixel in raw mode


#define REG_SIGNIFICANT_BITS     125   // number of significant bits in pixel 

#define REG_GRAPHIC_MODE         126   // GDI (default)|| D3D 

#define REG_EDGE_ENHANCEMENT     128   // (ON||OFF) edge enhancement; OFF (default)

#define REG_EDGE_ENHANCEMENT_GAIN 129  // 0-128 (default 64)


#define REG_SENSOR_STROBE        132   // (4133CU/BU,4203CU/BU) sensor strobe (ON||OFF); OFF(default)


#define REG_TRIG_TIMEOUT         138   // (super speed cameras)	default: 20000 msec	

#define REG_PIPE_TIMEOUT_MODE    139   // (super speed cameras)	overwrite default configuration

#define REG_RESET_CAMERA         140   // reset the camera

#define REG_DISCONNECTIONS       141   // get the value of camera disconnections

#define REG_XACT_RECOVER_MODE    142   // (superspeed camera only) recover transaction errors

#define REG_RESET_TO_DEFAULT     143   // reset all camera parameters to default values


#define REG_TRANSFER_BUF_CNT     145   // adjustment of usb streaming buffers

#define REG_SW_TRIG_WD_MODE      146   // (ON||OFF); ON(default)

#define REG_AQU_FRAMERATE        147   // (2234CU/BU) get/set the framerate

#define REG_SENSOR_STROBE_DELAY  148   // (4133CU/BU,4203CU/BU) only	

#define REG_SENSOR_OVERLAPPED    149   // (4133CU/BU,4203CU/BU) only 

#define REG_TRIG_DELAY_DIVIDER   150   // (4133CU/BU,4203CU/BU) 


// Parameter definitions
// (used with: ICubeSDK_GetCamParameterRange)

typedef struct {
	BOOL    bEnabled;
	BOOL    bAuto;
	BOOL    bOnePush;
	UINT    nDef;
	UINT    nMin;
	ULONG   nMax;	
} 
PARAM_PROPERTY, *P_PARAM_PROPERTY;

#define DEFAULT_GAMMA            64



// Parameter definitions (float value)
// (used with: ICubeSDK_GetExposureRange)
// values in [msec]

typedef struct {
	BOOL    bEnabled;
	BOOL    bAuto;
	BOOL    bOnePush;
	FLOAT   nDef;
	FLOAT   nMin;
	FLOAT   nMax;	
} 
PARAM_PROPERTY_f, *P_PARAM_PROPERTY_f;

// Roi definitions
// (used with: REG_ROI_ID)

// ROI ID: (4133CU/BU)
// SIMR: Single Integration Multiple Roi  (4133CU/BU only)
// 1, 2 or 4 areas of interest to be acquired within the same integrated image
// MIMR: Multible Integration Multiple Roi (4133CU/BU only)
// 
#define ROI_ID_1_2               0     // SIMR (4133CU/BU only)

#define ROI_ID_1_1               1     // default mode for all models (1st roi)

#define ROI_ID_2                 2     // MIMR additonal (4133CU/BU only)

#define ROI_ID_3                 3

#define ROI_ID_4                 4


// ROI ID: (all cameras with fpga board)
//
#define ROI_ID_0                 0     // fpga input size

#define ROI_ID_1                 1     // fpga output size roi 1

#define ROI_ID_2                 2   

#define ROI_ID_3                 3

#define ROI_ID_4                 4

#define ROI_ID_5                 5


// ROI ID: (all cameras without fpga board,except 4133CU/BU)
// only one roi available (roi1)

// (used with: ICubeSDK_SetResolution, ICubeSDK_GetResolution)

typedef struct {
	BOOL   bEnabled;
	INT    nXRes;
	INT    nYRes;
	INT    nXPos;
	INT    nYPos;
} 
ROI_PROPERTY, *P_ROI_PROPERTY;

// Due to usb packet size, the Region of interest size has limitations.
// The horizontal and vertical Roi-size must be dividable by 4. 

#define ROI_STEP_SIZE            4


// (11000CU/BU only)
// Due to sensor limitations, 
// the horizontal and vertical Roi-size must be dividable by 8. 

#define ROI_STEP_SIZE_11000      8



// (used with: ICubeSDK_GetResolutionRange)

typedef struct {
	INT    nXMin;
	INT    nXMax;
	INT    nYMin;
	INT    nYMax;
}
ROI_RANGE_PROPERTY, *P_ROI_RANGE_PROPERTY;


// Trigger definitions
// (used with: ICubeSDK_SetTrigger, ICubeSDK_GetTrigger)

#define TRIG_SW_START            0     // start software trigger

#define TRIG_SW_DO               1     // do a software trigger pulse

#define TRIG_HW_START            2     // start hardware trigger

#define TRIG_STOP                3     // stop software || hardware trigger

#define TRIG_SW_START_2          4     // GlobalResetRelease software trigger mode (1500CU/BU,1300CU,NET3_11000BU/CU)

#define TRIG_HW_START_2          5     // GlobalResetRelease hardware trigger mode (1500CU/BU,1300CU,,NET3_11000BU/CU)



// Versions definitions
// (used with: ICubeSDK_GetVersion)

#define	DLL_VERSION              0     // (NET_USB_CMO.dll) 

#define API_VERSION              1     // (ICubeSDK.dll)


// Callback definitions
// (used with: ICubeSDK_SetCallback)

#define CALLBACK_RAW             0     // 8bit/pixel data is received

                                       // (if the camera is a color model data == raw bayer)
#define CALLBACK_RGB             1     // 24bit/pixel data is received



// DisplayMode definitions
// (used with: ICubeSDK_SetDisplayMode)

#define DISPLAY_NORMAL           0     // frame is previewed in original size (default)

#define DISPLAY_FIT_TO_WINDOW    1     // frame is previewed in resized mode (window size) 

#define DISPLAY_RECT             2     // frame is previewed in resized mode (rect size)


typedef struct {
        INT    left;
        INT    top;
        INT    right;
        INT    bottom;
} 
DISP_PROPERTY, *P_DISP_PROPERTY;


// AVI stream definitions
// (used with: ICubeSDK_SaveAvi)

#define AVI_DIB                  0      // currently, only this avi mode is supported



// Name length definitions
// (used with: ICubeSDK_GetName,ICubeSDK_GetSerialNum,ICubeSDK_GetVersion,ICubeSDK_GetFWVersion)

#define NETCAM_NAME_LENGTH       14     // length of the name string

#define NETCAM_SERIAL_LENGTH     10     // length of the serial number string

#define NETCAM_VERSION_LENGTH    9      // length of the version string



// IsOpen definitions
// (used with: ICubeSDK_IsOpen)

#define IS_CLOSED                0

#define IS_OPEN                  1


// IsStarted definitions
// (used with: ICubeSDK_IsStarted)

#define IS_STOPPED               0

#define IS_STARTED               1


// event definitions
// (used with: ICubeSDK_SetCallbackEx)

#define EVENT_NEW_FRAME          0		

#define EVENT_DEV_DISCONNECTED   1     // a camera is disconnected	

#define EVENT_DEV_RECONNECTED    2     // a camera is reconnected		

#define EVENT_USB_TRANSFER_FAILED 3    // a usb transaction error occured during streaming


// pipe timeout mode definitions
// (used with: REG_PIPE_TIMEOUT_MODE)

#define MODE_TIMEOUT_NONE        0	

#define MODE_TIMEOUT_ALL         1

#define MODE_TIMEOUT_PART        2


// parameter set definitions
// (used with: ICubeSDK_CamParameterSet())

#define PARAMETER_LOAD_TO_FILE   0     // load from camera to .ini-file

#define PARAMETER_LOAD_FROM_FILE 1     // load from .ini-file to camera 


//---------------------------------------------------------------------------
//#define LIBFILE		// load DLL with libfile

//---------------------------------------------------------------------------
#ifdef LIBFILE       

//#define BORLAND_C		// if used with borland c++ builder -> uncomment

#define ICubeSDK


#ifdef BORLAND_C
extern "C"
{
#endif

//////////////////////////////////////////////////////////////////////////////'
//
//          Camera control functions
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_Init (void);
ICubeSDK int	WINAPI ICubeSDK_Open(IN INT nCamIndex);
ICubeSDK int	WINAPI ICubeSDK_Close(IN INT nCamIndex);
ICubeSDK int	WINAPI ICubeSDK_IsOpen(IN INT nCamIndex);
ICubeSDK int	WINAPI ICubeSDK_IsOpenEx(IN INT nCamIndex);

ICubeSDK int	WINAPI ICubeSDK_SetCallback(IN INT nCamIndex,IN INT nMode,IN LONG (CALLBACK *pCallbackFunc)(BYTE *pBuf, LONG lBufferSize, PVOID pContext),
                                            IN VOID *pCBContext);

ICubeSDK int	WINAPI ICubeSDK_SetCallbackEx(IN INT nCamIndex,IN INT nMode,IN LONG (CALLBACK *pCallbackFunc)(int event_type,BYTE *pBuf, LONG lBufferSize, PVOID pContext),
                                              IN VOID *pCBContext);

ICubeSDK int	WINAPI ICubeSDK_Start(IN INT nCamIndex,HWND ImgHandle,IN BOOL Preview,IN BOOL Callback);
ICubeSDK int	WINAPI ICubeSDK_IsStarted(IN INT nCamIndex);
ICubeSDK int	WINAPI ICubeSDK_Stop(IN INT nCamIndex);
ICubeSDK int	WINAPI ICubeSDK_GetSize(IN INT nCamIndex,OUT PINT pnXRes,OUT PINT pnYRes);
ICubeSDK int	WINAPI ICubeSDK_GetName(IN INT nCamIndex,OUT PCHAR Name);

ICubeSDK int	WINAPI ICubeSDK_GetBrokenFrames(IN INT nCamIndex,OUT PINT pnFrames);
ICubeSDK int	WINAPI ICubeSDK_GetGoodFrames(IN INT nCamIndex,OUT PINT pnFrames);

ICubeSDK int	WINAPI ICubeSDK_SetDisplayMode(IN INT nCamIndex,IN INT nMode,DISP_PROPERTY property);

//////////////////////////////////////////////////////////////////////////////'
//
//          Version functions
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK void	WINAPI ICubeSDK_GetVersion(IN INT nType,OUT PCHAR pVersion);
ICubeSDK int	WINAPI ICubeSDK_GetFWVersion(IN INT nCamIndex,OUT PCHAR pVersion);
ICubeSDK int	WINAPI ICubeSDK_GetSerialNum(IN INT nCamIndex,OUT PCHAR pVersion);
ICubeSDK int	WINAPI ICubeSDK_GetFGPAVersion(IN INT nCamIndex,OUT PCHAR pVersion);

//////////////////////////////////////////////////////////////////////////////'
//
//          ROI functions
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_SetResolution(IN INT nCamIndex,ROI_PROPERTY *property);
ICubeSDK int	WINAPI ICubeSDK_GetResolution(IN INT nCamIndex,ROI_PROPERTY *property);
ICubeSDK int	WINAPI ICubeSDK_GetResolutionRange(IN INT nCamIndex,ROI_RANGE_PROPERTY *property);

ICubeSDK int	WINAPI ICubeSDK_SetResolutionParam(IN INT nCamIndex,HWND ImgHandle,IN BOOL Preview,IN BOOL Callback);

//////////////////////////////////////////////////////////////////////////////'
//
//          Mode functions
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_SetMode(IN INT nCamIndex,IN INT nMode);
ICubeSDK int	WINAPI ICubeSDK_GetMode(IN INT nCamIndex,OUT PINT pMode);
ICubeSDK int	WINAPI ICubeSDK_GetModeList(IN INT nCamIndex,OUT PINT pLength,OUT PINT pList);

//////////////////////////////////////////////////////////////////////////////'
//
//          Bin Skip functions
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_SetBinSkip(IN INT nCamIndex,IN INT nParameter,IN INT nMode);
ICubeSDK int	WINAPI ICubeSDK_GetBinSkip(IN INT nCamIndex,OUT PINT nParameter,IN INT nMode);
ICubeSDK int	WINAPI ICubeSDK_GetBinSkipList(IN INT nCamIndex,IN INT nMode,OUT PINT pLenght,OUT PINT pList);

//////////////////////////////////////////////////////////////////////////////'
//
//          Save functions
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_SaveToFile(IN INT nCamIndex,IN  CHAR* Name);
ICubeSDK int	WINAPI ICubeSDK_SaveAvi(IN INT nCamIndex,IN  CHAR* Name,IN INT nMode,IN INT nTimeInSecs);

//////////////////////////////////////////////////////////////////////////////'
//
//          Trigger functions
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_SetTrigger(IN INT nCamIndex,IN INT nMode);
ICubeSDK int	WINAPI ICubeSDK_GetTrigger(IN INT nCamIndex,OUT PINT nMode);

//////////////////////////////////////////////////////////////////////////////'
//
//          Parameter functions 
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_SetCamParameter(IN INT nCamIndex,IN INT Type,IN ULONG Value);
ICubeSDK int	WINAPI ICubeSDK_GetCamParameter(IN INT nCamIndex,IN INT Type,OUT PULONG Value);
ICubeSDK int	WINAPI ICubeSDK_GetCamParameterRange(IN INT nCamIndex,IN INT Type,PARAM_PROPERTY *property);
ICubeSDK int	WINAPI ICubeSDK_CamParameterSet(IN INT nCamIndex,IN INT nCmd,void* nParam);

//////////////////////////////////////////////////////////////////////////////'
//
//          Exposure functions 
//          This functions can be used alternativly to parameter functions,
//          for manipulating exposure only. Parameter Value is in milli-seconds.
//          Be aware that every change of clock
//          and width will lead to different exposure values
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_SetExposure(IN INT nCamIndex,IN FLOAT Value);
ICubeSDK int	WINAPI ICubeSDK_GetExposure(IN INT nCamIndex,OUT PFLOAT Value);
ICubeSDK int	WINAPI ICubeSDK_GetExposureRange(IN INT nCamIndex,PARAM_PROPERTY_f *property);

//////////////////////////////////////////////////////////////////////////////'
//
//       for Parameter functions and Exposure functions (auto||manual,one-push)
//
//////////////////////////////////////////////////////////////////////////////

ICubeSDK int	WINAPI ICubeSDK_GetParamAuto(IN INT nCamIndex,IN INT Type,OUT PINT bAuto);
ICubeSDK int	WINAPI ICubeSDK_SetParamAuto(IN INT nCamIndex,IN INT Type,IN BOOL bAuto);
ICubeSDK int	WINAPI ICubeSDK_SetParamAutoDef(IN INT nCamIndex,IN INT Type);
ICubeSDK int	WINAPI ICubeSDK_SetParamOnePush(IN INT nCamIndex,IN INT Type);

#ifdef BORLAND_C
}
#endif
//------------------------------------------------------------------------------------------------------------------------------------------------
#else        // load DLL without libfile


typedef int (WINAPI *LPICubeSDK_Init)(void);
typedef LPICubeSDK_Init PICubeSDK_Init;

//------------------------------------------------------------------------------------

typedef int (WINAPI *LPICubeSDK_Open)(IN INT nCamIndex);
typedef LPICubeSDK_Open PICubeSDK_Open;

typedef int (WINAPI *LPICubeSDK_Close)(IN INT nCamIndex);
typedef LPICubeSDK_Close PICubeSDK_Close;

typedef int (WINAPI *LPICubeSDK_IsOpen)(IN INT nCamIndex);
typedef LPICubeSDK_IsOpen PICubeSDK_IsOpen;

typedef int (WINAPI *LPICubeSDK_IsOpenEx)(IN INT nCamIndex);
typedef LPICubeSDK_IsOpenEx PICubeSDK_IsOpenEx;

//------------------------------------------------------------------------------------

typedef void (WINAPI *LPICubeSDK_GetVersion)(IN INT nType,OUT PCHAR pVersion);
typedef LPICubeSDK_GetVersion PICubeSDK_GetVersion;

typedef int (WINAPI *LPICubeSDK_GetFWVersion)(IN INT nCamIndex,OUT PCHAR pVersion);
typedef LPICubeSDK_GetFWVersion PICubeSDK_GetFWVersion;

typedef int (WINAPI *LPICubeSDK_GetSerialNum)(IN INT nCamIndex,OUT PCHAR pVersion);
typedef LPICubeSDK_GetSerialNum PICubeSDK_GetSerialNum;

typedef int (WINAPI *LPICubeSDK_GetFPGAVersion)(IN INT nCamIndex,OUT PCHAR pVersion);
typedef LPICubeSDK_GetFPGAVersion PICubeSDK_GetFPGAVersion;

//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_SetCallback)(IN INT nCamIndex,IN INT nMode,IN LONG (CALLBACK *pCallbackFunc)(BYTE *pBuf, LONG lBufferSize, PVOID pContext),
                                             IN VOID *pCBContext);
typedef LPICubeSDK_SetCallback PICubeSDK_SetCallback;

typedef int (WINAPI *LPICubeSDK_SetCallbackEx)(IN INT nCamIndex,IN INT nMode,IN LONG (CALLBACK *pCallbackFunc)(int event_type,BYTE *pBuf, LONG lBufferSize, PVOID pContext),
                                               IN VOID *pCBContext);
typedef LPICubeSDK_SetCallbackEx PICubeSDK_SetCallbackEx;

typedef int (WINAPI *LPICubeSDK_Start)(IN INT nCamIndex,HWND ImgHandle,IN BOOL Preview,IN BOOL Callback);
typedef LPICubeSDK_Start PICubeSDK_Start;

typedef int (WINAPI *LPICubeSDK_IsStarted)(IN INT nCamIndex);
typedef LPICubeSDK_IsStarted PICubeSDK_IsStarted;

typedef int (WINAPI *LPICubeSDK_Stop)(IN INT nCamIndex);
typedef LPICubeSDK_Stop PICubeSDK_Stop;

typedef int (WINAPI *LPICubeSDK_SetDisplayMode) (IN INT nCamIndex,IN INT nMode,DISP_PROPERTY property);
typedef LPICubeSDK_SetDisplayMode PICubeSDK_SetDisplayMode;

//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_SetResolution) (IN INT nCamIndex,ROI_PROPERTY *property);
typedef LPICubeSDK_SetResolution PICubeSDK_SetResolution;

typedef int (WINAPI *LPICubeSDK_GetResolution) (IN INT nCamIndex,ROI_PROPERTY *property);
typedef LPICubeSDK_GetResolution PICubeSDK_GetResolution;

typedef int (WINAPI *LPICubeSDK_GetResolutionRange) (IN INT nCamIndex,ROI_RANGE_PROPERTY *property);
typedef LPICubeSDK_GetResolutionRange PICubeSDK_GetResolutionRange;

typedef int (WINAPI *LPICubeSDK_SetResolutionParam) (IN INT nCamIndex,HWND ImgHandle,IN BOOL Preview,IN BOOL Callback);
typedef LPICubeSDK_SetResolutionParam PICubeSDK_SetResolutionParam;

typedef int (WINAPI *LPICubeSDK_GetSize) (IN INT nCamIndex,OUT PINT pnXRes,OUT PINT pnYRes);
typedef LPICubeSDK_GetSize PICubeSDK_GetSize;

//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_SetMode) (IN INT nCamIndex,IN INT nMode);
typedef LPICubeSDK_SetMode PICubeSDK_SetMode;

typedef int (WINAPI *LPICubeSDK_GetMode) (IN INT nCamIndex,OUT PINT pMode);
typedef LPICubeSDK_GetMode PICubeSDK_GetMode;

typedef int (WINAPI *LPICubeSDK_GetModeList) (IN INT nCamIndex,OUT PINT pLength,OUT PINT pList);
typedef LPICubeSDK_GetModeList PICubeSDK_GetModeList;

//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_SetBinSkip) (IN INT nCamIndex,IN INT nParameter,IN INT nMode);
typedef LPICubeSDK_SetBinSkip PICubeSDK_SetBinSkip;

typedef int (WINAPI *LPICubeSDK_GetBinSkip) (IN INT nCamIndex,OUT PINT nParameter,IN INT nMode);
typedef LPICubeSDK_GetBinSkip PICubeSDK_GetBinSkip;

typedef int (WINAPI *LPICubeSDK_GetBinSkipList) (IN INT nCamIndex,IN INT nMode,OUT PINT pLenght,OUT PINT pList);
typedef LPICubeSDK_GetBinSkipList PICubeSDK_GetBinSkipList;

//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_SaveToFile)(IN INT nCamIndex,IN CONST CHAR* Name);
typedef LPICubeSDK_SaveToFile PICubeSDK_SaveToFile;

typedef int (WINAPI *LPICubeSDK_SaveAvi)(IN INT nCamIndex,IN CONST CHAR* Name,IN INT nMode,IN INT nTimeInSecs);
typedef LPICubeSDK_SaveAvi PICubeSDK_SaveAvi;

//------------------------------------------------------------------------------------

typedef int (WINAPI *LPICubeSDK_SetTrigger)(IN INT nCamIndex,IN INT nMode);
typedef LPICubeSDK_SetTrigger PICubeSDK_SetTrigger;

typedef int (WINAPI *LPICubeSDK_GetTrigger)(IN INT nCamIndex,OUT PINT nMode);
typedef LPICubeSDK_GetTrigger PICubeSDK_GetTrigger;

//------------------------------------------------------------------------------------

typedef int (WINAPI *LPICubeSDK_SetCamParameter) (IN INT nCamIndex,IN INT Type,IN ULONG Value);
typedef LPICubeSDK_SetCamParameter PICubeSDK_SetCamParameter;

typedef int (WINAPI *LPICubeSDK_GetCamParameter) (IN INT nCamIndex,IN INT Type,OUT PULONG Value);
typedef LPICubeSDK_GetCamParameter PICubeSDK_GetCamParameter;

typedef int (WINAPI *LPICubeSDK_GetCamParameterRange) (IN INT nCamIndex,IN INT Type,PARAM_PROPERTY *property);
typedef LPICubeSDK_GetCamParameterRange PICubeSDK_GetCamParameterRange;

typedef int (WINAPI *LPICubeSDK_GetParamAuto) (IN INT nCamIndex,IN INT Type,OUT PINT bAuto);
typedef LPICubeSDK_GetParamAuto PICubeSDK_GetParamAuto;

typedef int (WINAPI *LPICubeSDK_SetParamAuto) (IN INT nCamIndex,IN INT Type,IN BOOL bAuto);
typedef LPICubeSDK_SetParamAuto PICubeSDK_SetParamAuto;

typedef int (WINAPI *LPICubeSDK_SetParamAutoDef) (IN INT nCamIndex,IN INT Type);
typedef LPICubeSDK_SetParamAutoDef PICubeSDK_SetParamAutoDef;

typedef int (WINAPI *LPICubeSDK_SetParamOnePush) (IN INT nCamIndex,IN INT Type);
typedef LPICubeSDK_SetParamOnePush PICubeSDK_SetParamOnePush;

typedef int (WINAPI *LPICubeSDK_CamParameterSet)(IN INT nCamIndex,IN INT nCmd,void* nParam);
typedef LPICubeSDK_CamParameterSet PICubeSDK_CamParameterSet;

//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_GetName) (IN INT nCamIndex,OUT PCHAR Name);
typedef LPICubeSDK_GetName PICubeSDK_GetName;
//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_GetBrokenFrames) (IN INT nCamIndex,OUT PINT pnFrames);
typedef LPICubeSDK_GetBrokenFrames PICubeSDK_GetBrokenFrames;

typedef int (WINAPI *LPICubeSDK_GetGoodFrames) (IN INT nCamIndex,OUT PINT pnFrames);
typedef LPICubeSDK_GetGoodFrames PICubeSDK_GetGoodFrames;
//------------------------------------------------------------------------------------
typedef int (WINAPI *LPICubeSDK_SetExposure) (IN INT nCamIndex,IN FLOAT Value);
typedef LPICubeSDK_SetExposure PICubeSDK_SetExposure;

typedef int (WINAPI *LPICubeSDK_GetExposure) (IN INT nCamIndex,OUT PFLOAT Value);
typedef LPICubeSDK_GetExposure PICubeSDK_GetExposure;

typedef int (WINAPI *LPICubeSDK_GetExposureRange) (IN INT nCamIndex,PARAM_PROPERTY_f *property);
typedef LPICubeSDK_GetExposureRange PICubeSDK_GetExposureRange;

#ifdef __cplusplus
extern "C" {
#endif
extern BOOL LoadICubeApi(const char* szDllPathname);
extern VOID UnloadICubeApi();
extern PICubeSDK_Init                                   ICubeSDK_Init;
extern PICubeSDK_Open                                   ICubeSDK_Open;
extern PICubeSDK_Close                                  ICubeSDK_Close;
extern PICubeSDK_IsOpen                                 ICubeSDK_IsOpen;
extern PICubeSDK_IsOpenEx                               ICubeSDK_IsOpenEx;
extern PICubeSDK_GetVersion                             ICubeSDK_GetVersion;
extern PICubeSDK_GetFWVersion                           ICubeSDK_GetFWVersion;
extern PICubeSDK_GetFPGAVersion                         ICubeSDK_GetFPGAVersion;
extern PICubeSDK_GetSerialNum                           ICubeSDK_GetSerialNum;
extern PICubeSDK_Stop                                   ICubeSDK_Stop;
extern PICubeSDK_SetCallback                            ICubeSDK_SetCallback;
extern PICubeSDK_Start                                  ICubeSDK_Start;
extern PICubeSDK_IsStarted                              ICubeSDK_IsStarted;
extern PICubeSDK_SetResolution                          ICubeSDK_SetResolution;
extern PICubeSDK_GetResolution                          ICubeSDK_GetResolution;
extern PICubeSDK_GetResolutionRange                     ICubeSDK_GetResolutionRange;
extern PICubeSDK_GetSize                                ICubeSDK_GetSize;
extern PICubeSDK_SetMode                                ICubeSDK_SetMode;
extern PICubeSDK_GetMode                                ICubeSDK_GetMode;
extern PICubeSDK_GetModeList                            ICubeSDK_GetModeList;
extern PICubeSDK_SetBinSkip                             ICubeSDK_SetBinSkip;
extern PICubeSDK_GetBinSkip                             ICubeSDK_GetBinSkip;
extern PICubeSDK_GetBinSkipList                         ICubeSDK_GetBinSkipList;
extern PICubeSDK_SaveToFile                             ICubeSDK_SaveToFile;
extern PICubeSDK_SaveAvi                                ICubeSDK_SaveAvi;
extern PICubeSDK_SetTrigger                             ICubeSDK_SetTrigger;
extern PICubeSDK_GetTrigger                             ICubeSDK_GetTrigger;
extern PICubeSDK_SetCamParameter                        ICubeSDK_SetCamParameter;
extern PICubeSDK_GetCamParameter                        ICubeSDK_GetCamParameter;
extern PICubeSDK_GetCamParameterRange                   ICubeSDK_GetCamParameterRange;
extern PICubeSDK_GetParamAuto                           ICubeSDK_GetParamAuto;
extern PICubeSDK_SetParamAuto                           ICubeSDK_SetParamAuto;
extern PICubeSDK_SetParamAutoDef                        ICubeSDK_SetParamAutoDef;
extern PICubeSDK_SetParamOnePush                        ICubeSDK_SetParamOnePush;
extern PICubeSDK_CamParameterSet                        ICubeSDK_CamParameterSet;
extern PICubeSDK_GetName                                ICubeSDK_GetName;
extern PICubeSDK_GetBrokenFrames                        ICubeSDK_GetBrokenFrames;
extern PICubeSDK_GetGoodFrames                          ICubeSDK_GetGoodFrames;
extern PICubeSDK_SetExposure                            ICubeSDK_SetExposure;
extern PICubeSDK_GetExposure                            ICubeSDK_GetExposure;
extern PICubeSDK_GetExposureRange                       ICubeSDK_GetExposureRange;
extern PICubeSDK_SetDisplayMode                         ICubeSDK_SetDisplayMode;
extern PICubeSDK_SetResolutionParam                     ICubeSDK_SetResolutionParam;
extern PICubeSDK_SetCallbackEx                          ICubeSDK_SetCallbackEx;
#ifdef __cplusplus
}
#endif
#endif  // LIBFILE

#endif