dxp 3-0
Public Member Functions | Protected Attributes
asynNDArrayDriver Class Reference

This is the class from which NDArray drivers are derived; implements the asynGenericPointer functions for NDArray objects. More...

#include <asynNDArrayDriver.h>

Inheritance diagram for asynNDArrayDriver:
asynPortDriver NDDxp

List of all members.

Public Member Functions

 asynNDArrayDriver (const char *portName, int maxAddr, int numParams, int maxBuffers, size_t maxMemory, int interfaceMask, int interruptMask, int asynFlags, int autoConnect, int priority, int stackSize)
 This is the constructor for the asynNDArrayDriver class.
virtual asynStatus writeOctet (asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual)
 Called when asyn clients call pasynOctet->write().
virtual asynStatus readGenericPointer (asynUser *pasynUser, void *genericPointer)
 This method copies an NDArray object from the asynNDArrayDriver to an NDArray pointer passed in by the caller.
virtual asynStatus writeGenericPointer (asynUser *pasynUser, void *genericPointer)
 This method currently does nothing, but it should be implemented in this base class.
virtual void report (FILE *fp, int details)
 Report status of the driver.
virtual int checkPath ()
 Checks whether the directory specified NDFilePath parameter exists.
virtual int createFileName (int maxChars, char *fullFileName)
 Build a file name from component parts.
virtual int createFileName (int maxChars, char *filePath, char *fileName)
 Build a file name from component parts.
virtual int readNDAttributesFile (const char *fileName)
 Create this driver's NDAttributeList (pAttributeList) by reading an XML file.
virtual int getAttributes (NDAttributeList *pAttributeList)
 Get the current values of attributes from this driver and appends them to an output attribute list.

Protected Attributes

int NDPortNameSelf
int NDArraySizeX
int NDArraySizeY
int NDArraySizeZ
int NDArraySize
int NDNDimensions
int NDDimensions
int NDDataType
int NDColorMode
int NDUniqueId
int NDTimeStamp
int NDBayerPattern
int NDArrayCounter
int NDFilePath
int NDFilePathExists
int NDFileName
int NDFileNumber
int NDFileTemplate
int NDAutoIncrement
int NDFullFileName
int NDFileFormat
int NDAutoSave
int NDWriteFile
int NDReadFile
int NDFileWriteMode
int NDFileNumCapture
int NDFileNumCaptured
int NDFileCapture
int NDFileDeleteDriverFile
int NDAttributesFile
int NDArrayData
int NDArrayCallbacks
NDArray ** pArrays
 An array of NDArray pointers used to store data in the driver.
NDArrayPool * pNDArrayPool
 An NDArrayPool object used to allocate and manipulate NDArray objects.
class NDAttributeList * pAttributeList
 An NDAttributeList object used to obtain the current values of a set of attributes.

Detailed Description

This is the class from which NDArray drivers are derived; implements the asynGenericPointer functions for NDArray objects.

For areaDetector, both plugins and detector drivers are indirectly derived from this class. asynNDArrayDriver inherits from asynPortDriver.


Constructor & Destructor Documentation

asynNDArrayDriver::asynNDArrayDriver ( const char *  portName,
int  maxAddr,
int  numParams,
int  maxBuffers,
size_t  maxMemory,
int  interfaceMask,
int  interruptMask,
int  asynFlags,
int  autoConnect,
int  priority,
int  stackSize 
)

This is the constructor for the asynNDArrayDriver class.

portName, maxAddr, paramTableSize, interfaceMask, interruptMask, asynFlags, autoConnect, priority and stackSize are simply passed to asynPortDriver::asynPortDriver. asynNDArrayDriver creates an NDArrayPool object to allocate NDArray objects. maxBuffers and maxMemory are passed to NDArrayPool::NDArrayPool.

Parameters:
[in]portNameThe name of the asyn port driver to be created.
[in]maxAddrThe maximum number of asyn addr addresses this driver supports. 1 is minimum.
[in]numParamsThe number of parameters in the derived class.
[in]maxBuffersThe maximum number of NDArray buffers that the NDArrayPool for this driver is allowed to allocate. Set this to -1 to allow an unlimited number of buffers.
[in]maxMemoryThe maximum amount of memory that the NDArrayPool for this driver is allowed to allocate. Set this to -1 to allow an unlimited amount of memory.
[in]interfaceMaskBit mask defining the asyn interfaces that this driver supports.
[in]interruptMaskBit mask definining the asyn interfaces that can generate interrupts (callbacks)
[in]asynFlagsFlags when creating the asyn port driver; includes ASYN_CANBLOCK and ASYN_MULTIDEVICE.
[in]autoConnectThe autoConnect flag for the asyn port driver.
[in]priorityThe thread priority for the asyn port driver thread if ASYN_CANBLOCK is set in asynFlags.
[in]stackSizeThe stack size for the asyn port driver thread if ASYN_CANBLOCK is set in asynFlags.

Member Function Documentation

int asynNDArrayDriver::checkPath ( ) [virtual]

Checks whether the directory specified NDFilePath parameter exists.

This is a convenience function that determinesthe directory specified NDFilePath parameter exists. It sets the value of NDFilePathExists to 0 (does not exist) or 1 (exists). It also adds a trailing '/' character to the path if one is not present. Returns a error status if the directory does not exist.

int asynNDArrayDriver::createFileName ( int  maxChars,
char *  fullFileName 
) [virtual]

Build a file name from component parts.

Parameters:
[in]maxCharsThe size of the fullFileName string.
[out]fullFileNameThe constructed file name including the file path.

This is a convenience function that constructs a complete file name from the NDFilePath, NDFileName, NDFileNumber, and NDFileTemplate parameters. If NDAutoIncrement is true then it increments the NDFileNumber after creating the file name.

int asynNDArrayDriver::createFileName ( int  maxChars,
char *  filePath,
char *  fileName 
) [virtual]

Build a file name from component parts.

Parameters:
[in]maxCharsThe size of the fullFileName string.
[out]filePathThe file path.
[out]fileNameThe constructed file name without file file path.

This is a convenience function that constructs a file path and file name from the NDFilePath, NDFileName, NDFileNumber, and NDFileTemplate parameters. If NDAutoIncrement is true then it increments the NDFileNumber after creating the file name.

int asynNDArrayDriver::getAttributes ( NDAttributeList *  pList) [virtual]

Get the current values of attributes from this driver and appends them to an output attribute list.

Calls NDAttributeList::updateValues for this driver's attribute list, and then NDAttributeList::copy, to copy this driver's attribute list to pList, appending the values to that output attribute list.

Parameters:
[out]pListThe NDAttributeList to copy the attributes to.

NOTE: Plugins must never call this function with a pointer to the attribute list from the NDArray they were passed in NDPluginDriver::processCallbacks, because that modifies the original NDArray which is forbidden.

asynStatus asynNDArrayDriver::readGenericPointer ( asynUser *  pasynUser,
void *  genericPointer 
) [virtual]

This method copies an NDArray object from the asynNDArrayDriver to an NDArray pointer passed in by the caller.

The destination NDArray address is passed by the caller in the genericPointer argument. The caller must allocate the memory for the array, and pass the size in NDArray->dataSize. The method will limit the amount of data copied to the actual array size or the input dataSize, whichever is smaller.

Parameters:
[in]pasynUserUsed to obtain the addr for the NDArray to be copied from, and for asynTrace output.
[out]genericPointerPointer to an NDArray. The NDArray must have been previously allocated by the caller. The NDArray from the asynNDArrayDriver will be copied into the NDArray pointed to by genericPointer.

Reimplemented from asynPortDriver.

int asynNDArrayDriver::readNDAttributesFile ( const char *  fileName) [virtual]

Create this driver's NDAttributeList (pAttributeList) by reading an XML file.

Parameters:
[in]fileNameThe name of the XML file to read.

This clears any existing attributes from this drivers' NDAttributeList and then creates a new list based on the XML file. These attributes can then be associated with an NDArray by calling asynNDArrayDriver::getAttributes() passing it pNDArray->pAttributeList.

The following simple example XML file illustrates the way that both PVAttribute and paramAttribute attributes are defined.

 <?xml version="1.0" standalone="no" ?>
 <Attributes>
 <Attribute name="AcquireTime"         type="EPICS_PV" source="13SIM1:cam1:AcquireTime"      dbrtype="DBR_NATIVE"  description="Camera acquire time"/>
 <Attribute name="CameraManufacturer"  type="PARAM"    source="MANUFACTURER"                 datatype="STRING"     description="Camera manufacturer"/>
 </Attributes>
 

Each NDAttribute (currently either an PVAttribute or paramAttribute, but other types may be added in the future) is defined with an XML Attribute tag. For each attribute there are a number of XML attributes (unfortunately there are 2 meanings of attribute here: the NDAttribute and the XML attribute). XML attributes have the syntax name="value". The XML attribute names are case-sensitive and must be lower case, i.e. name="xxx", not NAME="xxx". The XML attribute values are specified by the XML Schema and are always uppercase for datatype and dbrtype attributes. The XML attribute names are listed here:

name determines the name of the NDAttribute. It is required, must be unique, is case-insensitive, and must start with a letter. It can include only letters, numbers and underscore. (No whitespace or other punctuation.)

type determines the type of the NDAttribute. "EPICS_PV" creates a PVAttribute, while "PARAM" creates a paramAttribute. The default is EPICS_PV if this XML attribute is absent.

source determines the source of the NDAttribute. It is required. If type="EPICS_PV" then this is the name of the EPICS PV, which is case-sensitive. If type="PARAM" then this is the drvInfo string that is used in EPICS database files (e.g. ADBase.template) to identify this parameter.

dbrtype determines the data type that will be used to read an EPICS_PV value with channel access. It can be one of the standard EPICS DBR types (e.g. "DBR_DOUBLE", "DBR_STRING", ...) or it can be the special type "DBR_NATIVE" which means to use the native channel access data type for this PV. The default is DBR_NATIVE if this XML attribute is absent. Always use uppercase.

datatype determines the parameter data type for type="PARAM". It must match the actual data type in the driver or plugin parameter library, and must be "INT", "DOUBLE", or "STRING". The default is "INT" if this XML attribute is absent. Always use uppercase.

addr determines the asyn addr (address) for type="PARAM". The default is 0 if the XML attribute is absent.

description determines the description for this attribute. It is not required, and the default is a NULL string.

void asynNDArrayDriver::report ( FILE *  fp,
int  details 
) [virtual]

Report status of the driver.

This method calls the report function in the asynPortDriver base class. It then calls the NDArrayPool::report() method if details >5.

Parameters:
[in]fpFile pointed passed by caller where the output is written to.
[in]detailsIf >5 then NDArrayPool::report and NDAttributeList::report are both called.

Reimplemented from asynPortDriver.

Reimplemented in NDDxp.

asynStatus asynNDArrayDriver::writeGenericPointer ( asynUser *  pasynUser,
void *  genericPointer 
) [virtual]

This method currently does nothing, but it should be implemented in this base class.

Derived classes can implement this method as required.

Parameters:
[in]pasynUserUsed to obtain the addr for the NDArray to be copied to, and for asynTrace output.
[in]genericPointerPointer to an NDArray. The NDArray pointed to by genericPointer will be copied into the NDArray in asynNDArrayDriver .

Reimplemented from asynPortDriver.

asynStatus asynNDArrayDriver::writeOctet ( asynUser *  pasynUser,
const char *  value,
size_t  nChars,
size_t *  nActual 
) [virtual]

Called when asyn clients call pasynOctet->write().

This function performs actions for some parameters, including NDAttributesFile. For all parameters it sets the value in the parameter library and calls any registered callbacks..

Parameters:
[in]pasynUserpasynUser structure that encodes the reason and address.
[in]valueAddress of the string to write.
[in]nCharsNumber of characters to write.
[out]nActualNumber of characters actually written.

Reimplemented from asynPortDriver.


Member Data Documentation

NDArray** asynNDArrayDriver::pArrays [protected]

An array of NDArray pointers used to store data in the driver.

class NDAttributeList* asynNDArrayDriver::pAttributeList [protected]

An NDAttributeList object used to obtain the current values of a set of attributes.

NDArrayPool* asynNDArrayDriver::pNDArrayPool [protected]

An NDArrayPool object used to allocate and manipulate NDArray objects.


The documentation for this class was generated from the following files: