chenluhua1980
2026-01-10 ded981a2ac5dbb456bafce5468d7289bc45e313b
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
 
 
#ifdef SGIF_EXPORTS
#define EXP __declspec(dllexport)
#else
#define EXP __declspec(dllimport)
#endif
 
#include "Winsock2.h"
#include "Ws2tcpip.h"
 
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "WS2_32.lib")
 
// Return Code List
typedef enum {
    RC_OK = 0x0000,                
    // The operation is completed successfully.
    ///////////////////////////////////////////////
    // Communication error from controller notification
    //
    RC_NAK_COMMAND = 0x1001,        // Command error
    RC_NAK_COMMAND_LENGTH,            // Command length error
    RC_NAK_TIMEOUT,                    // Timeout
    RC_NAK_CHECKSUM,                // Check sum error
    RC_NAK_INVALID_STATE,            // Status error
    RC_NAK_OTHER,                    // Other error
    RC_NAK_PARAMETER,                // Parameter error
    RC_NAK_OUT_STAGE,                // OUT calculation count limitation error
    RC_NAK_OUT_HEAD_NUM,            // No. of used head/OUT over error
    RC_NAK_PARAM_RANGE_DATA_STORED,    // OUT No which data reserved over acctive out count
    RC_NAK_OUT_INVALID_CALC,        // OUT which cannot be used for calculation was specified for calculation.
    RC_NAK_OUT_VOID,                // OUT which specified for calculation is not found.
    RC_NAK_INVALID_CYCLE,            // Unavailable sampling cycle
    RC_NAK_CTRL_ERROR,                // Main unit error
    RC_NAK_SRAM_ERROR,                // Setting value error
    ///////////////////////////////////////////////
    // Communication DLL error notification
    //
    RC_ERR_OPEN_DEVICE = 0x2000,// Opening the device failed.
    RC_ERR_NO_DEVICE,            // The device is not open.
    RC_ERR_SEND,                // Command sending error
    RC_ERR_RECEIVE,                // Response receiving error
    RC_ERR_TIMEOUT,                // Timeout
    RC_ERR_NODATA,                // No data
    RC_ERR_NOMEMORY,            // No free memory
 
    RC_ERR_DISCONNECT,            // Cable disconnection suspected
    RC_ERR_UNKNOWN,                // Undefined error
    RC_ERR_DEVID_OVER,            // over dev_id scale
    RC_ERR_NET_NO_CONN,            // no connected at the deviceID 
    RC_ERR_IP_EXISTED,
    RC_ERR_SELECT,                // select of /socket error
    RC_ERR_NULL_PARAMETER,        // NULL point exception from parameter
    RC_ERR_DIY_FUNC,            // error due to dir function
    RC_ERR_OVER_PARAMENTER,        // paramenter over the limition
    RC_ERR_NOT_SUPPORT            // ¹¦Äܲ»Ö§³Ö
} RC;
 
//device Version
typedef enum {
    SG3035 = 0,
    SG3030 = 1,
    SG3085 = 2,
    SG3080 = 3,
    SG5025 = 4,
    SG5020 = 5,
    SG5055 = 6,
    SG5050 = 7,
    SG5085 = 8,
    SG5080 = 9,
    SG5155 = 10,
    SG5150 = 11,
    SC04025 = 12,
    SC03560 = 13,
    SGI500 = 14,
    SGI505 = 15,
    SGI400 = 16,
    SGI405 = 17,
    SGI150 = 18,
    SGI155 = 19,
    SGI080 = 20,
    SGI085 = 21,
    SGI050 = 22,
    SGI055 = 23,
    SGI030 = 24,
    SGI035 = 25,
    SGI020 = 26,
    SGI025 = 27,
    SG3155 = 28,
    SG3150 = 29,
    SC01045 = 30,
    SC10015 = 31,
    SC20011 = 32,
    SC01236 = 33,
    SCI04025 = 34,
    SCI03560 = 35,
    SCI01045 = 36,
    SCI10015 = 37,
    SCI20011 = 38,
    SCI01236 = 39,
}SGIF_DEVICE_TYPE;
 
// Measurement value structures
typedef enum {
    SGIF_FLOATRESULT_VALID,            // valid data
    SGIF_FLOATRESULT_RANGEOVER_P,    // over range at positive (+) side
    SGIF_FLOATRESULT_RANGEOVER_N,    // over range at negative (-) side
    SGIF_FLOATRESULT_WAITING,        // Wait for comparator result
    SGIF_FLOATRESULT_ALARM,            // alarm
    SGIF_FLOATRESULT_INVALID,        // Invalid (error, etc.)
} SGIF_FLOATRESULT;
 
// Set ABLE
typedef enum {
    SGIF_ABLEMODE_AUTO,                // AUTO
    SGIF_ABLEMODE_MANUAL,            // manual
} SGIF_ABLEMODE;
 
// Set Measurement Mode
typedef enum {
    SGIF_MEASUREMODE_NORMAL,                        // normal
    SGIF_MEASUREMODE_HALF_T,                        // translucent object
    SGIF_MEASUREMODE_TRAN_1,                        // transparent object
    SGIF_MEASUREMODE_TRAN_2,                        // transparent object 2
    SGIF_MEASUREMODE_MRS,                            // multireflective object
    SGIF_MEASUREMODE_OPAQUE = SGIF_MEASUREMODE_MRS,    // Semi opaque object
} SGIF_MEASUREMODE;
 
// Set Basic Point
typedef enum {
    SGIF_BASICPOINT_NEAR,            // NEAR
    SGIF_BASICPOINT_FAR,            // FAR
} SGIF_BASICPOINT;
 
// Set Mounting Mode
typedef enum {
    SGIF_REFLECTIONMODE_DIFFUSION,    // diffuse reflection
    SGIF_REFLECTIONMODE_MIRROR,        // specular reflection
} SGIF_REFLECTIONMODE;
 
// Set Median
typedef enum {
    SGIF_MEDIAN_OFF,                // OFF
    SGIF_MEDIAN_7,                    // 7 point
    SGIF_MEDIAN_15,                    // 15 point
    SGIF_MEDIAN_31,                    // 31 point
} SGIF_MEDIAN;
 
// Set LASER CTRL group.
typedef enum {
    SGIF_LASER_CTRL_GROUP_1,        // LASER CTRL 1
    SGIF_LASER_CTRL_GROUP_2,        // LASER CTRL 2
} SGIF_LASER_CTRL_GROUP;
 
// Set a range.
typedef enum {
    SGIF_RANGE_CENTER,                // CENTER
    SGIF_RANGE_FAR,                    // FAR
} SGIF_RANGE;
 
// Set Mutual Interference Prevention Group
typedef enum {
    SGIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP_A,    // Group A
    SGIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP_B,    // Group B
    SGIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP_C,    // Group C
} SGIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP;
 
// Set calculation method.
typedef enum {
    SGIF_CALCMETHOD_HEADA,                    // head A
    SGIF_CALCMETHOD_HEADB,                    // head B
    SGIF_CALCMETHOD_HEAD_HEADA_PLUS_HEADB,    // head A+head B
    SGIF_CALCMETHOD_HEAD_HEADA_MINUS_HEADB,    // head A-head B
    SGIF_CALCMETHOD_HEAD_HEADA_TRANSPARENT,    // head A transparent object
    SGIF_CALCMETHOD_HEAD_HEADB_TRANSPARENT,    // head B transparent object
 
    SGIF_CALCMETHOD_HEAD = 0,    // head
    SGIF_CALCMETHOD_OUT,        // OUT
    SGIF_CALCMETHOD_ADD,        // ADD
    SGIF_CALCMETHOD_SUB,        // SUB
    SGIF_CALCMETHOD_AVE,        // AVE
    SGIF_CALCMETHOD_MAX,        // MAX
    SGIF_CALCMETHOD_MIN,        // MIN
    SGIF_CALCMETHOD_PP,            // P-P
} SGIF_CALCMETHOD;
 
// Set Target Surface
typedef enum {
    SGIF_CALCTARGET_PEAK_1,        // peak 1
    SGIF_CALCTARGET_PEAK_2,        // peak 2
    SGIF_CALCTARGET_PEAK_3,        // peak 3
    SGIF_CALCTARGET_PEAK_4,        // peak 4
    SGIF_CALCTARGET_PEAK_1_2,    // peak 1-peak 2
    SGIF_CALCTARGET_PEAK_1_3,    // peak 1-peak 3
    SGIF_CALCTARGET_PEAK_1_4,    // peak 1-peak 4
    SGIF_CALCTARGET_PEAK_2_3,    // peak 2-peak 3
    SGIF_CALCTARGET_PEAK_2_4,    // peak 2-peak 4
    SGIF_CALCTARGET_PEAK_3_4,    // peak 3-peak 4
} SGIF_CALCTARGET;
 
// Set Filter Mode
typedef enum {
    SGIF_FILTERMODE_MOVING_AVERAGE,            // moving average
} SGIF_FILTERMODE;
 
// Specify the filter parameter. (The number of averaging for moving average, or the cutoff frequency for LPF/HPF.) 
 
typedef enum {
    SGIF_FILTERPARA_AVE_1 = 0,        // 1 time
    SGIF_FILTERPARA_AVE_4,            // 4 times
    SGIF_FILTERPARA_AVE_16,            // 16 times
    SGIF_FILTERPARA_AVE_64,            // 64 times
    SGIF_FILTERPARA_AVE_256,        // 256 times
    SGIF_FILTERPARA_AVE_1024,        // 1024 times
    SGIF_FILTERPARA_AVE_4096,        // 4096 times
    SGIF_FILTERPARA_AVE_16384,        // 16384 times
    SGIF_FILTERPARA_AVE_65536,        // 65536 times
    SGIF_FILTERPARA_AVE_262144,        // 262144 times
 
}SGIF_FILTERPARA;
 
// Set Trigger Mode
typedef enum {
    SGIF_TRIGGERMODE_EXT1,        // external trigger 1
    SGIF_TRIGGERMODE_EXT2,        // external trigger 2
} SGIF_TRIGGERMODE;
 
// Set the Measurement Mode.
typedef enum {
    SGIF_CALCMODE_NORMAL,            // normal
    SGIF_CALCMODE_PEAKHOLD,            // peak hold
    SGIF_CALCMODE_BOTTOMHOLD,        // bottom hold
    SGIF_CALCMODE_PEAKTOPEAKHOLD,    // peak-to-peak hold
    SGIF_CALCMODE_SAMPLEHOLD,        // sample hold
} SGIF_CALCMODE;
 
// Set Minimum Display Unit
typedef enum {
    SGIF_DISPLAYUNIT_0000_01MM = 0,    // 0.01mm
    SGIF_DISPLAYUNIT_000_001MM,        // 0.001mm
    SGIF_DISPLAYUNIT_00_0001MM,        // 0.0001mm
    SGIF_DISPLAYUNIT_0_00001MM,        // 0.00001mm
    SGIF_DISPLAYUNIT_00000_1UM,        // 0.1um
    SGIF_DISPLAYUNIT_0000_01UM,        // 0.01um
    SGIF_DISPLAYUNIT_000_001UM,        // 0.001um
 
} SGIF_DISPLAYUNIT;
 
// Specify OUT
typedef enum {
    SGIF_OUTNO_01 = 0x0001,            // OUT01
    SGIF_OUTNO_02 = 0x0002,            // OUT02
    SGIF_OUTNO_03 = 0x0004,            // OUT03
    SGIF_OUTNO_04 = 0x0008,            // OUT04
    SGIF_OUTNO_ALL = 0x000F,        // All OUTs
} SGIF_OUTNO;
 
// Set Storage (Cycle)
typedef enum {
    SGIF_STORAGECYCLE_1,            // sampling rate x 1
    SGIF_STORAGECYCLE_2,            // sampling rate x 2
    SGIF_STORAGECYCLE_5,            // sampling rate x 5
    SGIF_STORAGECYCLE_10,            // sampling rate x 10
    SGIF_STORAGECYCLE_20,            // sampling rate x 20
    SGIF_STORAGECYCLE_50,            // sampling rate x 50
    SGIF_STORAGECYCLE_100,            // sampling rate x 100
    SGIF_STORAGECYCLE_200,            // sampling rate x 200
    SGIF_STORAGECYCLE_500,            // sampling rate x 500
    SGIF_STORAGECYCLE_1000,            // sampling rate x 1000
    SGIF_STORAGECYCLE_TIMING,        // Timing sync
} SGIF_STORAGECYCLE;
 
// Set Sampling Rate
typedef enum {
    //SG5000ϵÁÐ
    SGIF_5000_SAMPLINGCYCLE_590KHZ,     // 590kHz
    SGIF_5000_SAMPLINGCYCLE_400KHZ,        // 400kHz
    SGIF_5000_SAMPLINGCYCLE_200KHZ,        // 200kHz
    SGIF_5000_SAMPLINGCYCLE_88KHZ,        // 88kHz
    SGIF_5000_SAMPLINGCYCLE_50KHZ,        // 50kHz
    SGIF_5000_SAMPLINGCYCLE_20KHZ,        // 20kHz
    SGIF_5000_SAMPLINGCYCLE_10KHZ,        // 10kHz
    SGIF_5000_SAMPLINGCYCLE_5KHZ,        // 5kHz
    SGIF_5000_SAMPLINGCYCLE_2KHZ,        // 2kHz
    SGIF_5000_SAMPLINGCYCLE_1KHZ,        // 1kHz+
 
    //SG3000ϵÁÐ
    SGIF_3000_SAMPLINGCYCLE_88KHZ = 10,    // 88kHz
    SGIF_3000_SAMPLINGCYCLE_50KHZ,        // 50kHz
    SGIF_3000_SAMPLINGCYCLE_20KHZ,        // 20kHz
    SGIF_3000_SAMPLINGCYCLE_10KHZ,        // 10kHz
    SGIF_3000_SAMPLINGCYCLE_5KHZ,        // 5kHz
    //SGIF_3000_SAMPLINGCYCLE_2KHZ,        // 2kHz
    SGIF_3000_SAMPLINGCYCLE_1KHZ,        // 1kHz
 
    //SCIϵÁÐ
    SCI_SAMPLINGCYCLE_33KHZ = 30,    // 33kHz
    SCI_SAMPLINGCYCLE_20KHZ,        // 20kHz
    SCI_SAMPLINGCYCLE_15KHZ,        // 15kHz
    SCI_SAMPLINGCYCLE_10KHZ,        // 10kHz
    SCI_SAMPLINGCYCLE_5KHZ,            // 5kHz
    SCI_SAMPLINGCYCLE_2KHZ,            // 2kHz
    SCI_SAMPLINGCYCLE_1KHZ,            // 1kHz
    SCI_SAMPLINGCYCLE_05KHZ,        // 0.5kHz
} SGIF_SAMPLINGCYCLE;
 
// Set Mutual interference prevention
typedef enum {
    SGIF_MUTUAL_INTERFERENCE_PREVENTION_OFF,    // OFF
    SGIF_MUTUAL_INTERFERENCE_PREVENTION_AB_ON,    // AB-ON
    SGIF_MUTUAL_INTERFERENCE_PREVENTION_ABC_ON,    // ABC-ON
} SGIF_MUTUAL_INTERFERENCE_PREVENTION;
 
 
// Set Strobe Time
typedef enum {
    SGIF_STOROBETIME_2MS,        // 2ms
    SGIF_STOROBETIME_5MS,        // 5ms
    SGIF_STOROBETIME_10MS,        // 10ms
    SGIF_STOROBETIME_20MS,        // 20ms
} SGIF_STOROBETIME;
 
// Mode Switch
typedef enum {
    SGIF_MODE_NORMAL,                // normal mode
    SGIF_MODE_COMMUNICATION,        // setting mode
} SGIF_MODE;
 
 
//Encoder ext
typedef enum {
    SGIF_EmRunningMode_cont,//off
    SGIF_EmRunningMode_time,
    SGIF_EmRunningMode_trig,
}SGIF_EmRunningMode;
 
typedef enum {
    SGIF_EmDirection_all,//+-
    SGIF_EmDirection_pos,
    SGIF_EmDirection_neg,
}SGIF_EmDirection;
 
typedef enum {
    SGIF_EmEncoderInput_1x1,
    SGIF_EmEncoderInput_2x1,
    SGIF_EmEncoderInput_2x2,
    SGIF_EmEncoderInput_2x4,
}SGIF_EmEncoderInput;
typedef enum {
    SGIF_EmInputTime_100 = 100,
    SGIF_EmInputTime_200 = 200,
    SGIF_EmInputTime_500 = 500,
    SGIF_EmInputTime_1000 = 1000,
    SGIF_EmInputTime_2000 = 2000,
    SGIF_EmInputTime_5000 = 5000,
    SGIF_EmInputTime_10000 = 10000,
    SGIF_EmInputTime_20000 = 20000,
}SGIF_EmInputTime;
 
 
// Measurement value
typedef struct {
    int                    OutNo;            // OUT No(1-4)
    SGIF_FLOATRESULT    FloatResult;    // valid or invalid data
    float                Value;            // Measurement value
} SGIF_FLOATVALUE_OUT;
 
typedef struct {
    SGIF_FLOATRESULT    FloatResult;    // valid or invalid data
    float                Value;            // Measurement value
} SGIF_FLOATVALUE;
 
// IP address
typedef struct {
    IN_ADDR                IPAddress;
} SGIF_OPENPARAM_ETHERNET;
 
//Mask Minimum Display Unit(0.01mm)
#define MASKUNIT 100 
 
#ifdef __cplusplus
extern "C"
{
#endif
    
    EXP RC WINAPI SGIF_GetDeviceType(IN int DeviceID, OUT SGIF_DEVICE_TYPE* deviceType);
 
    // Measured control commands
    ///
    /// \brief SGIF_GetCameraSpotType    ¹â°ßÀàÐÍ(²»Ö§³ÖSCI)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param ControlType:                Êä³ö0£ºÐ¡¹â°ß£¬1£º´ó¹â°ß
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetCameraSpotType(IN int DeviceID, OUT int *EissionSpotType);
 
 
    ///////////////////////////////////////////////
    // Measurement control commands
    //
    // Measured value output (single)
    ///
    /// \brief SGIF_GetCalcDataSingle    ²âÁ¿ÖµÊä³ö
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ
    /// \param CalcData:                ²âÁ¿Öµ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetCalcDataSingle(IN int DeviceID, IN int OutNo, OUT SGIF_FLOATVALUE_OUT * CalcData);
 
    // Measured value output (multiple)
    ///
    /// \brief SGIF_GetCalcDataMulti    ¶à¸ö²âÁ¿ÖµÊä³ö
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ×éºÏ
    /// \param CalcData:                ²âÁ¿ÖµÊý×é
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetCalcDataMulti(IN int DeviceID, IN SGIF_OUTNO OutNo, OUT SGIF_FLOATVALUE_OUT * CalcData);
 
    // Measured value output (ALL)
    ///
    /// \brief SGIF_GetCalcDataALL        È«²¿²âÁ¿ÖµÊä³ö
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param CalcData:                ²âÁ¿ÖµÊý×é
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetCalcDataALL(IN int DeviceID, OUT SGIF_FLOATVALUE_OUT * CalcData);
 
    // Timing ON/OFF (single)
    ///
    /// \brief SGIF_SetTimingSingle        ¼ÆÊ±ON/OFF(Ò»¸ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ
    /// \param OnOff:                    ¿ª»ò¹Ø
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetTimingSingle(IN int DeviceID, IN int OutNo, IN BOOL OnOff);
 
    // Timing ON/OFF (multiple)
    ///
    /// \brief SGIF_SetTimingMulti        ¼ÆÊ±ON/OFF(¶à¸ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ×éºÏ
    /// \param OnOff:                    ¿ª»ò¹Ø
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetTimingMulti(IN int DeviceID, IN SGIF_OUTNO OutNo, IN BOOL OnOff);
 
    // Timing ON/OFF (synchronous)
    ///
    /// \brief SGIF_SetTimingSync        ¼ÆÊ±ON/OFF(ͬ²½)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OnOff:                    ¿ª»ò¹Ø
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetTimingSync(IN int DeviceID, IN BOOL OnOff);
 
    // Auto-zero ON/OFF (single)
    ///
    /// \brief SGIF_SetZeroSingle        ×Ô¶¯¹éÁ㣨һ¸ö£©
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ
    /// \param OnOff:                    ¿ª»ò¹Ø
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetZeroSingle(IN int DeviceID, IN int OutNo, IN BOOL OnOff);
 
    // Auto-zero ON/OFF (multiple)
    ///
    /// \brief SGIF_SetZeroMulti        ×Ô¶¯¹éÁ㣨¶à¸ö£©
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ×éºÏ
    /// \param OnOff:                    ¿ª»ò¹Ø
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetZeroMulti(IN int DeviceID, IN SGIF_OUTNO OutNo, IN BOOL OnOff);
 
    // Auto-zero ON/OFF (synchronous)
    ///
    /// \brief SGIF_SetZeroSync            ×Ô¶¯¹éÁ㣨ͬ²½£©
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OnOff:                    ¿ª»ò¹Ø
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetZeroSync(IN int DeviceID, IN BOOL OnOff);
 
    // Measured value reset (single)
    ///
    /// \brief SGIF_SetResetSingle        ÖØÖã¨Ò»¸ö£©
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetResetSingle(IN int DeviceID, IN int OutNo);
 
    // Measured value reset (multiple)
    ///
    /// \brief SGIF_SetResetMulti        ÖØÖ㨶à¸ö£©
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo:                    Êä³öOUT±àºÅ×éºÏ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetResetMulti(IN int DeviceID, IN SGIF_OUTNO OutNo);
 
    // Measured value reset (synchronous)
    ///
    /// \brief SGIF_SetResetSync        ÖØÖã¨Í¬²½£©
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetResetSync(IN int DeviceID);
 
    // Program Change
    ///
    /// \brief SGIF_SetProgramNo        ³ÌÐòÇл»
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param ProgramNo:                ³ÌÐò±àºÅ£¨0µ½7£©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetProgramNo(IN int DeviceID, IN int ProgramNo);
 
    // Program Check
    ///
    /// \brief SGIF_GetProgramNo        ³ÌÐòÈ·ÈÏ
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param ProgramNo:                ³ÌÐò±àºÅ£¨0µ½7£©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetProgramNo(IN int DeviceID, OUT int * ProgramNo);
 
    // Starting the Data Storage
    ///
    /// \brief SGIF_DataStorageStart    Êý¾Ý´æ´¢¿ªÊ¼
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_DataStorageStart(IN int DeviceID);
 
    // Stopping the Data Storage
    ///
    /// \brief SGIF_DataStorageStop        Êý¾Ý´æ´¢Í£Ö¹
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_DataStorageStop(IN int DeviceID);
 
    // Outputting the Data Storage
    ///
    /// \brief SGIF_DataStorageGetData    Êý¾Ý´æ´¢Êý¾ÝÊä³ö
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param NumOfBuffer                »º³åÇø´óС£¨×î¶à¿É½ÓÊܶàÉÙ¸öÊý¾Ý£©
    /// \param OutBuffer                Êý¾ÝÊý×é
    /// \param NumReceived                Êµ¼Ê½ÓÊÕµÄÊý¾Ý¸öÊý
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_DataStorageGetData(IN int DeviceID, IN int OutNo, IN int NumOfBuffer, OUT float * OutBuffer, OUT int *NumReceived);
 
    // Initializing the Data Storage
    ///
    /// \brief SGIF_DataStorageInit        Êý¾Ý´æ´¢³õʼ»¯
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_DataStorageInit(IN int DeviceID);
 
    // Data Storage Accumulation Status Output    
    ///
    /// \brief SGIF_DataStorageGetStatus    Êý¾Ý´æ´¢×´Ì¬Êä³ö
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param lsStorage                    ´æ´¢×´Ì¬
    /// \param NumStorageData                ¸÷Êä³ö¿Ú´æ´¢ÊýÁ¿Êý×é
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_DataStorageGetStatus(IN int DeviceID, OUT BOOL * lsStorage, OUT int  * NumStorageData);
 
    ///////////////////////////////////////////////
    // Setting change commands
    //
 
    // Set Tolerance
    ///
    /// \brief SGIF_SetTolerance            ¹«²îÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                        Êä³öOUT±àºÅ
    /// \param UpperLimit                    ÉÏÏÞ£¬´«ÈëΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param LowerLimit                    ÏÂÏÞ£¬´«ÈëΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param Hystersys                    Öͺ󣬴«ÈëΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetTolerance(IN int DeviceID, IN int OutNo, IN int UpperLimit, IN int LowerLimit, IN int Hystersys);
 
    // Set ABLE
    ///
    /// \brief SGIF_SetAbleMode                AbleģʽÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param AbleMode                        Ä£Ê½
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetAbleMode(IN int DeviceID, IN int HeadNo, IN SGIF_ABLEMODE AbleMode);
 
    // Set ABLE Control Range
    ///
    /// \brief SGIF_SetAbleMinMax            Able¿ØÖÆ·¶Î§É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param Min                            ÏÂÏÞ
    /// \param Max                            ÉÏÏÞ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetAbleMinMax(IN int DeviceID, IN int HeadNo, IN int Min, IN int Max);
 
    // Set Detection mode
    ///
    /// \brief SGIF_SetMeasureMode            ²âÁ¿Ä£Ê½É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \MeasureMode                        ²âÁ¿Ä£Ê½
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetMeasureMode(IN int DeviceID, IN int HeadNo, IN SGIF_MEASUREMODE MeasureMode);
 
    // Set Base point
    ///
    /// \brief SGIF_SetBasicPoint            »ù×¼µãÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param BasicPoint                    »ù×¼µã
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetBasicPoint(IN int DeviceID, IN int HeadNo, IN SGIF_BASICPOINT BasicPoint);
 
    // Set Number of Times of Alarm Processing
    ///
    /// \brief SGIF_SetNumAlarm                ¾¯±¨ÊýÁ¿É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param AlarmNum                        ¾¯±¨ÊýÁ¿
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetNumAlarm(IN int DeviceID, IN int HeadNo, IN int AlarmNum);
 
    // Set Number of Times of Alarm Recovery
    ///
    /// \brief SGIF_SetNumRecovery            »Ö¸´ÊýÁ¿É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param RecoveryNum                    »Ö¸´´ÎÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetNumRecovery(IN int DeviceID, IN int HeadNo, IN int RecoveryNum);
 
    // Set Alarm Level
    ///
    /// \brief SGIF_SetAlarmLevel            ¾¯±¨¼¶±ðÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param AlarmLevel                    ¾¯±¨¼¶±ð
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetAlarmLevel(IN int DeviceID, IN int HeadNo, IN int AlarmLevel);
 
    // Starting the ABLE Calibration
    ///
    /// \brief SGIF_AbleStart                AbleУ׼¿ªÊ¼
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_AbleStart(IN int DeviceID, IN int HeadNo);
 
    // Finishing the ABLE Calibration
    ///
    /// \brief SGIF_AbleStop                AbleУ׼Íê³É
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_AbleStop(IN int DeviceID);
 
    // Stopping the ABLE Calibration
    ///
    /// \brief SGIF_AbleCancel                AbleУ׼ֹͣ
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_AbleCancel(IN int DeviceID);
 
    // Set Mounting Mode
    ///
    /// \brief SGIF_SetReflectionMode        °²×°Ä£Ê½É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param ReflectionMode                ·´Éäģʽ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetReflectionMode(IN int DeviceID, IN int HeadNo, IN SGIF_REFLECTIONMODE ReflectionMode);
 
    // Set Mask
    ///
    /// \brief SGIF_SetMask                    ÆÁ±ÎÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param OnOff                        ¿ª¹Ø
    /// \param HeadNo                        µãλ1
    /// \param HeadNo                        µãλ2
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetMask(IN int DeviceID, IN int HeadNo, IN BOOL OnOff, IN int Pos1, IN int Pos2);
 
    // Set Median
    ///
    /// \brief SGIF_SetMedian                ÖÐλÊýÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param Median                        ÖÐλÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetMedian(IN int DeviceID, IN int HeadNo, IN SGIF_MEDIAN Median);
 
    // Set LASER CTRL group
    ///
    /// \brief SGIF_SetLaserCtrlGroup        Laser Ctrl×éÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param LaserCtrlGroup                Laser Ctrl×é
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetLaserCtrlGroup(IN int DeviceID, IN int HeadNo, IN SGIF_LASER_CTRL_GROUP LaserCtrlGroup);
 
    // Set Mutual interference prevention group
    ///
    /// \brief SGIF_SetMutualInterferencePreventionGroup        ·ÀÖ¹»¥Ïà¸ÉÈÅ×éÉ趨
    /// \param DeviceID                                            É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                                            ´«¸ÐÍ·±àºÅ
    /// \param Group                                            ×é
    /// \return
    ///     >0:                                                    Ê§°Ü.
    ///     =0:                                                    ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetMutualInterferencePreventionGroup(IN int DeviceID, IN int HeadNo, IN SGIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP Group);
 
    // Set Calculation method
    ///
    /// \brief SGIF_SetCalcMethod        ¼ÆË㷽ʽÉ趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param CalcMethod                ¼ÆËã·½·¨
    /// \param HeadOutNo                ´«¸ÐÍ·Êä³ö±àºÅ
    /// \return
    ///     >0:                                                    Ê§°Ü.
    ///     =0:                                                    ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetCalcMethod(IN int DeviceID, IN int OutNo, IN SGIF_CALCMETHOD CalcMethod, IN int HeadOutNo);
 
    // Set Surface to be measured
    ///
    /// \brief SGIF_SetCalcTarget        ²âÁ¿Ä¿±êÉ趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param CalcTarget                ¼ÆËã±êÇ©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetCalcTarget(IN int DeviceID, IN int OutNo, IN SGIF_CALCTARGET CalcTarget);
 
    // Set OUT to be calculated (ADD, SUB)
    ///
    /// \brief SGIF_SetOutAddSub        ´ý¼ÆËãµÄOUT(Add,Sub)É趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param AddSub1                    ´ý¼ÆËãµÄOUT
    /// \param AddSub2                    ´ý¼ÆËãµÄOUT
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetOutAddSub(IN int DeviceID, IN int OutNo, IN int AddSub1, IN int AddSub2);
 
    // Set OUT to be calculated (AVE, MAX, MIN, P-P)
    ///
    /// \brief SGIF_SetOutOperation        ´ý¼ÆËãµÄOUT(Ave,Max,Min,P-P)É趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param TargetOut                ¶à¸öOUT×éºÏ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetOutOperation(IN int DeviceID, IN int OutNo, IN SGIF_OUTNO TargetOut);
 
    // Set Scaling
    ///
    /// \brief SGIF_SetScaling            Ëõ·ÅÉ趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param InputValue1                µã1µÄ²âÁ¿Öµ£¨ÊäÈëÖµ£©£¬´«ÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param OutputValue1                µã1µÄÏÔʾֵ£¨Êä³öÖµ£©£¬´«ÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param InputValue2                µã2µÄ²âÁ¿Öµ£¨ÊäÈëÖµ£©£¬´«ÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param OutputValue2                µã2µÄÏÔʾֵ£¨Êä³öÖµ£©£¬´«ÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetScaling(IN int DeviceID, IN int OutNo, IN int InputValue1, IN int OutputValue1, IN int InputValue2, IN int OutputValue2);
 
    // Set Filter Mode
    ///
    /// \brief SGIF_SetFilter            Â˲¨Æ÷É趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param FilterMode                Â˲¨Ä£Ê½
    /// \param FilterPara                Â˲¨²ÎÊý
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetFilter(IN int DeviceID, IN int OutNo, IN SGIF_FILTERMODE FilterMode, IN SGIF_FILTERPARA FilterPara);
 
    // Set Trigger Mode
    ///
    /// \brief SGIF_SetTriggerMode        ´¥·¢Ä£Ê½É趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param TriggerMode                ´¥·¢Ä£Ê½
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetTriggerMode(IN int DeviceID, IN int OutNo, IN SGIF_TRIGGERMODE TriggerMode);
 
    // Set Offset
    ///
    /// \brief SGIF_SetOffset            Æ«ÒÆÉ趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param Offset                    Æ«ÒÆÁ¿
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetOffset(IN int DeviceID, IN int OutNo, IN int Offset);
 
    // Set Calculation Mode
    ///
    /// \brief SGIF_SetCalcMode            ¼ì²âģʽ£¨²âÁ¿Ä£Ê½£©É趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param CalcMode                    ¼ì²âģʽ±àºÅ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetCalcMode(IN int DeviceID, IN int OutNo, IN SGIF_CALCMODE CalcMode);
 
    // Set Minimum Display Unit
    ///
    /// \brief SGIF_SetDisplayUnit        É趨ÏÔʾµ¥Î»É趨
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param DisplayUnit                ÏÔʾµ¥Î»
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetDisplayUnit(IN int DeviceID, IN int OutNo, IN SGIF_DISPLAYUNIT DisplayUnit);
 
    // Set Synchronization
    ///
    /// \brief SGIF_SetSynchronization        Í¬²½É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                        Êä³öOUT±àºÅ
    /// \param OnOff                        ¿ª¹Ø
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetSynchronization(IN int DeviceID, IN int OutNo, IN BOOL OnOff);
 
    // Set Storage (OUT No. specification)
    ///
    /// \brief SGIF_SetStorageTarget        ´æ´¢£¨OUT±àºÅ¹æ¸ñ£©É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                        Êä³öOUT±àºÅ
    /// \param OnOff                        ¿ª¹Ø
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetStorageTarget(IN int DeviceID, IN int OutNo, IN BOOL OnOff);
 
    // Set Sampling Rate
    ///
    /// \brief SGIF_SetSamplingCycle        ²ÉÑùÖÜÆÚÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param SamplingCycle                ²ÉÑùÖÜÆÚ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetSamplingCycle(IN int DeviceID, IN SGIF_SAMPLINGCYCLE SamplingCycle);
 
    // Set Mutual Interference Prevention
    ///
    /// \brief SGIF_SetMutualInterferencePrevention        ·ÀÖ¹»¥Ïà¸ÉÈÅ×éÉ趨
    /// \param DeviceID                                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OnOff                                    ×éÉ趨
    /// \return
    ///     >0:                                            Ê§°Ü.
    ///     =0:                                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetMutualInterferencePrevention(IN int DeviceID, IN SGIF_MUTUAL_INTERFERENCE_PREVENTION OnOff);
 
    // Set Strobe Time
    ///
    /// \brief SGIF_SetStrobeTime            Ñ¡Í¨Ê±¼äÉ趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param StrobeTime                    Ñ¡Í¨Ê±¼ä
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetStrobeTime(IN int DeviceID, IN SGIF_STOROBETIME StrobeTime);
 
    // Set Data Storage
    ///
    /// \brief SGIF_SetDataStorage            Êý¾Ý´æ´¢É趨
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param NumStorage                    ´ý´æ´¢Êý¾ÝµÄ±àºÅ
    /// \param StorageCycle                    ´æ´¢ÖÜÆÚ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetDataStorage(IN int DeviceID, IN int NumStorage, IN SGIF_STORAGECYCLE StorageCycle);
 
    // EncoderSetting
    ///
    /// \brief SGIF_SetRunningMode            ÔËÐÐģʽÉèÖÃ(²»Ö§³ÖSCIÉ豸)
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param runningmode                    ÔËÐÐģʽ 0:OFF/1:¶¨Ê±/2:´¥·¢
    /// \param CatchDirection               ¼ì²â·½Ïò 0:Õý¸º¼ÆÊ±/1:Õý¼ÆÊ±/2:¸º¼ÆÊ±
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_SetRunningMode(IN int DeviceID, IN SGIF_EmRunningMode Runningmode, IN SGIF_EmDirection CatchDirection);
 
 
    // EncoderInputSetting
    ///
    /// \brief SGIF_SetEncoderMode            ±àÂëÆ÷ÊäÈëģʽÉèÖÃ(²»Ö§³ÖSCIÉ豸)
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param Inputmode                    ÔËÐÐģʽ 0:1Ïà1µÝÔö/1:2Ïà1µÝÔö/2:2Ïà2µÝÔö,3:2Ïà4µÝÔö
    /// \param MinInputTime                    ×îСÊäÈëʱ¼ä
    /// \param TrigInterval                    ´¥·¢¼ä¸ô
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
 
    EXP RC WINAPI SGIF_SetEncoderMode(IN int DeviceID, IN SGIF_EmEncoderInput Inputmode,IN SGIF_EmInputTime InputTime,IN int TrigInterval);
 
    // SGIF_SetFormula
    ///
    /// \brief SGIF_SetFormula                ÉèÖÃÅä·½
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param filePath                        Å䷽·¾¶
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  derive
 
    EXP RC WINAPI SGIF_SetFormula(IN int DeviceID, IN char* filePath );
 
    // SGIF_SetFormula
    ///
    /// \brief SGIF_SetFormula                ÉèÖÃÅä·½
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param filePath                        Å䷽·¾¶
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_DeriveFormula(IN int DeviceID, IN char* filePath);
    ///////////////////////////////////////////////
    // Setting confirmation commands
    //
    // Get Tolerance
    ///
    /// \brief SGIF_GetTolerance            ¹«²îÉ趨»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                        Êä³öOUT±àºÅ
    /// \param UpperLimit                    ÉÏÏÞ£¬´«³öΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param LowerLimit                    ÏÂÏÞ£¬´«³öΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param Hysteresis                    Öͺ󣬴«³öΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetTolerance(IN int DeviceID, IN int OutNo, OUT int * UpperLimit, OUT int * LowerLimit, OUT int * Hysteresis);
 
    // Get ABLE
    ///
    /// \brief SGIF_GetAbleMode                AbleÉ趨»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param AbleMode                        Ableģʽ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetAbleMode(IN int DeviceID, IN int HeadNo, OUT SGIF_ABLEMODE * AbleMode);
 
    // Get ABLE Control Range
    ///
    /// \brief SGIF_GetAbleMinMax            Able¿ØÖÆ·¶Î§»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param Min                            ×îСֵ
    /// \param Max                            ×î´óÖµ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetAbleMinMax(IN int DeviceID, IN int HeadNo, OUT int * Min, OUT int * Max);
 
    // Get Detection mode
    ///
    /// \brief SGIF_GetMeasureMode            ²âÁ¿Ä£Ê½»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param MeasureMode                    ²âÁ¿Ä£Ê½
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetMeasureMode(IN int DeviceID, IN int HeadNo, OUT SGIF_MEASUREMODE * MeasureMode);
 
    // Get Base point
    ///
    /// \brief SGIF_GetBasicPoint            »ù×¼µã»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param BasicPoint                    »ù×¼µã
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetBasicPoint(IN int DeviceID, IN int HeadNo, OUT SGIF_BASICPOINT * BasicPoint);
 
    // Get Number of Times of Alarm Processing
    ///
    /// \brief SGIF_GetNumAlarm                ¾¯±¨´¦Àí´ÎÊý»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param AlarmNum                        ¾¯±¨´ÎÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetNumAlarm(IN int DeviceID, IN int HeadNo, OUT int * AlarmNum);
 
    // Get Number of Times of Alarm Recovery
    ///
    /// \brief SGIF_GetNumRecovery            ¾¯±¨»Ö¸´´ÎÊý»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param RecoveryNum                    »Ö¸´´ÎÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetNumRecovery(IN int DeviceID, IN int HeadNo, OUT int * RecoveryNum);
 
    // Get Alarm Level
    ///
    /// \brief SGIF_GetAlarmLevel            ¾¯±¨¼¶±ð»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param AlarmLevel                    ¾¯±¨¼¶±ð
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetAlarmLevel(IN int DeviceID, IN int HeadNo, OUT int * AlarmLevel);
 
    // Get Mounting Mode
    ///
    /// \brief SGIF_GetReflectionMode        °²×°Ä£Ê½»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param ReflectionMode                ·´Éäģʽ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetReflectionMode(IN int DeviceID, IN int HeadNo, OUT SGIF_REFLECTIONMODE * ReflectionMode);
 
    // Get Mask
    ///
    /// \brief SGIF_GetMask                    ÆÁ±ÎÉ趨»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param OnOff                        ¿ª¹Ø
    /// \param Pos1                            Î»ÖÃ1
    /// \param Pos2                            Î»ÖÃ2
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetMask(IN int DeviceID, IN int HeadNo, OUT BOOL * OnOff, OUT int * Pos1, OUT int * Pos2);
 
    // Get Median
    ///
    /// \brief SGIF_GetMedian                ÖÐλÊý»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param Median                        ÖÐλÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetMedian(IN int DeviceID, IN int HeadNo, OUT SGIF_MEDIAN * Median);
 
    // Get LASER CTRL group
    ///
    /// \brief SGIF_GetLaserCtrlGroup        Laser Ctrl×é»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        ´«¸ÐÍ·±àºÅ
    /// \param LaserCtrlGroup                Laser Ctrl×é
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetLaserCtrlGroup(IN int DeviceID, IN int HeadNo, OUT SGIF_LASER_CTRL_GROUP * LaserCtrlGroup);
 
    // Get Mutual interference prevention group
    ///
    /// \brief SGIF_GetMutualInterferencePreventionGroup    ·ÀÖ¹»¥Ïà¸ÉÈÅ×é»ñÈ¡
    /// \param DeviceID                                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                                        ´«¸ÐÍ·±àºÅ
    /// \param Group                                        ×é
    /// \return
    ///     >0:                                                Ê§°Ü.
    ///     =0:                                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetMutualInterferencePreventionGroup(IN int DeviceID, IN int HeadNo, OUT SGIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP * Group);
 
    // Get Calculation method
    ///
    /// \brief SGIF_GetCalcMethod        ¼ÆË㷽ʽ»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param CalcMethod                ¼ÆËã·½·¨
    /// \param HeadOutNo                ´«¸ÐÍ·»òOUT±àºÅ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetCalcMethod(IN int DeviceID, IN int OutNo, OUT SGIF_CALCMETHOD * CalcMethod, OUT int * HeadOutNo);
 
    // Get Surface to be measured
    ///
    /// \brief SGIF_GetCalcTarget        ²âÁ¿Ä¿±ê»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param CalcTarget                ¼ÆËã±êÇ©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetCalcTarget(IN int DeviceID, IN int OutNo, OUT SGIF_CALCTARGET * CalcTarget);
 
    // Get OUT to be calculated (ADD, SUB)
    ///
    /// \brief SGIF_GetOutAddSub        ´ý¼ÆËãµÄOUT(Add,Sub)»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param AddSub1                    ´ý¼ÆËãµÄOUT±àºÅ1
    /// \param AddSub2                    ´ý¼ÆËãµÄOUT±àºÅ2
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetOutAddSub(IN int DeviceID, IN int OutNo, OUT int * AddSub1, OUT int * AddSub2);
 
    // Get OUT to be calculated (AVE, MAX, MIN, P-P)
    ///
    /// \brief SGIF_GetOutOperation        ´ý¼ÆËãµÄOUT(Ave,Max,Min,P-P)»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param TargetOut                ¶à¸öOUT»òHEAD×éºÏ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetOutOperation(IN int DeviceID, IN int OutNo, OUT SGIF_OUTNO * TargetOut);
 
    // Get Scaling
    ///
    /// \brief SGIF_GetScaling            Ëõ·ÅÉ趨»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param InputValue1                µã1µÄ²âÁ¿Öµ£¨ÊäÈëÖµ£©£¬´«³öΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param OutputValue1                µã1µÄÏÔʾֵ£¨Êä³öÖµ£©£¬´«³öΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param InputValue2                µã2µÄ²âÁ¿Öµ£¨ÊäÈëÖµ£©£¬´«³öΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \param OutputValue2                µã2µÄÏÔʾֵ£¨Êä³öÖµ£©£¬´«³öΪÓÐЧÊý×Ö£¨È¥µôСÊýµãºóµÄÕûÐΣ©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetScaling(IN int DeviceID, IN int OutNo, OUT int * InputValue1, OUT int * OutputValue1, OUT int * InputValue2, OUT int * OutputValue2);
 
    // Get Filter Mode
    ///
    /// \brief SGIF_GetFilter            Â˲¨Æ÷É趨»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param FilterMode                Â˲¨Æ÷ģʽ
    /// \param FilterPara                Â˲¨²ÎÊý
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetFilter(IN int DeviceID, IN int OutNo, OUT SGIF_FILTERMODE * FilterMode, OUT SGIF_FILTERPARA * FilterPara);
 
    // Get Trigger Mode
    ///
    /// \brief SGIF_GetTriggerMode        ´¥·¢Ä£Ê½»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param TriggerMode                ´¥·¢Ä£Ê½
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetTriggerMode(IN int DeviceID, IN int OutNo, OUT SGIF_TRIGGERMODE * TriggerMode);
 
    // Get Offset
    ///
    /// \brief SGIF_GetOffset            Æ«ÒÆ»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param Offset                    Æ«ÒÆÁ¿
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetOffset(IN int DeviceID, IN int OutNo, OUT int * Offset);
 
    // Get Calculation Mode
    ///
    /// \brief SGIF_GetCalcMode            ¼ì²âģʽ£¨²âÁ¿Ä£Ê½£©»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param CalcMode                    ²âÁ¿Ä£Ê½
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetCalcMode(IN int DeviceID, IN int OutNo, OUT SGIF_CALCMODE * CalcMode);
 
    // Get Minimum Display Unit
    ///
    /// \brief SGIF_GetDisplayUnit        ÏÔʾ×îСµ¥Î»»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êä³öOUT±àºÅ
    /// \param DisplayUnit                ÏÔʾ×îСµ¥Î»
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetDisplayUnit(IN int DeviceID, IN int OutNo, OUT SGIF_DISPLAYUNIT * DisplayUnit);
 
    // Get Synchronization
    ///
    /// \brief SGIF_GetSynchronization        Í¬²½É趨»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                        Êä³öOUT±àºÅ
    /// \param OnOff                        ¿ª¹Ø
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetSynchronization(IN int DeviceID, IN int OutNo, OUT BOOL * OnOff);
 
    // Get Storage (OUT No. specification)
    ///
    /// \brief SGIF_GetStorageTarget        ´æ´¢£¨OUT±àºÅÉ趨£©»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                        Êä³öOUT±àºÅ
    /// \param OnOff                        ¿ª¹Ø
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetStorageTarget(IN int DeviceID, IN int OutNo, OUT BOOL * OnOff);
 
    // Get Sampling Rate
    ///
    /// \brief SGIF_GetSamplingCycle        ²ÉÑùÖÜÆÚ»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param SamplingCycle                ²ÉÑùÖÜÆÚ
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetSamplingCycle(IN int DeviceID, OUT SGIF_SAMPLINGCYCLE * SamplingCycle);
 
    // Get Mutual Interference Prevention
    ///
    /// \brief SGIF_GetMutualInterferencePrevention        ·ÀÖ¹»¥Ïà¸ÉÈÅ»ñÈ¡
    /// \param DeviceID                                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OnOff                                    ¿ª¹Ø
    /// \return
    ///     >0:                                            Ê§°Ü.
    ///     =0:                                            ³É¹¦.
    ///  
    EXP RC WINAPI SGIF_GetMutualInterferencePrevention(IN int DeviceID, OUT SGIF_MUTUAL_INTERFERENCE_PREVENTION * OnOff);
 
    // Get Strobe Time
    ///
    /// \brief SGIF_GetStrobeTime        Ñ¡Í¨Ê±¼ä»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutputFormat                Êä³öÐÎʽ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetStrobeTime(IN int DeviceID, OUT SGIF_STOROBETIME * StrobeTime);
 
    // Get Data Storage
    ///
    /// \brief SGIF_GetDataStorage        Êý¾Ý´æ´¢»ñÈ¡
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param NumStorage                ´ø´æ´¢Êý¾Ý±àºÅ
    /// \param StorageCycle                ´æ´¢ÖÜÆÚ
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetDataStorage(IN int DeviceID, OUT int * NumStorage, OUT SGIF_STORAGECYCLE * StorageCycle);
 
    // Get Active head count
    ///
    /// \brief SGIF_GetNumOfUsedHeads        Ö÷¶¯OUT¼ÆÊý»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param NumOfUsedHeads                Ö÷¶¯OUT/´«¸ÐÍ·¼ÆÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetNumOfUsedHeads(IN int DeviceID, OUT int * NumOfUsedHeads);
 
    // Get Active OUT count
    ///
    /// \brief SGIF_GetNumOfUsedOut            Ö÷¶¯´«¸ÐÍ·¼ÆÊý»ñÈ¡
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param NumOfUsedHeads                Ö÷¶¯OUT/´«¸ÐÍ·¼ÆÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetNumOfUsedOut(IN int DeviceID, OUT int * NumOfUsedOut);
 
    // Get Active Running Time
    ///
    /// \brief SGIF_GetDeviceRuningTime        »ñÈ¡Ïà»úÔËÐÐʱ³¤£¬µ¥Î»s
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param HeadNo                        0:¿ØÖÆÆ÷£» 1-4£º´«¸ÐÍ·±àºÅ
    /// \param RuningTime                    ÔËÐÐʱ¼ä
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetDeviceRuningTime(IN int DeviceID, IN int HeadNo, OUT unsigned int * RuningTime);
 
    ///////////////////////////////////////////////
    // Other commands
    //
    // Opens the Ethernet device.
    ///
    /// \brief SGIF_OpenDeviceETHER            ´ò¿ªÉè±¸ÍøÂçÁ¬½Ó
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OpenParam                    ÍøÂçÁ¬½Ó²ÎÊý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_OpenDeviceETHER(IN int DeviceID, SGIF_OPENPARAM_ETHERNET * OpenParam,DWORD TIMEOUT=3);
 
    // Closes the currently open device.
    ///
    /// \brief SGIF_CloseDevice                ¹Ø±ÕÉè±¸ÍøÂçÁ¬½Ó
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_CloseDevice(IN int DeviceID);
 
    ///////////////////////////////////////////////
    // Mode change commands
    //
    // Mode Switch
    ///
    /// \brief SGIF_SetMode                    Ä£Ê½Çл»
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param Mode                            Ä£Ê½
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetMode(IN int DeviceID, IN SGIF_MODE Mode);
    
    EXP RC WINAPI SGIF_Refresh(IN int DeviceID);
 
    //////////////////////////////////////////////Ò»´Î»Øµ÷Ïà¹Ø///////////////////////////////////////
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutBuffer                Êý¾ÝÊý×é
    /// \param NumReceived                Êµ¼Ê½ÓÊÕµÄÊý¾Ý¸öÊý
    ///
    typedef void(*SGIF_DataStorageOneTimeCallBack)(OUT int DeviceID);
 
    ///////////////////////////////////////////////
    /// \brief SGIF_SetOneDataStorage        ×¢²áÒ»´Î»Øµ÷
    /// \param DeviceID                        É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param SGIF_BatchOneTimeCallBack    »Øµ÷º¯Êý
    /// \return
    ///     >0:                                Ê§°Ü.
    ///     =0:                                ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetOneDataStorage(IN int DeviceID, IN SGIF_DataStorageOneTimeCallBack CallFunc);
    //////////////////////////////////////////////////////////////////////////////////////////////
 
    // Get encoder store value
    /// \brief SGIF_GetEncoderStoreValue±àÂëÆ÷Öµ´æ´¢Êý¾ÝÊä³ö(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    ±àÂëÆ÷±àºÅ
    /// \param NumOfBuffer                »º³åÇø´óС£¨×î¶à¿É½ÓÊܶàÉÙ¸öÊý¾Ý£©
    /// \param OutBuffer                Êý¾ÝÊý×é
    /// \param NumReceived                Êµ¼Ê½ÓÊÕµÄÊý¾Ý¸öÊý
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetEncoderStoreValue(IN int DeviceID, IN int OutNo, IN int NumOfBuffer, OUT int * OutBuffer, OUT int *NumReceived);
 
    // Get encoder value
    /// \brief SGIF_GetEncoderCurrentValue    ¶ÁÈ¡±àÂëÆ÷µ±Ç°Öµ(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    ±àÂëÆ÷±àºÅ(1-3)
    /// \param OutBuffer                Êý¾ÝÖ¸Õë
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetEncoderCurrentValue(IN int DeviceID, IN int OutNo, OUT int * OutBuffer);
 
    // encoder Reset
    /// \brief SGIF_EncoderReset        ±àÂëÆ÷ÖµÖÃÁã(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    ±àÂëÆ÷±àºÅ(1-3)
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_EncoderReset(IN int DeviceID, IN int OutNo);
 
    // Set Encoder Number
    /// \brief SGIF_SetEncoderNumber    Ñ¡Ôñ±àÂëÆ÷(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    ±àÂëÆ÷±àºÅ(1-3)
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetEncoderNumber(IN int DeviceID, IN int OutNo);
 
    // Get encoder number
    /// \brief SGIF_GetEncoderNumber    ¶ÁÈ¡ÉèÖõıàÂëÆ÷±àºÅ(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutBuffer                Êý¾ÝÖ¸Õë
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetEncoderNumber(IN int DeviceID, OUT int * OutBuffer);
 
    //Set Encoder Parameters
    /// \brief SGIF_SetEncoderParametersÉèÖñàÂëÆ÷²ÎÊý(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    ±àÂëÆ÷±àºÅ(1-3)
    /// \param InputMode                ÊäÈëģʽ£¨0-3£©
    /// \param InputTime                ×îµÍÊäÈëʱ¼ä£¨100,200,500,1000,2000,5000,10000,20000£©(ns)
    /// \param interval                    ¼ä¸ô£¨1-10000£©
    /// \param OperatingMode            ÔËÐÐģʽ£¨0-2£©
    /// \param DetectionDirection        ¼ì²â·½Ïò£¨0-2£©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetEncoderParameters(IN int DeviceID, IN int OutNo, IN int InputMode, IN int InputTime, IN int interval, IN int OperatingMode, IN int DetectionDirection);
 
    //Get Encoder Parameters
    /// \brief SGIF_GetEncoderParameters¶ÁÈ¡±àÂëÆ÷²ÎÊý(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    ±àÂëÆ÷±àºÅ(1-3)
    /// \param InputMode                ÊäÈëģʽ£¨0-3£©
    /// \param InputTime                ×îµÍÊäÈëʱ¼ä£¨100,200,500,1000,2000,5000,10000,20000£©(ns)
    /// \param interval                    ¼ä¸ô£¨1-10000£©
    /// \param OperatingMode            ÔËÐÐģʽ£¨0-2£©
    /// \param DetectionDirection        ¼ì²â·½Ïò£¨0-2£©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///4
    EXP RC WINAPI SGIF_GetEncoderParameters(IN int DeviceID, IN int OutNo, OUT int * InputMode, OUT int * InputTime, OUT int * interval, OUT int * OperatingMode, OUT int * DetectionDirection);
 
    //Set Analog Output
    /// \brief SGIF_SetAnalogOutput        ÉèÖÃÄ£ÄâÁ¿Êä³ö(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Ä£ÄâÁ¿±àºÅ(1-3)
    /// \param OutputChannel            Êä³öͨµÀ£¨0-3£©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetAnalogOutput(IN int DeviceID, IN int OutNo, IN int OutputChannel);
 
    // Retrieve Analog Output Channel Number
    /// \brief SGIF_GetAnalogOutputChannel    »ñȡģÄâÁ¿Êä³öͨµÀ±àºÅ(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Ä£ÄâÁ¿±àºÅ(1-3)
    /// \param OutBuffer                Êý¾ÝÖ¸Õë
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetAnalogOutputChannel(IN int DeviceID, IN int OutNo, OUT int * OutBuffer);
 
    //Set IO Digital Output
    /// \brief SGIF_SetIODigitalOutput    ÉèÖÃIOÊý×ÖÊä³ö(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êý×ÖÊä³ö±àºÅ(1-4)
    /// \param Level                    Êä³öλÊý£¨0:OFF,1:HI,2:GO,3:LO,4:STROBE£©
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_SetIODigitalOutput(IN int DeviceID, IN int OutNo, IN int Level);
 
    // Retrieve IO Digital Output Channel Number
    /// \brief SGIF_GetIOOutputChannel    »ñÈ¡IOÊý×ÖÁ¿Êä³öͨµÀ±àºÅ(½öSCIÉ豸֧³Ö)
    /// \param DeviceID                    É豸IDºÅ£¬·¶Î§Îª0-63.
    /// \param OutNo                    Êý×ÖÊä³ö±àºÅ(1-4)
    /// \param OutBuffer                Êý¾ÝÖ¸Õë
    /// \return
    ///     >0:                            Ê§°Ü.
    ///     =0:                            ³É¹¦.
    ///
    EXP RC WINAPI SGIF_GetIOOutputChannel(IN int DeviceID, IN int OutNo, OUT int * OutBuffer);
#ifdef __cplusplus
}
#endif