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 ADDriver NDPluginDriver adsc FirewireWinDCAM mar345 marCCD PerkinElmer pilatusDetector prosilica pvCam roper simDetector NDPluginColorConvert NDPluginFile NDPluginOverlay NDPluginProcess NDPluginROI NDPluginStats NDPluginStdArrays NDPluginTransform

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 NDAttributesFile
int NDArrayData
int NDArrayCallbacks
NDArray ** pArrays
 An array of NDArray pointers used to store data in the driver.
NDArrayPoolpNDArrayPool
 An NDArrayPool object used to allocate and manipulate NDArray objects.
class NDAttributeListpAttributeList
 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] portName The name of the asyn port driver to be created.
[in] maxAddr The maximum number of asyn addr addresses this driver supports. 1 is minimum.
[in] numParams The number of parameters in the derived class.
[in] maxBuffers The 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] maxMemory The 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] interfaceMask Bit mask defining the asyn interfaces that this driver supports.
[in] interruptMask Bit mask definining the asyn interfaces that can generate interrupts (callbacks)
[in] asynFlags Flags when creating the asyn port driver; includes ASYN_CANBLOCK and ASYN_MULTIDEVICE.
[in] autoConnect The autoConnect flag for the asyn port driver.
[in] priority The thread priority for the asyn port driver thread if ASYN_CANBLOCK is set in asynFlags.
[in] stackSize The 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 *  filePath,
char *  fileName 
) [virtual]

Build a file name from component parts.

Parameters:
[in] maxChars The size of the fullFileName string.
[out] filePath The file path.
[out] fileName The 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::createFileName ( int  maxChars,
char *  fullFileName 
) [virtual]

Build a file name from component parts.

Parameters:
[in] maxChars The size of the fullFileName string.
[out] fullFileName The 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::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] pList The 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] pasynUser Used to obtain the addr for the NDArray to be copied from, and for asynTrace output.
[out] genericPointer Pointer 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] fileName The 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 however, are case-insensitive, i.e. type="epics_pv" is equivalent to type="EPICS_PV". The XML attribute names are listed here:

name determines the name of the NDAttribute. It is required, must be unique, and is case-insensitive.

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.

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.

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] fp File pointed passed by caller where the output is written to.
[in] details If >5 then NDArrayPool::report and NDAttributeList::report are both called.

Reimplemented from asynPortDriver.

Reimplemented in adsc, FirewireWinDCAM, mar345, marCCD, PerkinElmer, pilatusDetector, prosilica, pvCam, roper, and simDetector.

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] pasynUser Used to obtain the addr for the NDArray to be copied to, and for asynTrace output.
[in] genericPointer Pointer 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] pasynUser pasynUser structure that encodes the reason and address.
[in] value Address of the string to write.
[in] nChars Number of characters to write.
[out] nActual Number of characters actually written.

Reimplemented from asynPortDriver.

Reimplemented in pilatusDetector, NDFileNexus, and NDPluginDriver.


Member Data Documentation

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

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

An NDArrayPool object used to allocate and manipulate NDArray objects.


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

Generated on Thu May 20 18:01:43 2010 for areaDetector by  doxygen 1.5.7.1