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 };
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.
long devUnregisterAddress( epicsAddressType addrType, void *baseAddress);This routine releases addresses previously registered by a call to devRegisterAddress.
typedef enum {intCPU, intVME, intVXI} epicsInterruptType;
long devConnectInterrupt( epicsInterruptType intType, unsigned vectorNumber, void (*pFunction)(), void *parameter);
long devDisconnectInterrupt( epicsInterruptType intType, unsigned vectorNumber);
long devEnableInterruptLevel( epicsInterruptType intType, unsigned level);
long devDisableInterruptLevel( epicsInterruptType intType, unsigned level);
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
#define devCreateMask(NBITS) ((1<<(NBITS))-1) #define devDigToNml(DIGITAL,NBITS) \ (((double)(DIGITAL))/devCreateMask(NBITS))
#define devNmlToDig(NORMAL,NBITS) \ (((long)(NORMAL)) * devCreateMask(NBITS))
Table of Contents Next Chapter