00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef _DSCUD_H
00045 #define _DSCUD_H
00046
00047
00048 #ifndef MSVC_1_52
00049 #ifdef _MSC_VER
00050 #pragma pack(push, dscud_packing)
00051 #pragma pack(1)
00052 #endif
00053 #endif
00054
00055 #ifdef __cplusplus
00056 extern "C" {
00057 #endif
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 #ifndef BYTE
00068 #define BYTE unsigned char
00069 #endif
00070
00071
00072 #ifndef SBYTE
00073 #define SBYTE signed char
00074 #endif
00075
00076
00077 #ifndef WORD
00078 #define WORD unsigned short
00079 #endif
00080
00081
00082 #ifndef SWORD
00083 #define SWORD signed short
00084 #endif
00085
00086
00087 #ifndef DWORD
00088 #define DWORD unsigned long
00089 #endif
00090
00091
00092 #ifndef SDWORD
00093 #define SDWORD signed long
00094 #endif
00095
00096
00097 #ifndef LONG
00098 #define LONG signed long
00099 #endif
00100
00101
00102 #ifndef FLOAT
00103 #define FLOAT float
00104 #endif
00105
00106
00107 #ifndef DFLOAT
00108 #define DFLOAT double
00109 #endif
00110
00111
00112 #ifndef BOOL
00113 #define BOOL int
00114 #endif
00115
00116
00117 #ifndef TRUE
00118 #define TRUE ((BOOL)1)
00119 #endif
00120
00121
00122 #ifndef FALSE
00123 #define FALSE ((BOOL)0)
00124 #endif
00125
00126
00127 #ifndef DSCSAMPLE
00128 #define DSCSAMPLE SWORD
00129 #endif
00130
00131 #ifndef DSCDACODE
00132 #define DSCDACODE DWORD
00133 #endif
00134
00135 typedef void (*DSCUserInterruptFunction) (void* parameter);
00136
00137 #ifdef WIN32
00138 #define DSCUDAPICALL __declspec(dllexport)
00139 #else /* WIN32 not defined */
00140 #define DSCUDAPICALL
00141 #endif
00142
00143 #define DSCB SWORD
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154 /*///////////
00155 // Version //
00156
00157
00158 #define DSC_VERSION 0x0591 /* 0xVVRR - Version & Revision */
00159
00160
00161
00162
00163
00164 #define DSC_DMM16 0
00165 #define DSC_RMM 1
00166 #define DSC_TMM 2
00167 #define DSC_OPMM 3
00168 #define DSC_DMM 4
00169 #define DSC_SMM 5
00170 #define DSC_GMM 6
00171 #define DSC_QMM 7
00172 #define DSC_ZMM 8
00173 #define DSC_PMM 9
00174 #define DSC_OMM 10
00175 #define DSC_RMM416 11
00176 #define DSC_DMM32 12
00177 #define DSC_DMM32AT 12
00178 #define DSC_EMMDIO 13
00179 #define DSC_RMM1612 14
00180 #define DSC_DMMAT 15
00181 #define DSC_DMM16AT 16
00182 #define DSC_IR104 17
00183 #define DSC_EMM8 18
00184 #define DSC_PROM 19
00185 #define DSC_HERCEBX 20
00186 #define DSC_CPT 21
00187 #define DSC_DMM48 22
00188 #define DSC_DMM48AT 22
00189 #define DSC_OMMDIO 23
00190 #define DSC_DIO82C55 24
00191 #define DSC_MRC 24
00192 #define DSC_EMMOPTO 24
00193 #define DSC_ATHENA 25
00194 #define DSC_METIS 26
00195 #define DSC_DMM32X 27
00196 #define DSC_DMM32XAT 27
00197 #define DSC_ELEKTRA 28
00198 #define DSC_TEST 126
00199 #define DSC_RAW 127
00200 #define DSC_DRVR 255
00201
00202 /*//////////////////////
00203 // A/D Mode Constants //
00204
00205
00206 #define RANGE_5 0
00207 #define RANGE_10 1
00208
00209 #define BIPOLAR 0
00210 #define UNIPOLAR 1
00211
00212 #define GAIN_1 0
00213 #define GAIN_2 1
00214 #define GAIN_4 2
00215 #define GAIN_8 3
00216 #define GAIN_10 1 /* higher gains for SMM boards */
00217 #define GAIN_100 2
00218 #define GAIN_1000 3
00219
00220 #define SCAN_INTERVAL_4 5
00221 #define SCAN_INTERVAL_5 3
00222 #define SCAN_INTERVAL_9 4
00223 #define SCAN_INTERVAL_10 2
00224 #define SCAN_INTERVAL_15 1
00225 #define SCAN_INTERVAL_20 0
00226
00227 #define SINGLE_ENDED 0
00228 #define DIFFERENTIAL 1
00229
00230
00231
00232
00233
00234
00235 #define MODE_0_INT11_INT12 0
00236 #define MODE_0_INT21_INT22 1
00237 #define MODE_1_82C55_1_C0 2
00238 #define MODE_1_82C55_1_C3 3
00239 #define MODE_1_82C55_2_C0 4
00240 #define MODE_1_82C55_2_C3 5
00241
00242 /*///////////////
00243 // OMM sources //
00244
00245
00246 #define SOURCE_82C55_1_C0 0
00247 #define SOURCE_COUNTER_0 1
00248 #define SOURCE_82C55_2_C0 2
00249 #define SOURCE_COUNTER_1 3
00250 #define SOURCE_EXTERNAL 4
00251 #define SOURCE_COUNTER_2 5
00252
00253 #define OMM_SOURCE_PIN 0
00254 #define OMM_SOURCE_CLOCK 1
00255 #define OMM_SOURCE_OUT 2
00256
00257
00258 /*////////////////////////////////////////
00259 // Prometheus Watchdog Option Constants //
00260
00261
00262 /* Look in ZFx86 Training Book for details */
00263
00264 #define PROM_WD_TRIGGER_SCI 0x01
00265 #define PROM_WD_TRIGGER_NMI 0x02
00266 #define PROM_WD_TRIGGER_SMI 0x04
00267 #define PROM_WD_TRIGGER_RESET 0x08
00268 #define PROM_WD_WDI_ASSERT_FALLING_EDGE 0x10
00269 #define PROM_WD_WDO_TRIGGERED_EARLY 0x20
00270 #define PROM_WD_ENABLE_WDI_ASSERTION 0x40
00271
00272
00273
00274
00275
00276
00277 #define HERC_WD_TRIGGER_NMI 0x10
00278 #define HERC_WD_TRIGGER_RESET 0x08
00279 #define HERC_WD_WDI_ASSERT_FALLING_EDGE 0x02
00280 #define HERC_WD_WDO_TRIGGERED_EARLY 0x04
00281 #define HERC_WD_ENABLE_WDI_ASSERTION 0x01
00282
00283 /*////////////////////////////////////////
00284 // Athena Watchdog Option Constants //
00285
00286
00287 #define ATHENA_WD_WDI_ASSERT_RISING_EDGE 0x10
00288 #define ATHENA_WD_TRIGGER_SMI 0x20
00289 #define ATHENA_WD_ENABLE_WDO 0x40
00290 #define ATHENA_WD_ENABLE_WDI 0x80
00291
00292 /*////////////////////////////////////////
00293 // Elektra Watchdog Option Constants //
00294
00295
00296 #define ELEKTRA_WD_WDI_ASSERT_RISING_EDGE 0x10
00297 #define ELEKTRA_WD_TRIGGER_SMI 0x20
00298 #define ELEKTRA_WD_ENABLE_WDO 0x40
00299 #define ELEKTRA_WD_ENABLE_WDI 0x80
00300
00301 /*/////////////////////////////////////////////////////
00302 // Counter Defines Types for dscCounterSetRateSingle //
00303
00304
00305 #define COUNTER_0 0x00
00306 #define COUNTER_1 0x01
00307 #define COUNTER_2 0x02
00308 #define COUNTER_0_1 0x04
00309 #define COUNTER_1_2 0x08
00310 #define COUNTER_0_1_2 0x10
00311
00312
00313 /*/////////////////////////////
00314 // Interrupt Operation Types //
00315
00316
00317 #define OP_TYPE_NONE 0
00318 #define OP_TYPE_INT 1
00319 #define OP_TYPE_DMA 2
00320
00321 #define INT_TYPE_AD 0x01
00322 #define INT_TYPE_DA 0x02
00323 #define INT_TYPE_DIOIN 0x04
00324 #define INT_TYPE_USER 0x08
00325 #define INT_TYPE_COUNTER 0x10
00326 #define INT_TYPE_DIOREAD 0x20
00327 #define INT_TYPE_OPTO 0x40
00328 #define INT_TYPE_DIOWRITE 0x80
00329
00330 #define INT_TYPE_INDEX_AD 0
00331 #define INT_TYPE_INDEX_DA 1
00332 #define INT_TYPE_INDEX_DIOIN 2
00333 #define INT_TYPE_INDEX_USER 3
00334 #define INT_TYPE_INDEX_COUNTER 4
00335 #define INT_TYPE_INDEX_DIOREAD 5
00336 #define INT_TYPE_INDEX_OPTO 6
00337 #define INT_TYPE_INDEX_DIOWRITE 7
00338
00339 /*////////////////////////
00340 // User Interrupt Modes //
00341
00342
00343 #define USER_INT_CANCEL 0
00344 #define USER_INT_AFTER 1
00345 #define USER_INT_INSTEAD 2
00346
00347 #define USER_INT_SOURCE_EXTERNAL 1
00348 #define USER_INT_SOURCE_INTERNAL 0
00349
00350
00351 /*///////////////////////////////
00352 // Waveform Generator Commands //
00353
00354
00355 #define WG_CMD_START 0x01 /* Start the waveform generator */
00356 #define WG_CMD_PAUSE 0x02
00357 #define WG_CMD_RESET 0x04
00358 #define WG_CMD_INC 0x08
00359
00360
00361
00362
00363
00364
00365 #define WG_SRC_MANUAL 0 /* Manual trigger (software) */
00366 #define WG_SRC_CTR0 1
00367 #define WG_SRC_CTR12 2
00368 #define WG_SRC_EXT 3
00369
00370
00371
00372
00373
00374
00375 #define WG_CH_PER_FRAME_1 0 /* 1 channel per frame */
00376 #define WG_CH_PER_FRAME_2 1
00377 #define WG_CH_PER_FRAME_4 2
00378
00379
00380
00381
00382
00383
00384
00385 #define AAC_CMD_HOLD 0x10 /* Enable the hold-off line, prevent AAC from running */
00386 #define AAC_CMD_REL 0x08
00387 #define AAC_CMD_RESET 0x04
00388 #define AAC_CMD_ABORT 0x02
00389 #define AAC_CMD_TRIG 0x01
00390
00391
00392
00393
00394
00395
00396 #define PCI_MAX_RESOURCES 5
00397 #define PCI_DSC_VENDORID 0x1234
00398
00399 /*///////////////
00400 // Error Codes //
00401
00402
00403 #define DE_NONE 0 /* no error */
00404 #define DE_HW_FAILURE 1
00405 #define DE_SW_FAILURE 2
00406 #define DE_HW_NOT_SUPPORTED 3
00407 #define DE_SW_NOT_SUPPORTED 4
00408 #define DE_INVALID_PARM 5
00409 #define DE_ALTERNATE_IN_PROGRESS 6
00410 #define DE_NONE_IN_PROGRESS 7
00411 #define DE_BUFFER_ROLLOVER 8
00412 #define DE_INVALID_ERROR_CODE 9
00413 #define DE_ALREADY_PAUSED 10
00414 #define DE_OVERFLOW 11
00415 #define DE_INVALID_FUNC 12
00416 #define DE_DSCUDH_INVALID 13
00417 #define DE_INVALID_BOARD 14
00418 #define DE_BOARD_LIMIT_REACHED 15
00419 #define DE_BOARD_BUSY 16
00420 #define DE_INVALID_WINDRVR_HANDLE 17
00421 #define DE_INVALID_WINDRVR_VERSION 18
00422 #define DE_BAD_WINDRVR_BOARD_INIT 19
00423 #define DE_OPERATION_TIMED_OUT 20
00424 #define DE_INVALID_WINDRVR_KP 21
00425 #define DE_THREAD_FAILURE 22
00426
00427
00428
00429
00430
00431 #define STR_DE_NONE "NO ERRORS REPORTED"
00432 #define STR_DE_HW_FAILURE "HARDWARE FAILURE"
00433 #define STR_DE_SW_FAILURE "SOFTWARE FAILURE"
00434 #define STR_DE_HW_NOT_SUPPORTED "OPERATION NOT SUPPORTED BY HARDWARE"
00435 #define STR_DE_SW_NOT_SUPPORTED "OPERATION NOT SUPPORTED BY SOFTWARE"
00436 #define STR_DE_INVALID_PARM "INVALID PARAMETER"
00437 #define STR_DE_ALTERNATE_IN_PROGRESS "ALTERNATE INTERRUPT OPERATION IN PROGRESS"
00438 #define STR_DE_NONE_IN_PROGRESS "NO INTERRUPT OPERATION IN PROGRESS"
00439 #define STR_DE_BUFFER_ROLLOVER "POINTER + SIZE OF DATA OVERRUN BUFFER"
00440 #define STR_DE_INVALID_ERROR_CODE "INVALID ERROR CODE, PLEASE IGNORE"
00441 #define STR_DE_ALREADY_PAUSED "OPERATION ALREADY PAUSED"
00442 #define STR_DE_OVERFLOW "AM9513A COUNTER FUNCTION OVERFLOWED OR BUFFER OVERFLOW"
00443 #define STR_DE_INVALID_FUNC "INVALID FUNCTION FOR SELECTED BOARD"
00444 #define STR_DE_DSCUDH_INVALID "LIBRARY HEADER VERSION MISMATCH"
00445 #define STR_DE_INVALID_BOARD "INVALID BOARD TYPE SPECIFIED"
00446 #define STR_DE_BOARD_LIMIT_REACHED "MAXIMUM NUMBER OF BOARDS REACHED"
00447 #define STR_DE_BOARD_BUSY "ATTEMPT TO ACQUIRE BOARD TIMED OUT"
00448 #define STR_DE_INVALID_WINDRVR_HANDLE "INVALID WINDRIVER HANDLE RETURNED"
00449 #define STR_DE_INVALID_WINDRVR_VERSION "INVALID WINDRIVER VERSION"
00450 #define STR_DE_BAD_WINDRVR_BOARD_INIT "WINDRIVER BOARD INITIALIZATION FAILURE"
00451 #define STR_DE_OPERATION_TIMED_OUT "OPERATION TIMED OUT"
00452 #define STR_DE_INVALID_WINDRVR_KP "KERNEL PLUGIN INITIALIZATION FAILURE"
00453 #define STR_DE_THREAD_FAILURE "THREAD INITIALIZATION FAILURE"
00454 #define STR_DE_MUTEX_FAIL "MUTEX CREATION OR LOCKING OPERATION FAILED"
00455
00456
00457 /*/////////////////////////////////////////////////////////////////
00458
00459
00460
00461
00462
00463
00464
00465 /*/////////
00466 // DSCCB //
00467
00468
00469 typedef struct
00470 {
00471 /*//////////////////////////////////////////////////////////
00472 // These members are filled automatically by dscInitBoard //
00473 // THE USER DOES NOT HAVE TO FILL THESE IN MANUALLY //
00474
00475 BYTE boardtype; /* Contains the boardtype constant */
00476 DSCB boardnum;
00477
00478
00479
00480
00481
00482 WORD base_address; /* Base address of the board */
00483
00484
00485
00486
00487 BYTE int_level; /* Interrupt level of the board */
00488
00489
00490
00491
00492 BOOL RMM_external_trigger; /* Enable/disable external trigger */
00493
00494
00495
00496
00497 BOOL RMM_external_trigger_c3;
00498
00499 /*/////////////////
00500 // EMM specific //
00501
00502 WORD EMM_IOAddr[8]; /* IO addresses for up to eight ports */
00503 WORD EMM_Interrupt[8];
00504
00505
00506
00507
00508 BYTE clkfrq0; /* 0 = 10Mhz, 1 = 1MHz */
00509 BYTE clkfrq1;
00510 BYTE clksel1;
00511
00512
00513
00514
00515 WORD address_space; /* Size of I/O block (in bytes) to allocate. Only needed for DSC_RAW */
00516
00517
00518
00519
00520 LONG clock_freq;
00521 BYTE dma_level;
00522 BYTE int_level1;
00523 BYTE int_level2;
00524 BYTE int_level3;
00525 WORD fpga;
00526 BYTE SMM_AD_resolution;
00527 BOOL RMM_mode_16bit;
00528 BOOL RMM_DAC_0_3_external_enable;
00529 BOOL RMM_DAC_4_7_external_enable;
00530
00531 } DSCCB;
00532
00533 /*//////////
00534 // DSCCBP //
00535
00536
00537 typedef struct
00538 {
00539 /*/////////////////////////////////////////////////////////////
00540 // These members are filled automatically by dscPCIInitBoard //
00541 // THE USER DOES NOT HAVE TO FILL THESE IN MANUALLY //
00542
00543 BYTE boardtype; /* Contains the boardtype constant */
00544 DSCB boardnum;
00545 DWORD phys_mem_address[PCI_MAX_RESOURCES];
00546 DWORD user_mem_address[PCI_MAX_RESOURCES];
00547 DWORD io_address[PCI_MAX_RESOURCES];
00548 DWORD irq_level[PCI_MAX_RESOURCES];
00549
00550
00551
00552
00553
00554
00555 BYTE pci_slot; // PCI slot jumper configured on the board
00556
00557 } DSCCBP;
00558
00559
00560 /*/////////////////
00561 // DSCADSETTINGS //
00562
00563
00564 typedef struct
00565 {
00566
00567 BYTE current_channel; /* INPUT: Which channel to read AD samples from */
00568 BYTE gain;
00569 BYTE range;
00570 BYTE polarity;
00571 BYTE load_cal;
00572 BYTE scan_interval;
00573 BYTE addiff;
00574
00575 } DSCADSETTINGS;
00576
00577
00578
00579
00580
00581
00582 typedef struct
00583 {
00584
00585 BYTE low_channel; /* INPUT: Low channel of the scan */
00586 BYTE high_channel;
00587 DSCSAMPLE *sample_values;
00588 BYTE gain;
00589
00590 } DSCADSCAN;
00591
00592
00593
00594
00595
00596
00597 /* This structure is for internal driver use */
00598
00599 typedef struct
00600 {
00601
00602 DWORD address;
00603 BYTE data;
00604
00605 } REGPARAMS;
00606
00607
00608
00609
00610
00611
00612 typedef struct
00613 {
00614
00615 BYTE ErrCode; /* OUTPUT: The numerical value of the last error */
00616 char *errstring;
00617
00618 } ERRPARAMS;
00619
00620
00621
00622
00623
00624
00625 typedef struct
00626 {
00627
00628 DWORD num_conversions; /* INPUT: total # of conversions to write to sample_values, unless cycling. */
00629 FLOAT conversion_rate;
00630 FLOAT conversion_rate_final;
00631 BOOL cycle;
00632 BOOL internal_clock;
00633 BYTE low_channel;
00634 BYTE high_channel;
00635 BOOL external_gate_enable;
00636 BOOL internal_clock_gate;
00637 DSCSAMPLE *sample_values;
00638 BOOL fifo_enab;
00639 WORD fifo_depth;
00640 DWORD dump_threshold;
00641 BOOL channel_align;
00642 BYTE clksource;
00643
00644 } DSCAIOINT;
00645
00646
00647
00648
00649
00650
00651 typedef struct
00652 {
00653
00654 BYTE adrange; /* INPUT: A/D Range to calibrate (use 0xFF for all ranges) */
00655 BYTE boot_adrange;
00656 FLOAT ad_offset, ad_gain;
00657 DFLOAT target_values[8];
00658
00659 BOOL use_eeprom;
00660
00661
00662 } DSCAUTOCAL, DSCADCALPARAMS;
00663
00664
00665
00666
00667
00668
00669 /* This structure is here for backwards compatibility, but is no longer used */
00670
00671 typedef struct
00672 {
00673
00674 BYTE chan;
00675 BOOL cal_enable;
00676
00677 } SETCALPARAMS;
00678
00679
00680
00681
00682
00683
00684 #define DACS_MAX_CHANNELS 16
00685
00686 typedef struct
00687 {
00688
00689 BOOL channel_enable[DACS_MAX_CHANNELS]; /* INPUT: Which to update. channel_enable[x] = 1 means that output_codes[x] is valid */
00690 DSCDACODE *output_codes;
00691
00692 } DSCDACS;
00693
00694
00695
00696
00697
00698
00699 typedef struct
00700 {
00701 BYTE polarity; /* INPUT: 0 = BIPOLAR, 1 = UNIPOLAR */
00702 BYTE load_cal;
00703 FLOAT range;
00704
00705 } DSCDASETTINGS;
00706
00707
00708
00709
00710
00711
00712 typedef struct
00713 {
00714
00715 BYTE channel; /* INPUT: Which DA channel to modify */
00716 DSCDACODE output_code;
00717
00718 } DAPARAMS;
00719
00720
00721
00722
00723
00724
00725 typedef struct
00726 {
00727 BOOL fixed; /* INPUT/OUTPUT: reports the "fixed" status that was detected. fixed=FALSE means programmable. */
00728 BOOL polarity;
00729 DFLOAT darange;
00730 FLOAT offset;
00731 FLOAT gain;
00732
00733
00734
00735
00736 BOOL ch0pol, ch0prog, ch0ext; /* cho0pol=true: bipolar, ch0prog=true: programmable, ch0ext=true: external; */
00737 BOOL ch1pol, ch1prog, ch1ext;
00738 FLOAT ref;
00739
00740 } DSCDACALPARAMS;
00741
00742
00743
00744
00745
00746
00747 typedef struct
00748 {
00749
00750 DWORD op_type; /* OUTPUT: reports the current operation type. Will usually be either OP_TYPE_NONE or OP_TYPE_INT */
00751 DWORD transfers;
00752 DWORD total_transfers;
00753 DWORD da_transfers;
00754 DWORD da_total_transfers;
00755 DWORD overflows;
00756
00757
00758 BYTE paused;
00759 BYTE output;
00760 WORD base_address;
00761 BYTE int_level;
00762 BOOL analog;
00763
00764 } DSCS;
00765
00766
00767
00768
00769
00770 typedef struct
00771 {
00772
00773 DSCUserInterruptFunction func; /* INPUT: A pointer to the user's interrupt function */
00774 BYTE int_mode;
00775 DWORD int_type;
00776
00777 } DSCUSERINTFUNCTION;
00778
00779
00780
00781
00782
00783
00784 /* These input values are board specific, please refer to the user's manual */
00785
00786 typedef struct
00787 {
00788 BYTE intsource;
00789 BYTE counter;
00790 BYTE clksource;
00791 FLOAT rate;
00792 DWORD int_type;
00793 DSCUserInterruptFunction func;
00794
00795 } DSCUSERINT;
00796
00797
00798
00799
00800
00801 typedef struct
00802 {
00803
00804 DWORD value; /* OUTPUT: Counter readback value */
00805 BYTE status;
00806
00807 } DSCCS;
00808
00809
00810
00811
00812
00813
00814 /* Used only in dscCounterRead, otherwise mostly for internal driver use */
00815
00816
00817 typedef struct
00818 {
00819
00820 BYTE control_code;
00821 BYTE counter_number;
00822 DWORD counter_data;
00823 DSCCS counter0;
00824 DSCCS counter1;
00825 DSCCS counter2;
00826
00827 } DSCCR;
00828
00829
00830
00831
00832
00833
00834 typedef struct
00835 {
00836
00837 DWORD num_transfers; /* INPUT: Number of conversions to perform */
00838 BYTE port;
00839 BYTE size;
00840 BOOL cycle;
00841 BOOL internal_clock;
00842 DFLOAT rate;
00843 BYTE mode;
00844 BYTE source;
00845 BYTE *digital_values;
00846 DWORD fifo_depth;
00847 DWORD dump_threshold;
00848
00849 } DSCDIOINT;
00850
00851
00852
00853
00854
00855 typedef struct
00856 {
00857
00858 BYTE DIOpins[6]; /* EMMDIO I/O: contains values to write to pins, or values read from pins - based on use_DIOpins */
00859 BOOL lock_port[6];
00860 BYTE edge_polarity[4];
00861 BYTE edge_detect[4];
00862 BYTE edge_detect_int[4];
00863 BYTE edge_detect_clear[3];
00864 BOOL use_DIOpins;
00865 BOOL use_lock_port;
00866 BOOL use_edge_polarity;
00867 BOOL use_edge_detect;
00868 BYTE interrupt_status;
00869
00870 } DSCEMMDIO;
00871
00872
00873
00874
00875
00876
00877 #define DSCUD_MAX_OPTO 8 /* The maximum number of optos that can be reported by the above functions */
00878
00879 typedef struct
00880 {
00881
00882 BYTE edge_polarity[DSCUD_MAX_OPTO];
00883 BYTE edge_detect_enab[DSCUD_MAX_OPTO];
00884 BYTE edge_status[DSCUD_MAX_OPTO];
00885 BYTE oint_state[DSCUD_MAX_OPTO];
00886
00887 BYTE dmm48at_oint_state;
00888
00889
00890 } DSCOPTOSTATE;
00891
00892
00893
00894
00895
00896
00897 typedef struct
00898 {
00899
00900 BOOL use_lock_port; /* INPUT: 0 = ignore lock_port, 1 = use lock_port */
00901 BOOL lock_port[6];
00902 BYTE edge_detect_clear[3];
00903
00904 } DSCEMMDIORESETINT;
00905
00906
00907
00908
00909
00910
00911 typedef struct
00912 {
00913
00914 WORD wd1; /* INPUT: WD1 16-bit timer value (runs at ~32KHz - max 2 seconds) */
00915 BYTE wd2;
00916 BYTE options;
00917
00918
00919 } DSCWATCHDOG;
00920
00921
00922
00923
00924
00925
00926 typedef struct
00927 {
00928 DFLOAT output_freq; /* Freq in Hz */
00929 FLOAT duty_cycle;
00930 BYTE polarity;
00931 BYTE pwm_circuit;
00932 BOOL output_enab;
00933
00934 } DSCPWM;
00935
00936
00937
00938
00939
00940
00941 typedef struct
00942 {
00943 BOOL pic_present; /* TRUE if PIC device is present, FALSE otherwise */
00944 BOOL pic_busy;
00945 BOOL aac_hold;
00946 BOOL aac_error;
00947 BOOL aac_active;
00948
00949 } DSCAACSTATUS;
00950
00951
00952
00953
00954
00955
00956 typedef struct
00957 {
00958 DWORD depth; /* WG depth (absolute, i.e. 64, 128, 256, 512, etc.) */
00959 DWORD ch_per_frame;
00960 DWORD source;
00961
00962 } DSCWGCONFIG;
00963
00964
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976 /*////////////////////////////
00977 // Error-Handling Functions //
00978
00979
00980 BYTE DSCUDAPICALL dscGetLastError(ERRPARAMS* errparams);
00981 DSCUDAPICALL char* dscGetErrorString(BYTE error_code);
00982
00983 /*////////////////////////////
00984 // Initialization Functions //
00985
00986
00987 BYTE DSCUDAPICALL dscInit(WORD version);
00988 BYTE DSCUDAPICALL dscFree(void);
00989 BYTE DSCUDAPICALL dscInitBoard(BYTE boardtype, DSCCB* dsccb, DSCB* board);
00990 BYTE DSCUDAPICALL dscPCIInitBoard(BYTE boardtype, DSCCBP* dsccbp, DSCB* board);
00991 BYTE DSCUDAPICALL dscFreeBoard(DSCB board);
00992
00993 /*/////////////////
00994 // A/D Functions //
00995
00996
00997 BYTE DSCUDAPICALL dscADSetSettings(DSCB board, DSCADSETTINGS* settings);
00998 BYTE DSCUDAPICALL dscADSetChannel(DSCB board, BYTE low_channel, BYTE high_channel);
00999 BYTE DSCUDAPICALL dscADSample(DSCB board, DSCSAMPLE* sample);
01000 BYTE DSCUDAPICALL dscADSampleInt(DSCB board, DSCAIOINT* dscaioint);
01001 BYTE DSCUDAPICALL dscADSampleAvg(DSCB board, DFLOAT* average, int count);
01002 BYTE DSCUDAPICALL dscADScan(DSCB board, DSCADSCAN* dscadscan, DSCSAMPLE* sample_values);
01003 BYTE DSCUDAPICALL dscADScanInt(DSCB board, DSCAIOINT* dscaioint);
01004 BYTE DSCUDAPICALL dscADScanAvg(DSCB board, DSCADSCAN* dscadscan, DFLOAT* average_values, int count);
01005
01006 /*/////////////////
01007 // D/A Functions //
01008
01009
01010 BYTE DSCUDAPICALL dscDASetPolarity(DSCB board, BYTE polarity);
01011 BYTE DSCUDAPICALL dscDASetSettings( DSCB board, DSCDASETTINGS * dasettings);
01012 BYTE DSCUDAPICALL dscDAConvert(DSCB board, BYTE channel, DSCDACODE output_code);
01013 BYTE DSCUDAPICALL dscDAConvertScan(DSCB board, DSCDACS *dscdacs);
01014 BYTE DSCUDAPICALL dscDAConvertScanInt(DSCB board, DSCAIOINT *dscaioint);
01015
01016 /*/////////////////
01017 // DIO Functions //
01018
01019
01020 BYTE DSCUDAPICALL dscDIOSetConfig(DSCB board, BYTE* config_bytes);
01021 BYTE DSCUDAPICALL dscDIOInputByte(DSCB board, BYTE port, BYTE* digital_value);
01022 BYTE DSCUDAPICALL dscDIOInputWord(DSCB board, BYTE port, WORD* digital_value);
01023 BYTE DSCUDAPICALL dscDIOOutputByte(DSCB board, BYTE port, BYTE digital_value);
01024 BYTE DSCUDAPICALL dscDIOOutputWord(DSCB board, BYTE port, WORD digital_value);
01025 BYTE DSCUDAPICALL dscDIOInputBit(DSCB board,BYTE port,BYTE bit,BYTE *digital_value);
01026 BYTE DSCUDAPICALL dscDIOOutputBit(DSCB board,BYTE port, BYTE bit,BYTE digital_value);
01027 BYTE DSCUDAPICALL dscDIOSetBit(DSCB board,BYTE port,BYTE bit);
01028 BYTE DSCUDAPICALL dscDIOClearBit(DSCB board,BYTE port,BYTE bit);
01029 BYTE DSCUDAPICALL dscDIOInputInt(DSCB board,DSCDIOINT *dscdioint);
01030 BYTE DSCUDAPICALL dscDIOOutputInt(DSCB board,DSCDIOINT *dscdioint);
01031 BYTE DSCUDAPICALL dscDMM32DIOOutputByte(DSCB board, BYTE port, BYTE digital_value);
01032 BYTE DSCUDAPICALL dscDMM32DIOInputByte(DSCB board, BYTE port, BYTE *digital_value);
01033
01034
01035 /*////////////////////
01036 // Opto Functions //
01037
01038
01039 BYTE DSCUDAPICALL dscOptoInputByte(DSCB board, BYTE port, BYTE * optoValue);
01040 BYTE DSCUDAPICALL dscOptoInputBit(DSCB board, BYTE port, BYTE bit, BYTE * optoValue);
01041 BYTE DSCUDAPICALL dscOptoGetPolarity(DSCB board, BYTE * polarity);
01042
01043
01044 /*////////////////////
01045 // Opto Edge State //
01046
01047
01048 BYTE DSCUDAPICALL dscOptoGetState(DSCB board, DSCOPTOSTATE* state);
01049 BYTE DSCUDAPICALL dscOptoSetState(DSCB board, DSCOPTOSTATE* state);
01050
01051 /*/////////////////////
01052 // Counter Functions //
01053
01054
01055 BYTE DSCUDAPICALL dscCounterSetRateSingle(DSCB board, float hertz, DWORD ctr); // for ctr, please use the counter set rate single defines on top
01056 BYTE DSCUDAPICALL dscCounterSetRate(DSCB board, float hertz);
01057 BYTE DSCUDAPICALL dscCounterDirectSet(DSCB board, BYTE code, DWORD data, BYTE ctr_number);
01058 BYTE DSCUDAPICALL dscCounterRead(DSCB board, DSCCR* dsccr);
01059
01060 /*/////////////////////////
01061 // Calibration Functions //
01062
01063
01064 BYTE DSCUDAPICALL dscSetCalMux(DSCB board, BOOL on);
01065 BYTE DSCUDAPICALL dscADAutoCal(DSCB board, DSCADCALPARAMS* params);
01066 BYTE DSCUDAPICALL dscDAAutoCal(DSCB board, DSCDACALPARAMS* params);
01067 BYTE DSCUDAPICALL dscADCalVerify(DSCB board, DSCADCALPARAMS* params);
01068 BYTE DSCUDAPICALL dscDACalVerify(DSCB board, DSCDACALPARAMS* params);
01069 BYTE DSCUDAPICALL dscGetReferenceVoltages(DSCB board, DFLOAT* refs);
01070 BYTE DSCUDAPICALL dscSetReferenceVoltages(DSCB board, DFLOAT* refs);
01071 BYTE DSCUDAPICALL dscDAGetOffsets(DSCB board, DFLOAT* offsets, int count);
01072 BYTE DSCUDAPICALL dscDASetOffsets(DSCB board, DFLOAT* offsets, int count);
01073
01074 /*////////////////////
01075 // Relay Functions //
01076
01077
01078 BYTE DSCUDAPICALL dscSetRelay(DSCB board, BYTE relay, BYTE value); // relays start from 0
01079 // For ir104, please use dscIR104 functions
01080 BYTE DSCUDAPICALL dscGetRelay(DSCB board, BYTE relay, BYTE* value); // relays start from 0
01081 // For ir104, please use dscIR104 functions
01082 BYTE DSCUDAPICALL dscSetRelayMulti(DSCB board, BYTE relayGroup, BYTE value); /*each relayGroup groups 8 relays together.
01083 ex. relayGroup 0 refers to relays 0-7
01084 relayGroup 1 referes to relays 8-15, etc.
01085 for boards with relays that aren't multiples
01086 of 8, such as IR104, relays 16-20 are part of
01087 relayGroup 2. The same applies to other boards.
01088 Parameter value is the value to set for each relay.
01089 Bit0 of value is value set for relay 0,
01090 bit1 of value is value set for relay 1, etc
01091 */
01092 BYTE DSCUDAPICALL dscGetRelayMulti(DSCB board, BYTE relayGroup, BYTE * value);
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106 BYTE DSCUDAPICALL dscWatchdogEnable(DSCB board, WORD timer16, BYTE timer8, SDWORD options);
01107 BYTE DSCUDAPICALL dscWatchdogDisable(DSCB board);
01108 BYTE DSCUDAPICALL dscWatchdogTrigger(DSCB board);
01109
01110
01111 /*////////////////////////////////
01112 // PULSE WIDTH MOD Functions //
01113
01114
01115 BYTE DSCUDAPICALL dscPWMLoad(DSCB board, BYTE pwm_circuit, BYTE counter, DWORD value);
01116 BYTE DSCUDAPICALL dscPWMConfig(DSCB board, BYTE * config_byte);
01117 BYTE DSCUDAPICALL dscPWMClear(DSCB board, BYTE pwm_circuit);
01118 BYTE DSCUDAPICALL dscPWMFunction(DSCB board, DSCPWM * dscpwm);
01119
01120 /*//////////////////////
01121 // Register Functions //
01122
01123
01124 BYTE DSCUDAPICALL dscRegisterRead(DSCB board, WORD address, BYTE* data);
01125 BYTE DSCUDAPICALL dscRegisterWrite(DSCB board, WORD address, BYTE data);
01126 BYTE DSCUDAPICALL dscInp(DWORD address, BYTE* value);
01127 BYTE DSCUDAPICALL dscInpw(DWORD address, WORD* value);
01128 BYTE DSCUDAPICALL dscInpl(DWORD address, DWORD* value);
01129 BYTE DSCUDAPICALL dscInpws(DWORD address, WORD* buffer, WORD n);
01130 BYTE DSCUDAPICALL dscOutp(DWORD address, BYTE value);
01131 BYTE DSCUDAPICALL dscOutpw(DWORD address, WORD value);
01132 BYTE DSCUDAPICALL dscOutpl(DWORD address, DWORD value);
01133 BYTE DSCUDAPICALL dscOutpws(DWORD address, WORD* buffer, WORD n);
01134
01135 /*///////////////////
01136 // Misc. Functions //
01137
01138
01139 BYTE DSCUDAPICALL dscSleep(DWORD ms);
01140 BYTE DSCUDAPICALL dscGetTime(DWORD* ms);
01141 BYTE DSCUDAPICALL dscGetEEPROM(DSCB board, DWORD address, BYTE* data);
01142 BYTE DSCUDAPICALL dscSetEEPROM(DSCB board, DWORD address, BYTE data);
01143 BYTE DSCUDAPICALL dscSetTrimDac(DSCB board, DWORD trimDac, BYTE value);
01144 BYTE DSCUDAPICALL dscGetStatus(DSCB board, DSCS* status);
01145 BYTE DSCUDAPICALL dscCancelOp(DSCB board);
01146 BYTE DSCUDAPICALL dscCancelOpType(DSCB board, DWORD int_type);
01147 BYTE DSCUDAPICALL dscPauseOp(DSCB board);
01148 BYTE DSCUDAPICALL dscResumeOp(DSCB board);
01149 BYTE DSCUDAPICALL dscSetUserInterruptFunction(DSCB board, DSCUSERINTFUNCTION * dscuserintfunc);
01150 BYTE DSCUDAPICALL dscSetUserInterruptFunctionType(DSCB board, DSCUSERINTFUNCTION * dscuserintfunc, DWORD int_type);
01151 BYTE DSCUDAPICALL dscUserInt(DSCB board, DSCUSERINT * dscuserint, DSCUserInterruptFunction function);
01152 BYTE DSCUDAPICALL dscUserIntVB(DSCB board, DSCUSERINT * dscuserint);
01153 BYTE DSCUDAPICALL dscClearUserInterruptFunction(DSCB board);
01154 BYTE DSCUDAPICALL dscClearUserInterruptFunctionType(DSCB board, DWORD int_type);
01155 BYTE DSCUDAPICALL dscGetBoardMacro(char* boardtype, BYTE* macro);
01156 BYTE DSCUDAPICALL dscGetFPGARev(DSCB board, WORD* fpga);
01157 BYTE DSCUDAPICALL dscSetSystemPriority(DWORD priority);
01158
01159 /*/////////////////////////////
01160 // Unit Conversion Functions //
01161
01162 BYTE DSCUDAPICALL dscADCodeToVoltage(DSCB board, DSCADSETTINGS adsettings, DSCSAMPLE adcode, DFLOAT *voltage);
01163 BYTE DSCUDAPICALL dscVoltageToADCode(DSCB board, DSCADSETTINGS adsettings, DFLOAT voltage, DSCSAMPLE *adcode);
01164 BYTE DSCUDAPICALL dscDACodeToVoltage(DSCB board, DSCDASETTINGS dasettings, DSCDACODE dacode, DFLOAT *voltage);
01165 BYTE DSCUDAPICALL dscVoltageToDACode(DSCB board, DSCDASETTINGS dasettings, DFLOAT voltage, DSCDACODE *dacode);
01166
01167 /*///////////////
01168 // IR104 //
01169
01170
01171 BYTE DSCUDAPICALL dscIR104ClearRelay(DSCB board,BYTE relay); /*relay range 1-20*/
01172 BYTE DSCUDAPICALL dscIR104SetRelay(DSCB board,BYTE relay);
01173 BYTE DSCUDAPICALL dscIR104RelayInput(DSCB board, BYTE relay, BYTE* value);
01174 BYTE DSCUDAPICALL dscIR104OptoInput(DSCB board,BYTE opto, BYTE* value);
01175
01176
01177
01178
01179
01180 BYTE DSCUDAPICALL dscEMMDIOGetState(DSCB board, DSCEMMDIO* state);
01181 BYTE DSCUDAPICALL dscEMMDIOSetState(DSCB board, DSCEMMDIO* state);
01182 BYTE DSCUDAPICALL dscEMMDIOResetInt(DSCB board, DSCEMMDIORESETINT* edge);
01183
01184 /*////////////////////
01185 // DMM32X Functions //
01186
01187
01188 BYTE DSCUDAPICALL dscEnhancedFeaturesEnable(DSCB board, BOOL enable);
01189 BYTE DSCUDAPICALL dscPICOutp(DSCB board, DWORD address, BYTE value);
01190 BYTE DSCUDAPICALL dscPICInp(DSCB board, DWORD address, BYTE* value);
01191 BYTE DSCUDAPICALL dscPICProgEnable(DSCB board, BOOL enable);
01192 BYTE DSCUDAPICALL dscPICProgSet(DSCB board, BOOL dout, BOOL dstate, BOOL cstate);
01193 BYTE DSCUDAPICALL dscPICProgGet(DSCB board, BOOL *din);
01194 BYTE DSCUDAPICALL dscAACCommand(DSCB board, DWORD cmd);
01195 BYTE DSCUDAPICALL dscAACGetStatus(DSCB board, DSCAACSTATUS *status);
01196 BYTE DSCUDAPICALL dscWGCommand(DSCB board, DWORD cmd);
01197 BYTE DSCUDAPICALL dscWGConfigSet(DSCB board, DSCWGCONFIG *config);
01198 BYTE DSCUDAPICALL dscWGBufferSet(DSCB board, DWORD address, DSCDACODE value, DWORD channel, BOOL simul);
01199
01200 /*/////////////////////
01201 // QMM SECTION BELOW //
01202
01203
01204 /* QMM counter group */
01205 #define QMM_COUNTER_GROUP_1 1
01206 #define QMM_COUNTER_GROUP_2 2
01207
01208
01209 #define QMM_SOURCE_E1_TC_NM1 0
01210 #define QMM_SOURCE_SRC1 1
01211 #define QMM_SOURCE_SRC2 2
01212 #define QMM_SOURCE_SRC3 3
01213 #define QMM_SOURCE_SRC4 4
01214 #define QMM_SOURCE_SRC5 5
01215 #define QMM_SOURCE_GATE1 6
01216 #define QMM_SOURCE_GATE2 7
01217 #define QMM_SOURCE_GATE3 8
01218 #define QMM_SOURCE_GATE4 9
01219 #define QMM_SOURCE_GATE5 10
01220 #define QMM_SOURCE_F1_4MHZ 11
01221 #define QMM_SOURCE_F2_400KHZ 12
01222 #define QMM_SOURCE_F3_40KHZ 13
01223 #define QMM_SOURCE_F4_4KHZ 14
01224 #define QMM_SOURCE_F5_400HZ 15
01225
01226
01227 #define QMM_TOD_DISABLED 0
01228 #define QMM_TOD_DIVIDE_BY_5 1
01229 #define QMM_TOD_DIVIDE_BY_6 2
01230 #define QMM_TOD_DIVIDE_BY_10 3
01231
01232
01233 #define QMM_NO_GATING 0
01234 #define QMM_ACTIVE_HIGH_TC_NM1 1
01235 #define QMM_ACTIVE_HIGH_LEVEL_GATE_NP1 2
01236 #define QMM_ACTIVE_HIGH_LEVEL_GATE_NM1 3
01237 #define QMM_ACTIVE_HIGH_LEVEL_GATE_N 4
01238 #define QMM_ACTIVE_LOW_LEVEL_GATE_N 5
01239 #define QMM_ACTIVE_HIGH_EDGE_GATE_N 6
01240 #define QMM_ACTIVE_LOW_EDGE_GATE_N 7
01241
01242
01243 #define QMM_INACTIVE_OUTPUT_LOW 0
01244 #define QMM_ACTIVE_HIGH_PULSE_ON_TC 1
01245 #define QMM_TOGGLE_ON_TC 2
01246 #define QMM_INACTIVE_OUTPUT_HIGH 4
01247 #define QMM_ACTIVE_LOW_PULSE_ON_TC 5
01248
01249
01250 #define QMM_ACTION_NONE 0
01251 #define QMM_ACTION_ARM 1
01252 #define QMM_ACTION_LOAD 2
01253 #define QMM_ACTION_LOAD_AND_ARM 3
01254 #define QMM_ACTION_DISARM_AND_SAVE 4
01255 #define QMM_ACTION_SAVE 5
01256 #define QMM_ACTION_DISARM 6
01257
01258
01259 #define QMM_SPECIAL_CLEAR_TOGGLE_OUTPUT 0
01260 #define QMM_SPECIAL_SET_TOGGLE_OUTPUT 1
01261 #define QMM_SPECIAL_STEP_COUNTER 2
01262 #define QMM_SPECIAL_PROGRAM_ALARM 3
01263
01264
01265 #define QMM_INTERVAL_1MS_1KHZ 0
01266 #define QMM_INTERVAL_10MS_100HZ 1
01267 #define QMM_INTERVAL_100MS_10HZ 2
01268 #define QMM_INTERVAL_1S_1HZ 3
01269 #define QMM_INTERVAL_10S_01HZ 4
01270
01271
01272 typedef struct
01273 {
01274
01275 BYTE counter_group;
01276 BYTE fout_divider;
01277 BYTE fout_source;
01278 BYTE compare1_enable;
01279 BYTE compare2_enable;
01280 BYTE tod_mode;
01281
01282 } DSCQMM_MMR;
01283
01284
01285 typedef struct
01286 {
01287
01288 BYTE counter;
01289 BYTE gating_control;
01290 BYTE active_source_edge;
01291 BYTE count_source;
01292 BYTE special_gate;
01293 BYTE reload_source;
01294 BYTE cycle;
01295 BYTE count_type;
01296 BYTE count_direction;
01297 BYTE output_control;
01298
01299 } DSCQMM_CMR;
01300
01301
01302 typedef struct
01303 {
01304
01305 BYTE group1_action;
01306 BYTE group1_counter_select;
01307 BYTE group2_action;
01308 BYTE group2_counter_select;
01309
01310 } DSCQMM_MCC;
01311
01312
01313 typedef struct
01314 {
01315
01316 BYTE counter;
01317 BYTE action;
01318 WORD alarm_value;
01319
01320 } DSCQMM_SCF;
01321
01322
01323
01324
01325 typedef struct
01326 {
01327
01328 BYTE init;
01329 BYTE counter;
01330 FLOAT output_freq;
01331 FLOAT duty_cycle;
01332
01333 DWORD input_freq;
01334 WORD load_reg;
01335 WORD hold_reg;
01336 BYTE hit_extreme;
01337
01338 } DSCQMM_PWM;
01339
01340
01341
01342
01343
01344 BYTE DSCUDAPICALL dscQMMReset(DSCB board);
01345
01346 BYTE DSCUDAPICALL dscQMMSetMMR(DSCB board, DSCQMM_MMR* dscqmmmmr);
01347 BYTE DSCUDAPICALL dscQMMSetCMR(DSCB board, DSCQMM_CMR* dscqmmcmr);
01348 BYTE DSCUDAPICALL dscQMMCounterControl(DSCB board, DSCQMM_MCC* dscqmmmcc, BYTE * status);
01349 BYTE DSCUDAPICALL dscQMMSingleCounterControl(DSCB board, BYTE counter, BYTE action);
01350
01351 BYTE DSCUDAPICALL dscQMMSetLoadRegister(DSCB board, BYTE counter, WORD value);
01352 BYTE DSCUDAPICALL dscQMMSetHoldRegister(DSCB board, BYTE counter, WORD value);
01353 BYTE DSCUDAPICALL dscQMMReadHoldRegister(DSCB board, BYTE counter, WORD* value);
01354
01355 BYTE DSCUDAPICALL dscQMMSpecialCounterFunction(DSCB board, DSCQMM_SCF* dscqmmscf);
01356 BYTE DSCUDAPICALL dscQMMMeasureFrequency(DSCB board, BYTE interval, BYTE source, FLOAT* freq);
01357 BYTE DSCUDAPICALL dscQMMMeasurePeriod(DSCB board, BYTE frequency, FLOAT* period);
01358
01359 BYTE DSCUDAPICALL dscQMMPulseWidthModulation(DSCB board, DSCQMM_PWM* dscqmmpwm);
01360
01361
01362
01363
01364 #ifdef __cplusplus
01365 }
01366 #endif
01367
01368
01369 #ifndef MSVC_1_52
01370 #ifdef _MSC_VER
01371 #pragma pack(pop, dscud_packing)
01372 #endif
01373 #endif
01374
01375
01376 #endif
01377