Table of Contents
Previous Chapter Chapter 9: Device Support Library
Include file devLib.h provides definitions for a library of routines useful for device and driver modules. These are a new addition to EPICS and are not yet used by all device/driver support modules. Until they are, the registration routines will not prevent addressing conflicts caused by multiple device/drivers trying to use the same VME addresses.
Definitions of Address Types
typedef enum {
atVMEA16,
atVMEA24,
atVMEA32,
atLast /* atLast must be the last enum in this list */
} epicsAddressType;
char *epicsAddressTypeName[]
= {
"VME A16",
"VME A24",
"VME A32"
};
int EPICStovxWorksAddrType[]
= {
VME_AM_SUP_SHORT_IO,
VME_AM_STD_SUP_DATA,
VME_AM_EXT_SUP_DATA
};
Register Address
long devRegisterAddress(
epicsAddressType addrType,
void *baseAddress,
unsigned size,
void **pLocalAddress);
This routine is called to register a VME address. This routine keeps a list of all VME addresses requested and returns an error message if an attempt is made to register any addresses that are already being used. *pLocalAddress is set equal to the address as seen by the caller.
Unregister Address
long devUnregisterAddress(
epicsAddressType addrType,
void *baseAddress);
This routine releases addresses previously registered by a call to devRegisterAddress.
Definitions of Interrupt Types
typedef enum {intCPU, intVME, intVXI} epicsInterruptType;
Connect
long devConnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)(),
void *parameter);
Disconnect
long devDisconnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber);
Enable Level
long devEnableInterruptLevel(
epicsInterruptType intType,
unsigned level);
Disable Level
long devDisableInterruptLevel(
epicsInterruptType intType,
unsigned level);
Normalized GetField
long devNormalizedGblGetField(
long rawValue,
unsigned nbits,
DBREQUEST *pdbrequest,
int pass,
CALLBACK *pcallback);
This routine is just like recGblGetField, except that if the request type is DBR_FLOAT or DBR_DOUBLE, the normalized value of rawValue is obtained, i.e. rawValue is converted to a value in the range 0.0<=value<.1.0
Convert Digital Value to a Normalized Double Value
#define devCreateMask(NBITS) ((1<<(NBITS))-1)
#define devDigToNml(DIGITAL,NBITS) \
(((double)(DIGITAL))/devCreateMask(NBITS))
Convert Normalized Double Value to a Digital Value
#define devNmlToDig(NORMAL,NBITS) \
(((long)(NORMAL)) * devCreateMask(NBITS))
Table of Contents
Next Chapter