📄 sbsadtdef.h
字号:
#ifndef _SHENZHEN_SBS_SBSADTDEF_H_INCLUDE
#define _SHENZHEN_SBS_SBSADTDEF_H_INCLUDE
#define HIGH 1
#define LOW 0
#define SBSB SWORD
/*/////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////// Constants ////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////// */
/*///////////
// Version //
////////// */
#define SBS_VERSION 0x0300 /* 0xVVRR - Version & Revision */
/*///////////////
// Board Types //
// SBS标准命名 //
////////////// */
#define SBS_ADT_652 0
#define SBS_ADT_680 1
#define SBS_ADT_860 2
#define SBS_ADT_600 10
#define SBS_ADT_650 11
#define SBS_ADT_700 12
#define SBS_ADT_700A 13
#define SBS_ADT_800 14
/*//////////////////////
// A/D Mode Constants //
///////////////////// */
#define RANGE_5 0 //脉冲
#define RANGE_10 1
#define BIPOLAR 0 //双极性
#define UNIPOLAR 1
#define GAIN_1 0 //增益
#define GAIN_2 1
#define GAIN_4 2
#define GAIN_8 3
/*/////////////
// 82C54芯片 modes //
//////////// */
#define MODE_82C54_0 0
#define MODE_82C54_1 1
#define MODE_82C54_2 2
#define MODE_82C54_3 3
#define MODE_82C54_4 4
#define MODE_82C54_5 5
/*/////////////////////////////
// Interrupt Operation Sources //
//////////////////////////// */
#define INT_SOURCE_AD 0x00
#define INT_SOURCE_COUNTER0 0x01
#define INT_SOURCE_EXTERNAL 0x02
#define INT_SOURCE_COUNTER1 0x03
/*///////////////
// Error Codes //
////////////// */
#define DE_NONE 0 /* no error */
#define DE_HW_FAILURE 1 /* hardware failed */
#define DE_SW_FAILURE 2 /* software failed */
#define DE_HW_NOT_SUPPORTED 3 /* could not perform operation on this board */
#define DE_SW_NOT_SUPPORTED 4 /* software does not yet support this operation */
#define DE_INVALID_PARM 5 /* a parameter to the function is invalid */
#define DE_ALTERNATE_IN_PROGRESS 6 /* alternate interrupt function in progress */
#define DE_NONE_IN_PROGRESS 7 /* no interrupt function in progress to pause/cancel/resume */
#define DE_BUFFER_ROLLOVER 8 /* pointer passed in + sizeof data to be written would roll over a segment */
#define DE_INVALID_ERROR_CODE 9 /* we used an invalid error code somewhere */
#define DE_ALREADY_PAUSED 10 /* can't pause an operation--it's already paused */
#define DE_OVERFLOW 11 /* Am9513A counter function overflowed */
#define DE_INVALID_FUNC 12 /* Function number not recognized by board type */
#define DE_SBSADTH_INVALID 13 /* Header - Library version mismatch */
#define DE_INVALID_BOARD 14 /* Invalid board-type constant */
#define DE_BOARD_LIMIT_REACHED 15 /* Tried to initialize too many boards at once */
#define DE_BOARD_BUSY 16 /* Attempt to acquire the board timed out */
#define DE_INVALID_WINDRVR_HANDLE 17 /* Windriver initialization failed */
#define DE_INVALID_WINDRVR_VERSION 18 /* Windriver version conflict */
#define DE_BAD_WINDRVR_BOARD_INIT 19 /* Windriver could not initialize the board */
#define DE_OPERATION_TIMED_OUT 20 /* Operation timed out */
#define DE_INVALID_WINDRVR_KP 21 /* Windriver kernel plugin initialization failed */
#define DE_THREAD_FAILURE 22 /* Windriver failed to initialize thread */
/*/////////////////
// Error Strings //
//////////////// */
#define STR_DE_NONE "NO ERRORS REPORTED"
#define STR_DE_HW_FAILURE "HARDWARE FAILURE"
#define STR_DE_SW_FAILURE "SOFTWARE FAILURE"
#define STR_DE_HW_NOT_SUPPORTED "OPERATION NOT SUPPORTED BY HARDWARE"
#define STR_DE_SW_NOT_SUPPORTED "OPERATION NOT SUPPORTED BY SOFTWARE"
#define STR_DE_INVALID_PARM "INVALID PARAMETER"
#define STR_DE_ALTERNATE_IN_PROGRESS "ALTERNATE INTERRUPT OPERATION IN PROGRESS"
#define STR_DE_NONE_IN_PROGRESS "NO INTERRUPT OPERATION IN PROGRESS"
#define STR_DE_BUFFER_ROLLOVER "POINTER + SIZE OF DATA OVERRUN BUFFER"
#define STR_DE_INVALID_ERROR_CODE "INVALID ERROR CODE, PLEASE IGNORE"
#define STR_DE_ALREADY_PAUSED "OPERATION ALREADY PAUSED"
#define STR_DE_OVERFLOW "AM9513A COUNTER FUNCTION OVERFLOWED OR BUFFER OVERFLOW"
#define STR_DE_INVALID_FUNC "INVALID FUNCTION FOR SELECTED BOARD"
#define STR_DE_SBSADTH_INVALID "LIBRARY HEADER VERSION MISMATCH"
#define STR_DE_INVALID_BOARD "INVALID BOARD TYPE SPECIFIED"
#define STR_DE_BOARD_LIMIT_REACHED "MAXIMUM NUMBER OF BOARDS REACHED"
#define STR_DE_BOARD_BUSY "ATTEMPT TO ACQUIRE BOARD TIMED OUT"
#define STR_DE_INVALID_WINDRVR_HANDLE "INVALID WINDRIVER HANDLE RETURNED"
#define STR_DE_INVALID_WINDRVR_VERSION "INVALID WINDRIVER VERSION"
#define STR_DE_BAD_WINDRVR_BOARD_INIT "WINDRIVER BOARD INITIALIZATION FAILURE"
#define STR_DE_OPERATION_TIMED_OUT "OPERATION TIMED OUT"
#define STR_DE_INVALID_WINDRVR_KP "KERNEL PLUGIN INITIALIZATION FAILURE"
#define STR_DE_THREAD_FAILURE "THREAD INITIALIZATION FAILURE"
#define STR_DE_MUTEX_FAIL "MUTEX CREATION OR LOCKING OPERATION FAILED"
/*/////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////// Structures ///////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////// */
/*/////////
// SBSCB //
//////// */
struct SBSADTB
{
/*//////////////////////////////////////////////////////////
// These members are filled automatically by sbsInitBoard //
// THE USER DOES NOT HAVE TO FILL THESE IN MANUALLY //
///////////////////////////////////////////////////////// */
BYTE boardtype; /* Contains the boardtype constant */
// SBSB boardnum; /* The handle to the board */
/*///////////////////////////////////////////////////////////
// The user must fill in everything below that pertains to //
// board before the call to sbsInitBoard //
////////////////////////////////////////////////////////// */
WORD base_address; /* Base address of the board */
/*////////////////////////////////////////////////////
// Use int_level for boards with only one interrupt //
/////////////////////////////////////////////////// */
BYTE int_level; /* Interrupt level of the board */
/*////////////////////////////////////////////////////
// Use DMA for boards with only one DMA Channel //
/////////////////////////////////////////////////// */
BYTE DMA_level; /* DMA level of the board */
} ;
/*/////////////////
// SBSADSETTINGS //
//////////////// */
typedef struct
{
BYTE low_channel; /* INPUT: Low channel of the scan */
BYTE high_channel; /* INPUT: High channel of the scan */
BYTE sedi; /* INPUT: 0 = 差分模式, 1 = 单端模式*/
BYTE scnint; /* INPUT: 自动采样的时间间隔 0 = 9.3uS, 1 = 5.3uS, 2 = SCANEN=0*/
BYTE gain; /* INPUT: 0 = gain of 1, 1 = gain of 2, 2 = gain of 4, 3 = gain of 8 */
BYTE range; /* INPUT: 0 = 5V range, 1 = 10V range */
BYTE polarity; /* INPUT: 0 = bipolar, 1 = unipolar */
BYTE ADTrig; /* A/D转换触发方式配置:*/
/* 置"0"时为软件触发*/
/* 置"1"时为硬件触发,具体为计数/定时器2(OUT2)触发*/
/* 置"2"时为硬件触发,具体为外部触发*/
BYTE ADOutType; /* A/D转换结束的输出方式:*/
/* 0:直接读取*/
/* 1:FIFO*/
/* 2:DMA*/
BYTE load_cal; /* INPUT: 0 = do not load calibration values, 1 = load */
} SBSADSETTINGS;
typedef struct
{
BYTE range; /* INPUT: 0 = 5V range, 1 = 10V range */
BYTE polarity; /* INPUT: 0 = bipolar, 1 = unipolar */
} ADBRD_RG_PT;
/*/////////////
// ERRPARAMS //
//////////// */
typedef struct
{
BYTE ErrCode; /* OUTPUT: The numerical value of the last error */
char *errstring; /* OUTPUT: A string description of the last error */
} ERRPARAMS;
/*/////////////////
// SBSDASETTINGS //
//////////////// */
typedef struct
{
BYTE polarity; /* INPUT: 0 = BIPOLAR, 1 = UNIPOLAR */
BYTE range; /* INPUT: Absolute value of maximum voltage */
BYTE offset; /* OUTPUT: Difference between target and measured vals. */
BOOL AllToTogether; /* DA通道一起输出*/
BYTE load_cal; /* INPUT: 0 = FALSE, 1= TRUE. Loads calibration from eeprom */
} SBSDASETTINGS;
/*/////////
// SBSCLK //
//////// */
typedef struct
{
BYTE ClkFrq; /*定时器/计数器1的时钟频率, 0 = 10MHz, 1 = 1MHz*/
BYTE ClkDevNo; /* 82C54的编号*/
BYTE Clk1Mode; /* 时钟的类型*/
BYTE Clk2Mode; /**/
BYTE Clk3Mode; /**/
WORD Clk1Divisor; /*16位计数器/定时器的计数值*/
WORD Clk2Divisor; /**/
WORD Clk3Divisor; /**/
} SBSCLK;
/*/////////////
// SBSDDI/OINIT //
//////////// */
typedef struct
{
BYTE DIODevNo; /* 82C55的编号*/
BYTE DIOPort1RW; /* 0:Read 1:Write*/
BYTE DIOPort2RW; /* 0:Read 1:Write*/
BYTE DIOPort3RW; /* 0:Read 1:Write*/
} SBSDIOINT;
/*////////////
// SBSPWM //
/////////// */
typedef struct
{
FLOAT output_freq; /* Freq in Hz */
FLOAT duty_cycle; /* % of freq you want as duty cycle. Range 0-100 */
BYTE polarity; /* polarity of output pulse. 0 for active low, 1 for active high */
BYTE pwm_circuit; /* pwm circuit. Range 0-3 */
BOOL output_enab; /* 0 for disable, 1 for enable output */
} SBSPWM;
/************************************************************************/
/* Device name: ADT652 */
/* Device NO: 0 */
/************************************************************************/
/*#define START_CONVERSION 0
#define READ_AD_DATA_LSB 0
#define READ_AD_DATA_MSB 1
#define CHANNEL_RANGE 3
#define CHANNEL_NUMBER 100
#define CONFIG_AD_CHK 4
#define CONFIG_BYTE 4
#define STATUS_BUSY_INT 5
#define STATUS_BUSY_CHN 5
#define STATUS_BUSY_AD 8
#define ENABLE_IRQ 6
#define FIFO_RESET 7
#define WRITE_DA_DATA_LSB 1
#define WRITE_DA_DATA_MSB 2
#define WRITE_DA_MSB_OFFS 0
#define PARALLEL_ENABLE_DA 2
#define CLEAR_INT 5
#define FIFO_FLAG 7
#define PPI_0 8
#define PPI_1 9
#define PPI_2 10
#define PPI_CTRL 11
#define TIMER_0 12
#define TIMER_1 13
#define TIMER_2 14
#define TIMER_CTRL 15
BYTE START_CONVERSION = 0;
BYTE READ_AD_DATA_LSB = 0;
BYTE READ_AD_DATA_MSB = 1;
BYTE CHANNEL_RANGE = 3;
BYTE CHANNEL_NUMBER = 100;
BYTE CONFIG_AD_CHK = 4;
BYTE CONFIG_BYTE = 4;
BYTE STATUS_BUSY_INT = 5;
BYTE STATUS_BUSY_CHN = 5;
BYTE STATUS_BUSY_AD = 8;
BYTE ENABLE_IRQ = 6;
BYTE FIFO_RESET = 7;
BYTE WRITE_DA_DATA_LSB = 1;
BYTE WRITE_DA_DATA_MSB = 2;
BYTE WRITE_DA_MSB_OFFS = 0;
BYTE PARALLEL_ENABLE_DA = 2;
BYTE CLEAR_INT = 5;
BYTE FIFO_FLAG = 7;
BYTE PPI_0 =8;
BYTE PPI_1 =9;
BYTE PPI_2 =10;
BYTE PPI_CTRL =11;
BYTE TIMER_0 =12;
BYTE TIMER_1 =13;
BYTE TIMER_2 =14;
BYTE TIMER_CTRL =15;
*/
#define IOCTL_PORTIO_OPENPORT \
CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_PORTIO_READPORT \
CTL_CODE(FILE_DEVICE_UNKNOWN, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_PORTIO_WRITEPORT \
CTL_CODE(FILE_DEVICE_UNKNOWN, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_PORTIO_CLOSEPORT \
CTL_CODE(FILE_DEVICE_UNKNOWN, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SET_NOTIFICATION_EVENT(X) \
CTL_CODE(FILE_DEVICE_UNKNOWN, 6+X*2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_GET_INIT(X) \
CTL_CODE(FILE_DEVICE_UNKNOWN, 7+X*2, METHOD_BUFFERED, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////
//{{Add for Mul Card
#define IOCTL_NUMBER_INIT(X) \
CTL_CODE(FILE_DEVICE_UNKNOWN, X, METHOD_BUFFERED, FILE_ANY_ACCESS)
typedef struct _timestamp_t
{
LARGE_INTEGER ts_time;
ULONG ts_interrupt_count;
} TIMESTAMP, *PTIMESTAMP;
struct PORTOPENPARAMS
{
ULONG open_Address; // port address
ULONG open_PortSize; // 1=byte 2=word 3=long
ULONG open_PortCount; // number of ports in block
};
struct PORTREADPARAMS
{
ULONG rd_Handle;
ULONG rd_Index;
};
struct PORTWRITEPARAMS
{
ULONG wr_Handle;
ULONG wr_Index;
ULONG wr_Data;
};
struct PORTCLOSEPARAMS
{
ULONG close_Handle;
};
/*////////////////////
// MAX Broad number //
/////////////////// */
#define MAX_BROAD_NUMBER 256
#endif //_SHENZHEN_SBS_SBSADTDEF_H_INCLUDE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -