1311 lines
49 KiB
C
1311 lines
49 KiB
C
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 416vxdio.h: device driver pci416.vxd and pci416.sys
|
|
// IO control function definitions
|
|
// Copyright (c) Datel, Inc. 1997, 98
|
|
// Platform: Win95, Win NT 4.0
|
|
// Compiler: MVC4.0 + DDK
|
|
// Version: 3.0
|
|
// Author: GS
|
|
// created: 2/28/97
|
|
// modified: 7/9/98
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//@doc
|
|
/* For other languages than C:
|
|
Examine the function definitions of this header file.
|
|
Use the corresponding number as defined in this header file to access the
|
|
proper function.
|
|
*/
|
|
#if defined (__cplusplus)
|
|
extern "C"
|
|
{
|
|
#endif
|
|
#ifndef _416VXDIO_H
|
|
#define _416VXDIO_H
|
|
|
|
/* Device driver IOCtl functions for NT */
|
|
|
|
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
|
|
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
|
|
)
|
|
|
|
#define METHOD_BUFFERED 0
|
|
#define METHOD_IN_DIRECT 1
|
|
#define METHOD_OUT_DIRECT 2
|
|
#define METHOD_NEITHER 3
|
|
|
|
#define FILE_ANY_ACCESS 0
|
|
#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
|
|
#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe
|
|
|
|
#define PCI416_TYPE 40010
|
|
|
|
|
|
// general pci functions
|
|
/******************************************************************************
|
|
Function FIND_PCI_DEVICE_Proc
|
|
Returns the device numbers for a given device on the PCI bus.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer points to an array of two DWORDs
|
|
The first array field contains the bus number. The second field
|
|
contains the VendorID in the lower and deviceID in the higher WORD
|
|
that the function searches for.
|
|
|
|
lpDIOCtl->lpvOutBuffer points to a 32 byte large array that holds the
|
|
device numbers found. The field after the last device number found has the
|
|
value 0x0ff.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
*******************************************************************************/
|
|
#define FIND_PCI_DEVICE_PROC 1
|
|
#define FIND_PCI_DEVICE_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x901, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function GET_PCI_DEVICE_INFO_Proc
|
|
Returns the PCI configuration space for a given device on the PCI bus.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(WORD*) lpDIOCtl->lpvInBuffer points to an array of two WORDs
|
|
The first array field contains the bus number. The second field
|
|
contains the device ID as returned by FIND_PCI_DEVICE_Proc.
|
|
|
|
lpDIOCtl->lpvOutBuffer points to a PCI_TYPE_CONFIG structure that
|
|
will take the return data of the PCI configuration space.
|
|
The size of the structure has to be at least 64 bytes, but
|
|
no more than 260 bytes.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
*******************************************************************************/
|
|
#define GET_PCI_DEVICE_INFO_PROC 2
|
|
#define GET_PCI_DEVICE_INFO_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x902, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function WRITE_PCI_PORT_PROC
|
|
Writes a DWORD (4 Bytes) to an output port
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer points to an array of two DWORDs
|
|
The first array field contains the port address. The second field
|
|
contains the value to be written.
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! W A R N I N G !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
This function does NOT check if the input values as well as the
|
|
size of the input buffer (lpDIOCtl->lpvInBuffer) are valid!
|
|
Not valid values may cause system crashes!
|
|
If this function is used to perform operations on write only registers their
|
|
software shadow register will become invalid. Software shadow registers keep track
|
|
of the status of the write only registers.
|
|
|
|
lpDIOCtl->lpvOutBuffer : should be zero
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
*******************************************************************************/
|
|
#define WRITE_PCI_PORT_PROC 3
|
|
#define WRITE_PCI_PORT_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x903, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function READ_PCI_PORT_PROC
|
|
Reads a DWORD (4 Bytes) from an input port.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer contains the port address.
|
|
(DWORD*) lpDIOCtl->lpvOutBuffer : takes the value read from the port.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! W A R N I N G !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
This function does NOT check if the input values (the port address) is valid.
|
|
Not valid values may cause system crashes!
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
*******************************************************************************/
|
|
#define READ_PCI_PORT_PROC 4
|
|
#define READ_PCI_PORT_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x904, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
// specific pci416 functions
|
|
// misc. functions
|
|
|
|
/******************************************************************************
|
|
Function PCI416_COUNT_PROC
|
|
Returns the number of PCI416 Boards
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
lpDIOCtl->lpvInBuffer: should be 0
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer : holds the number of boards
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
*******************************************************************************/
|
|
#define PCI416_COUNT_PROC 5
|
|
#define PCI416_COUNT_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x905, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_GET_CM_DEVNODES_PROC
|
|
Returns the DEVNODEs assigned by the Configuration Manager for PCI416 Boards
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(INT*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
Values:
|
|
-1 : The devnodes of all the PCI416 boards
|
|
are returned in lpDIOCtl->lpvOutBuffer.
|
|
n>=0 : The devnode of the board with index n is
|
|
returned in lpDIOCtl->lpvOutBuffer.
|
|
|
|
|
|
|
|
lpDIOCtl->lpvOutBuffer points to a DWORD array that
|
|
will take the devnode values.
|
|
|
|
If lpDIOCtl->lpvInBuffer contains -1 the size of the array pointed by
|
|
lpDIOCtl->lpvOutBuffer must be large enough to hold all the devnodes.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST
|
|
ERROR_INSUFFICIENT_BUFFER
|
|
*******************************************************************************/
|
|
#define PCI416_GET_CM_DEVNODES_PROC 6
|
|
#define PCI416_GET_CM_DEVNODES_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x906, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS) // not implemented in NT
|
|
/******************************************************************************
|
|
Function PCI416_GET_CMDEVINF_PROC
|
|
Returns the PCI configuration space information of the PCI416 Boards
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
lpDIOCtl->lpvOutBuffer points to a PCI_TYPE_CONFIG structure that
|
|
will take the return data of the PCI configuration space.
|
|
The size of the structure has to be at least 64 bytes, but
|
|
no more than 260 bytes.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : no PCI416 board found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_HANDLE : CM devnode not found
|
|
ERROR_GEN_FAILURE : Device is not functioning.
|
|
ERROR_INVALID_DATA : invalid pointer to out buffer or other
|
|
API function return error
|
|
*******************************************************************************/
|
|
#define PCI416_GET_CMDEVINF_PROC 7
|
|
#define PCI416_GET_CMDEVINF_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x907, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS) // not implemented in NT
|
|
/******************************************************************************
|
|
Function PCI416_GET_BADR_PROC
|
|
Returns base address array of the given PCI416 board.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(WORD*)lpDIOCtl->lpvOutBuffer: array of 6 WORDs that take base address values
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_GET_BADR_PROC 8
|
|
#define PCI416_GET_BADR_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x908, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_GETCAPS_Proc
|
|
Returns the Device capabilities (FIFO size, DMA buffer size,
|
|
type of ADM module, acquisition mode.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: array of 4 DWORDs that take the device info
|
|
DWORD sizeFIFO;
|
|
DWORD bufsizeDMA;
|
|
DWORD indexADM;
|
|
DWORD acqmode;
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_CANTREAD : can't read registry
|
|
*******************************************************************************/
|
|
#define PCI416_GETCAPS_PROC 9
|
|
#define PCI416_GETCAPS_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x909, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
|
|
|
|
// pci416 register access functions
|
|
|
|
/******************************************************************************
|
|
Function PCI416_SET_CMDREG_PROC
|
|
Writes to the PCI416 command register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of two DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the write mode.
|
|
(0 = overwrite, 1= OR, 2 = AND)
|
|
The third field holds the value to be written
|
|
to the command register.
|
|
DWORD index
|
|
DWORD mode
|
|
DWORD cmdval
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: returns the current value of the shadow cmd. reg.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
*******************************************************************************/
|
|
#define PCI416_SET_CMDREG_PROC 10
|
|
#define PCI416_SET_CMDREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x90a, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
/******************************************************************************
|
|
Function PCI416_READ_STATUSREG_PROC
|
|
Reads the PCI416 Status register.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: holds the return lower word
|
|
of the 32bit status register
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_READ_STATUSREG_PROC 11
|
|
#define PCI416_READ_STATUSREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x90b, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
|
|
/******************************************************************************
|
|
Function PCI416_SET_SMPLCNTR_PROC
|
|
Writes to the PCI416 sample counter register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of two DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the value to be written
|
|
to the sample counter register.
|
|
Note: write samples-1 to the register
|
|
e.g 1024 samples -> write 1023
|
|
DWORD index
|
|
DWORD regval
|
|
|
|
lpDIOCtl->lpvOutBuffer: should be 0
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_SET_SMPLCNTR_PROC 12
|
|
#define PCI416_SET_SMPLCNTR_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x90C, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_SET_CHANADR_PROC
|
|
Writes to the PCI416 channel address register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of three DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the write mode.
|
|
(0 = overwrite, 1= OR, 2 = AND)
|
|
The third field holds the value to be written
|
|
to the register.
|
|
DWORD index
|
|
DWORD mode
|
|
DWORD regval
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: returns the current value of the shadow reg.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
*******************************************************************************/
|
|
#define PCI416_SET_CHANADR_PROC 13
|
|
#define PCI416_SET_CHANADR_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x90D, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_CLEAR_FIFO_PROC
|
|
Resets the A/D FIFO.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: should be zero
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
*******************************************************************************/
|
|
#define PCI416_CLEAR_FIFO_PROC 14
|
|
#define PCI416_CLEAR_FIFO_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x90e, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_ENABLEAD_PROC
|
|
Writes to the PCI416 A/D convert enable register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of two DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
If the value of second field 0 the A/D conversion
|
|
will be disabled otherwise enabled.
|
|
DWORD index
|
|
DWORD regval -> 0 disable, all other enable
|
|
|
|
lpDIOCtl->lpvOutBuffer: should be 0
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
*******************************************************************************/
|
|
#define PCI416_ENABLEAD_PROC 15
|
|
#define PCI416_ENABLEAD_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x90f, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
/******************************************************************************
|
|
Function PCI416_SET_PLLREG_PROC
|
|
Writes to the PCI416 PLL data register to set the output frequency of the
|
|
frequency synthesizer.
|
|
This function will cycle through the 3 counters and
|
|
set each counter value.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of 3 DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The next two field hold the data to be written
|
|
to the A and N counter.
|
|
DWORD index
|
|
DWORD valA
|
|
DWORD valN
|
|
|
|
lpDIOCtl->lpvOutBuffer: should be 0
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_SET_PLLREG_PROC 16
|
|
#define PCI416_SET_PLLREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x910, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_READ_FIFO_PROC
|
|
Reads a block of data from the FIFO.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of two DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field contains the number of samples
|
|
to be read. If count is larger than the FIFO size
|
|
the whole FIFO will be read.
|
|
DWORD index
|
|
DWORD count
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Array of count/2 DWORDs that takes the FIFO data.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_READ_FIFO_PROC 17
|
|
#define PCI416_READ_FIFO_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x911, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_SETTIMER_PROC
|
|
Programs the 82C54 Timer
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of 4 DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The next three fields hold the mode, the counter
|
|
selector and the counter values to be set.
|
|
DWORD index
|
|
DWORD mode
|
|
DWORD counter02
|
|
DWORD counter1
|
|
Note!
|
|
Mode has to be one of the values as defined in timer.h
|
|
TM_SINGLE_TRIGGER, generate a single internal trigger
|
|
TM_CONT_TRIGGER, generate continious internal trigger
|
|
TM_RESET_TRIGGER, reset (disable) trigger
|
|
TM_ADCLOCK set counter 2 for A/D clock
|
|
counter02 holds the counter value for counter 0 or 2 in TM_ADCLOCK mode
|
|
counter1 holds the counter value for counter 1 (not used in TM_ADCLOCK mode)
|
|
Counter values smaller than 2 will be set to 2 and values larger than 0xFFFF will
|
|
be set to 0xFFFF.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: should be 0
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
*******************************************************************************/
|
|
#define PCI416_SETTIMER_PROC 18
|
|
#define PCI416_SETTIMER_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x912, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
/******************************************************************************
|
|
Function PCI416_SET_PORTCTRREG_PROC
|
|
Sets the 82C55 port control register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of two DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the register value to
|
|
be written.
|
|
DWORD index
|
|
DWORD regval
|
|
|
|
lpDIOCtl->lpvOutBuffer: should be 0
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_SET_PORTCTRREG_PROC 19
|
|
#define PCI416_SET_PORTCTRREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x913, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_GET_PORTCTRREG_PROC
|
|
Reads the 82C55 port control register back
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the register value to
|
|
be written.
|
|
DWORD index
|
|
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: holds the return value
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
*******************************************************************************/
|
|
#define PCI416_GET_PORTCTRREG_PROC 20
|
|
#define PCI416_GET_PORTCTRREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x914, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_READ_PORT_PROC
|
|
Reads from one of the 82C55 ports
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of two DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds port to be read.
|
|
DWORD index
|
|
DWORD port (0==A, 1==B, 2==C)
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: holds the return data.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong port
|
|
*******************************************************************************/
|
|
#define PCI416_READ_PORT_PROC 21
|
|
#define PCI416_READ_PORT_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x915, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_WRITE_PORT_PROC
|
|
Writes to one of the 82C55 ports
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of 3 DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds port to be read and the
|
|
third field contains the data.
|
|
DWORD index
|
|
DWORD port (0==A, 1==B, 2==C)
|
|
DWORD data
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: should be 0.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong port
|
|
*******************************************************************************/
|
|
#define PCI416_WRITE_PORT_PROC 22
|
|
#define PCI416_WRITE_PORT_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x916, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_WRITE_DAC_PROC
|
|
Sets the D/A converter register.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of two DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds port to be read.
|
|
DWORD index
|
|
DWORD data
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: should be 0.
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_WRITE_DAC_PROC 23
|
|
#define PCI416_WRITE_DAC_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x917, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
// FIFO polling functions
|
|
|
|
/******************************************************************************
|
|
Function PCI416_FIFO_STATUS_PROC
|
|
Reads the PCI416 FIFO status (bits 13-15 status reg).
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: holds the FIFO status bits
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_FIFO_STATUS_PROC 24
|
|
#define PCI416_FIFO_STATUS_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x918, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_CHECK_FIFOHF_PROC
|
|
Reads the PCI416 Half Full FIFO flag (bit 14 status reg).
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: holds the flag (0= FIFO is half full or greater)
|
|
(1= FIFO is less than half full)
|
|
|
|
lpDIOCtl->lpcbBytesReturned : not used, should be NULL
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_CHECK_FIFOHF_PROC 25
|
|
#define PCI416_CHECK_FIFOHF_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x919, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
// DMA functions
|
|
/******************************************************************************
|
|
Function PCI416_SETUP_DMA_Proc
|
|
Setup DMA.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of (3)4 DWORDs that contain the index of
|
|
the board, the requested DMA buffer size and
|
|
the number of samples per trigger. The order
|
|
of the boards is determind by the Windows 95
|
|
Configuration Manager.
|
|
If the requested size for the DMA buffers is
|
|
larger than the size of the buffer allocated
|
|
during bootup the allocated buffer size will
|
|
be used. The first bufsize field is used as
|
|
MWTC count.
|
|
If mode is DMA_SINGLE one buffer is set up for
|
|
DMA operation. In DMA_DOUBLE mode two buffers
|
|
are set up that can be used as ping-pong
|
|
buffers. If the sum of the requested buffer
|
|
size is larger than the allocated buffer size
|
|
the second buffer will be truncated.
|
|
DWORD index
|
|
DWORD mode;
|
|
DWORD bufsize[n]
|
|
n=1 if mode = DMA_SINGLE
|
|
n=2 if mode = DMA_DOUBLE
|
|
|
|
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Array of (3)4 DWORDs that contain
|
|
the DMA buffer info.
|
|
DWORD hndDMAbuf : handle to first DMA buffer
|
|
DWORD physAdrDMAbuf : physical address of DMA
|
|
buffer
|
|
DWORD bufsizeDMA[n] : size of DMA buffer(s)
|
|
used
|
|
n=1 if mode = DMA_SINGLE
|
|
n=2 if mode = DMA_DOUBLE
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes returned.
|
|
(== sizeof(lpDIOCtl->lpvOutBuffer))
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
ERROR_INVALID_HANDLE : memory handle is invalid
|
|
******************************************************************************/
|
|
#define PCI416_SETUP_DMA_PROC 26
|
|
#define PCI416_SETUP_DMA_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x91A, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_STOP_DMA_PROC
|
|
Stops DMA without disabeling A/D conversion!
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: If the buffer is not zero it will hold the
|
|
value of the transfer count register (MWTC)
|
|
at the time the DMA transfer was stopped.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
*******************************************************************************/
|
|
#define PCI416_STOP_DMA_PROC 27
|
|
#define PCI416_STOP_DMA_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x91B, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_RELOAD_DMA_PROC
|
|
Reloads the DMA transfer count and start address!
|
|
|
|
Parameters:
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of 2 DWORDS
|
|
DWORD index : Index of the board. The order of
|
|
the boards is determind by the
|
|
Windows 95 Configuration
|
|
Manager.
|
|
DWORD bufno : Valid values are 0 and 1
|
|
Selects which buffer to reload
|
|
for DMA op.
|
|
If mode is DMA_SINGLE bufno has
|
|
no effect.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Array of 3 DWORDs that contain
|
|
the DMA buffer info.
|
|
DWORD hndDMAbuf : handle to DMA buffer
|
|
DWORD physAdrDMAbuf : physical address of DMA
|
|
buffer
|
|
DWORD bufsizeDMA : size of DMA buffer
|
|
used
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_RELOAD_DMA_PROC 28
|
|
#define PCI416_RELOAD_DMA_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x91C, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_DMA_STATUS_PROC
|
|
Reads the PCI416 controller interrupt control/status register ->
|
|
DMA transfer status bit (bit18)
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Contains the index of the board. The order of the
|
|
boards is determind by the Windows 95 Configuration
|
|
Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: holds the DMA transfer status bits
|
|
(1= interrupt generated-> transfer complete
|
|
0= Bus Master op. in progress)
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_DMA_STATUS_PROC 29
|
|
#define PCI416_DMA_STATUS_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x91D, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_READ_INTCSRREG_PROC
|
|
Reads the PCI controller interrupt control/status register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: DWORD that contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Return value of the register.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_READ_INTCSRREG_PROC 30
|
|
#define PCI416_READ_INTCSRREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x91E, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_SET_INTCSRREG_PROC
|
|
Writes to the PCI controller interrupt control/status register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of three DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the write mode+ read back
|
|
option.
|
|
(0 = overwrite, 1= OR, 2 = AND
|
|
+ 0x80 to enable read back actual register
|
|
e.g. mode = 0x81 -> write register using OR op.
|
|
and then read register back)
|
|
The third field holds the value to be written
|
|
to the register.
|
|
DWORD index
|
|
DWORD mode
|
|
DWORD regval
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: returns the current value of the shadow reg.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
*******************************************************************************/
|
|
#define PCI416_SET_INTCSRREG_PROC 31
|
|
#define PCI416_SET_INTCSRREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x91F, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_READ_MCSRREG_PROC
|
|
Reads the PCI controller bus master control/status register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: DWORD that contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Return value of the register.
|
|
The value returned also contains the control
|
|
bits (8-31) that are saved in a shadow register
|
|
by the device driver.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_READ_MCSRREG_PROC 32
|
|
#define PCI416_READ_MCSRREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x920, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_SET_MCSRREG_PROC
|
|
Writes to the PCI controller bus master control/status register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of three DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the write mode+ read back
|
|
option.
|
|
(0 = overwrite, 1= OR, 2 = AND
|
|
+ 0x80 to enable read back actual register
|
|
e.g. mode = 0x81 -> write register using OR op.
|
|
and then read register back)
|
|
The third field holds the value to be written
|
|
to the register.
|
|
DWORD index
|
|
DWORD mode
|
|
DWORD regval
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: returns the current value of the shadow reg.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
*******************************************************************************/
|
|
#define PCI416_SET_MCSRREG_PROC 33
|
|
#define PCI416_SET_MCSRREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x921, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_COPY_DMABUFFER_PROC
|
|
Copy DMA buffer to another buffer.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of 4 DWORDs
|
|
DWORD index : Index of the board. The order of
|
|
the boards is determind by the
|
|
Windows 95 Configuration
|
|
Manager.
|
|
DWORD bufno : Valid values are 0 and 1
|
|
Selects which buffer to copy.
|
|
If mode is DMA_SINGLE bufno has
|
|
no effect.
|
|
DWORD start : start byte
|
|
DWORD count : number of bytes to copy
|
|
|
|
If start is larger than the size of the
|
|
selected buffer no data are copied and the
|
|
function returns ERROR_INVALID_HANDLE.
|
|
If start+count larger the size of the
|
|
selected buffer only the remaining byte
|
|
will be copied.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: DWORD hnddestbuf : Handle to the
|
|
desitination buffer.
|
|
The size of the
|
|
destination buffer
|
|
must be at least count
|
|
bytes!
|
|
|
|
lpDIOCtl->lpcbBytesReturned : If not NULL holds the bytes copied.
|
|
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_HANDLE : memory handle is invalid
|
|
*******************************************************************************/
|
|
#define PCI416_COPY_DMABUFFER_PROC 34
|
|
#define PCI416_COPY_DMABUFFER_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x922, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_GET_DMABUF_HNDL_PROC
|
|
Returns the handle and size of the selected DMA buffer.
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of 3 DWORDs
|
|
DWORD index : Index of the board. The order of
|
|
the boards is determind by the
|
|
Windows 95 Configuration
|
|
Manager.
|
|
DWORD bufno : Valid values are 0 and 1
|
|
Selects which buffer to copy.
|
|
If mode is DMA_SINGLE bufno has
|
|
no effect.
|
|
DWORD offset: Offset of handle to be returned.
|
|
If offset is larger than the size of
|
|
the allocated buffer ERROR_INVALID_HANDLE
|
|
will be returned and hnddestbuf is
|
|
set to NULL.
|
|
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Array of 2 DWORDs
|
|
DWORD hndbuf : Handle to the
|
|
DMA buffer positioned
|
|
at the offset byte.
|
|
|
|
DWORD bufsize : Size of the DMA buffer - offset.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_HANDLE : memory handle is invalid
|
|
*******************************************************************************/
|
|
#define PCI416_GET_DMABUF_HNDL_PROC 35
|
|
#define PCI416_GET_DMABUF_HNDL_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x923, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_READ_MWARREG_PROC
|
|
Reads the PCI controller bus master write address register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: DWORD that contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Return value of the register.
|
|
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_READ_MWARREG_PROC 36
|
|
#define PCI416_READ_MWARREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x924, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_SET_MWARREG_PROC
|
|
Writes to the PCI controller bus master control/status register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of three DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the write mode+ read back
|
|
option.
|
|
(0 = overwrite, 1= OR, 2 = AND)
|
|
The third field holds the value to be written
|
|
to the register.
|
|
DWORD index
|
|
DWORD mode
|
|
DWORD regval
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: returns the current value of the shadow reg.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
*******************************************************************************/
|
|
#define PCI416_SET_MWARREG_PROC 37
|
|
#define PCI416_SET_MWARREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x925, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
/******************************************************************************
|
|
Function PCI416_READ_MWTCREG_PROC
|
|
Reads the PCI controller bus master write transfer count register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: DWORD that contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: Return value of the register.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
*******************************************************************************/
|
|
#define PCI416_READ_MWTCREG_PROC 38
|
|
#define PCI416_READ_MWTCREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x926, METHOD_BUFFERED, FILE_READ_ACCESS)
|
|
/******************************************************************************
|
|
Function PCI416_SET_MWTCREG_PROC
|
|
Writes to the PCI controller bus master write transfer count register
|
|
|
|
Parameters:
|
|
LPDIOC lpDIOCtl pointer to DIOCPARAMETERS data structure.
|
|
|
|
(DWORD*) lpDIOCtl->lpvInBuffer: Array of three DWORDs.
|
|
The first field contains the index of the board.
|
|
The order of the boards is determind by the
|
|
Windows 95 Configuration Manager.
|
|
The second field holds the write mode+ read back
|
|
option.
|
|
(0 = overwrite, 1= OR, 2 = AND)
|
|
The third field holds the value to be written
|
|
to the register.
|
|
DWORD index
|
|
DWORD mode
|
|
DWORD regval
|
|
|
|
(DWORD*)lpDIOCtl->lpvOutBuffer: returns the current value of the shadow reg.
|
|
|
|
Return value:
|
|
Error codes as defined in winerror.h
|
|
NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_INSUFFICIENT_BUFFER : invalid size of in/out buffer
|
|
ERROR_INVALID_PARAMETER : wrong mode
|
|
*******************************************************************************/
|
|
#define PCI416_SET_MWTCREG_PROC 39
|
|
#define PCI416_SET_MWTCREG_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x927, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
|
|
/******************************************************************************
|
|
@func pci416_dma_pause_resume
|
|
|
|
@parm Index of board. Max. index = number of PCI-441 boards - 1
|
|
@parm flags : 0 = resume 1 = pause
|
|
|
|
@rdesc NOERROR
|
|
ERROR_DEV_NOT_EXIST : PCI416 board not found
|
|
ERROR_SERVICE_REQUEST_TIMEOUT : time out accessing dma logic
|
|
@comm Pauses/ Resumes DMA
|
|
*******************************************************************************/
|
|
#define PCI416_PAUSE_RESUME_DMA_PROC 40
|
|
#define PCI416_PAUSE_RESUME_DMA_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x928, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
// NT only
|
|
/******************************************************************************
|
|
@func PCI416_START_DMA
|
|
|
|
@parm Array of two DWORDs:
|
|
TRGMODE: 0== PreTrigger, external trigger,
|
|
1== Single Internal Trigger,
|
|
|
|
BRDINDEX:Index of board. Max. index = number of PCI-416 boards - 1
|
|
|
|
|
|
@rdesc NOERROR,
|
|
ERROR_DEV_NOT_EXIST, : PCI416 board not found
|
|
ERROR_SERVICE_REQUEST_TIMEOUT : time out accessing dma logic
|
|
@comm start DAQ asynchronously (Windows NT only)
|
|
*******************************************************************************/
|
|
#define PCI416_START_DMA_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x929, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
/******************************************************************************
|
|
@func PCI416_CLOSE_DMAHNDL_PROC_NT
|
|
|
|
@rdesc NOERROR,
|
|
ERROR_DEV_NOT_EXIST, : PCI416 board not found
|
|
|
|
@comm Close DMA handle opend with SETUP_DMA
|
|
Windows NT only
|
|
*******************************************************************************/
|
|
#define PCI416_CLOSE_DMAHNDL_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x92A, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
/******************************************************************************
|
|
@func PCI416_MAP_MEMORY_PROC_NT
|
|
|
|
@parm : Array of two DWORDs:
|
|
param[0] returns handle to beginning of DMA buffer
|
|
param[1] size of mapped buffer
|
|
|
|
|
|
@rdesc NOERROR,
|
|
ERROR_DEV_NOT_EXIST, : PCI416 board not found
|
|
|
|
@comm Maps portion of the DMA buffer into user space
|
|
Windows NT only
|
|
*******************************************************************************/
|
|
#define PCI416_MAP_MEMORY_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x92B, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
/******************************************************************************
|
|
@func PCI416_UNMAP_MEMORY_PROC_NT
|
|
|
|
@parm : DWORD HANDLE : handle to be unmapped
|
|
|
|
@rdesc NOERROR,
|
|
ERROR_DEV_NOT_EXIST, : PCI416 board not found
|
|
|
|
@comm Unmaps mapped DMA buffer space
|
|
Windows NT only
|
|
*******************************************************************************/
|
|
#define PCI416_UNMAP_MEMORY_PROC_NT \
|
|
CTL_CODE(PCI416_TYPE, 0x92C, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
|
|
|
|
#if defined (__cplusplus)
|
|
}
|
|
#endif
|
|
#endif |