areaDetector  3-7-0
EPICS areaDetector framework
Public Member Functions | Public Attributes | Protected Attributes | Friends | List of all members
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:
ADCSimDetector ADDriver NDPluginDriver ADCameralink ADLambda ADnED ADPICam adsc andor3 AndorCCD aravisCamera BISDetector Dexela eigerDetector FastCCD FirewireDCAM FirewireWinDCAM LightField mar345 marCCD mythen NDDriverStdArrays PerkinElmer PhotonII pilatusDetector pixirad pointGrey prosilica PSL pvaDriver pvCam QImage roper simDetector URLDriver ADnEDPixelROI ffmpegStream NDPluginAttribute NDPluginAttrPlot NDPluginCircularBuff NDPluginCodec NDPluginColorConvert NDPluginEdge NDPluginFFT NDPluginFile NDPluginGather NDPluginMask NDPluginOverlay NDPluginProcess NDPluginPva NDPluginROI NDPluginROIStat NDPluginScatter NDPluginStats NDPluginStdArrays NDPluginTimeSeries NDPluginTransform NDPosPlugin

Public Member Functions

 asynNDArrayDriver (const char *portName, int maxAddr, 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. More...
 
virtual ~asynNDArrayDriver ()
 
virtual asynStatus writeOctet (asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual)
 Called when asyn clients call pasynOctet->write(). More...
 
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. More...
 
virtual asynStatus writeGenericPointer (asynUser *pasynUser, void *genericPointer)
 This method currently does nothing, but it should be implemented in this base class. More...
 
virtual asynStatus writeInt32 (asynUser *pasynUser, epicsInt32 value)
 Sets an int32 parameter. More...
 
virtual asynStatus readInt32 (asynUser *pasynUser, epicsInt32 *value)
 
virtual asynStatus readFloat64 (asynUser *pasynUser, epicsFloat64 *value)
 
virtual void report (FILE *fp, int details)
 Report status of the driver. More...
 
virtual asynStatus createFilePath (const char *path, int pathDepth)
 Function to create a directory path for a file. More...
 
virtual asynStatus checkPath ()
 Checks whether the directory specified NDFilePath parameter exists. More...
 
virtual bool checkPath (std::string &filePath)
 Checks whether the directory specified exists. More...
 
virtual asynStatus createFileName (int maxChars, char *fullFileName)
 Build a file name from component parts. More...
 
virtual asynStatus createFileName (int maxChars, char *filePath, char *fileName)
 Build a file name from component parts. More...
 
virtual asynStatus readNDAttributesFile ()
 Create this driver's NDAttributeList (pAttributeList) by reading an XML file This clears any existing attributes from this drivers' NDAttributeList and then creates a new list based on the XML file. More...
 
virtual asynStatus getAttributes (NDAttributeList *pAttributeList)
 Get the current values of attributes from this driver and appends them to an output attribute list. More...
 
asynStatus incrementQueuedArrayCount ()
 
asynStatus decrementQueuedArrayCount ()
 
int getQueuedArrayCount ()
 
void updateQueuedArrayCount ()
 

Public Attributes

class NDArrayPoolpNDArrayPool
 An NDArrayPool pointer that is initialized to pNDArrayPoolPvt_ in the constructor. More...
 

Protected Attributes

int NDPortNameSelf
 
int NDADCoreVersion
 
int NDDriverVersion
 
int NDArraySizeX
 
int NDArraySizeY
 
int NDArraySizeZ
 
int NDArraySize
 
int NDNDimensions
 
int NDDimensions
 
int NDDataType
 
int NDColorMode
 
int NDUniqueId
 
int NDTimeStamp
 
int NDEpicsTSSec
 
int NDEpicsTSNsec
 
int NDBayerPattern
 
int NDCodec
 
int NDCompressedSize
 
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 NDFileWriteStatus
 
int NDFileWriteMessage
 
int NDFileNumCapture
 
int NDFileNumCaptured
 
int NDFileCapture
 
int NDFileDeleteDriverFile
 
int NDFileLazyOpen
 
int NDFileCreateDir
 
int NDFileTempSuffix
 
int NDAttributesFile
 
int NDAttributesStatus
 
int NDAttributesMacros
 
int NDArrayData
 
int NDArrayCallbacks
 
int NDPoolMaxBuffers
 
int NDPoolAllocBuffers
 
int NDPoolFreeBuffers
 
int NDPoolMaxMemory
 
int NDPoolUsedMemory
 
int NDPoolEmptyFreeList
 
int NDNumQueuedArrays
 
class NDArray ** pArrays
 An array of NDArray pointers used to store data in the driver. More...
 
class NDAttributeListpAttributeList
 An NDAttributeList object used to obtain the current values of a set of attributes. More...
 
int threadStackSize_
 
int threadPriority_
 

Friends

class NDArrayPool
 

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::asynNDArrayDriver ( const char *  portName,
int  maxAddr,
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, 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]maxBuffersThe maximum number of NDArray buffers that the NDArrayPool for this driver is allowed to allocate. Set this to 0 to allow an unlimited number of buffers. This value is no longer used and is ignored. It will be removed in a future major release.
[in]maxMemoryThe maximum amount of memory that the NDArrayPool for this driver is allowed to allocate. Set this to 0 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. This value should also be used for any other threads this object creates.
[in]stackSizeThe stack size for the asyn port driver thread if ASYN_CANBLOCK is set in asynFlags. This value should also be used for any other threads this object creates.

◆ ~asynNDArrayDriver()

asynNDArrayDriver::~asynNDArrayDriver ( )
virtual

Member Function Documentation

◆ checkPath() [1/2]

asynStatus asynNDArrayDriver::checkPath ( )
virtual

Checks whether the directory specified NDFilePath parameter exists.

This is a convenience function that determines the 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.

◆ checkPath() [2/2]

bool asynNDArrayDriver::checkPath ( std::string &  filePath)
virtual

Checks whether the directory specified exists.

This is a convenience function that determines the directory specified exists. It adds a trailing '/' or '\' character to the path if one is not present. It returns true if the directory exists and false if it does not

◆ createFileName() [1/2]

asynStatus 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.

◆ createFileName() [2/2]

asynStatus 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.

◆ createFilePath()

asynStatus asynNDArrayDriver::createFilePath ( const char *  path,
int  pathDepth 
)
virtual

Function to create a directory path for a file.

Parameters
[in]pathPath to create. The final part is the file name and is not created.
[in]pathDepthThis determines how much of the path to assume exists before attempting to create directories: pathDepth = 0 create no directories pathDepth = 1 create all directories needed (i.e. only assume root directory exists). pathDepth = 2 Assume 1 directory below the root directory exists pathDepth = -1 Assume all but one directory exists pathDepth = -2 Assume all but two directories exist.

◆ decrementQueuedArrayCount()

asynStatus asynNDArrayDriver::decrementQueuedArrayCount ( )

◆ getAttributes()

asynStatus 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.

◆ getQueuedArrayCount()

int asynNDArrayDriver::getQueuedArrayCount ( )

◆ incrementQueuedArrayCount()

asynStatus asynNDArrayDriver::incrementQueuedArrayCount ( )

◆ readFloat64()

asynStatus asynNDArrayDriver::readFloat64 ( asynUser *  pasynUser,
epicsFloat64 *  value 
)
virtual

◆ readGenericPointer()

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.

◆ readInt32()

asynStatus asynNDArrayDriver::readInt32 ( asynUser *  pasynUser,
epicsInt32 *  value 
)
virtual

Reimplemented in ADLambda.

◆ readNDAttributesFile()

asynStatus asynNDArrayDriver::readNDAttributesFile ( )
virtual

Create this driver's NDAttributeList (pAttributeList) by reading an XML file 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.

◆ report()

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 in pointGrey, pixirad, FastCCD, marCCD, adsc, pilatusDetector, ADnED, LightField, mar345, pvCam, aravisCamera, roper, FirewireWinDCAM, ADPICam, eigerDetector, mythen, AndorCCD, andor3, FirewireDCAM, NDFileHDF5, PerkinElmer, BISDetector, prosilica, PSL, Dexela, QImage, pco, ADLambda, URLDriver, NDDriverStdArrays, PhotonII, ADCSimDetector, ADCameralink, pvaDriver, and simDetector.

◆ updateQueuedArrayCount()

void asynNDArrayDriver::updateQueuedArrayCount ( )

◆ writeGenericPointer()

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 .

◆ writeInt32()

asynStatus asynNDArrayDriver::writeInt32 ( asynUser *  pasynUser,
epicsInt32  value 
)
virtual

◆ writeOctet()

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 in FastCCD, pilatusDetector, ADnED, LightField, eigerDetector, mythen, NDFileHDF5, NDPosPlugin, NDPluginDriver, PSL, ADLambda, NDFileNexus, NDPluginCircularBuff, and pvaDriver.

Friends And Related Function Documentation

◆ NDArrayPool

friend class NDArrayPool
friend

Member Data Documentation

◆ NDADCoreVersion

int asynNDArrayDriver::NDADCoreVersion
protected

◆ NDArrayCallbacks

int asynNDArrayDriver::NDArrayCallbacks
protected

◆ NDArrayCounter

int asynNDArrayDriver::NDArrayCounter
protected

◆ NDArrayData

int asynNDArrayDriver::NDArrayData
protected

◆ NDArraySize

int asynNDArrayDriver::NDArraySize
protected

◆ NDArraySizeX

int asynNDArrayDriver::NDArraySizeX
protected

◆ NDArraySizeY

int asynNDArrayDriver::NDArraySizeY
protected

◆ NDArraySizeZ

int asynNDArrayDriver::NDArraySizeZ
protected

◆ NDAttributesFile

int asynNDArrayDriver::NDAttributesFile
protected

◆ NDAttributesMacros

int asynNDArrayDriver::NDAttributesMacros
protected

◆ NDAttributesStatus

int asynNDArrayDriver::NDAttributesStatus
protected

◆ NDAutoIncrement

int asynNDArrayDriver::NDAutoIncrement
protected

◆ NDAutoSave

int asynNDArrayDriver::NDAutoSave
protected

◆ NDBayerPattern

int asynNDArrayDriver::NDBayerPattern
protected

◆ NDCodec

int asynNDArrayDriver::NDCodec
protected

◆ NDColorMode

int asynNDArrayDriver::NDColorMode
protected

◆ NDCompressedSize

int asynNDArrayDriver::NDCompressedSize
protected

◆ NDDataType

int asynNDArrayDriver::NDDataType
protected

◆ NDDimensions

int asynNDArrayDriver::NDDimensions
protected

◆ NDDriverVersion

int asynNDArrayDriver::NDDriverVersion
protected

◆ NDEpicsTSNsec

int asynNDArrayDriver::NDEpicsTSNsec
protected

◆ NDEpicsTSSec

int asynNDArrayDriver::NDEpicsTSSec
protected

◆ NDFileCapture

int asynNDArrayDriver::NDFileCapture
protected

◆ NDFileCreateDir

int asynNDArrayDriver::NDFileCreateDir
protected

◆ NDFileDeleteDriverFile

int asynNDArrayDriver::NDFileDeleteDriverFile
protected

◆ NDFileFormat

int asynNDArrayDriver::NDFileFormat
protected

◆ NDFileLazyOpen

int asynNDArrayDriver::NDFileLazyOpen
protected

◆ NDFileName

int asynNDArrayDriver::NDFileName
protected

◆ NDFileNumber

int asynNDArrayDriver::NDFileNumber
protected

◆ NDFileNumCapture

int asynNDArrayDriver::NDFileNumCapture
protected

◆ NDFileNumCaptured

int asynNDArrayDriver::NDFileNumCaptured
protected

◆ NDFilePath

int asynNDArrayDriver::NDFilePath
protected

◆ NDFilePathExists

int asynNDArrayDriver::NDFilePathExists
protected

◆ NDFileTemplate

int asynNDArrayDriver::NDFileTemplate
protected

◆ NDFileTempSuffix

int asynNDArrayDriver::NDFileTempSuffix
protected

◆ NDFileWriteMessage

int asynNDArrayDriver::NDFileWriteMessage
protected

◆ NDFileWriteMode

int asynNDArrayDriver::NDFileWriteMode
protected

◆ NDFileWriteStatus

int asynNDArrayDriver::NDFileWriteStatus
protected

◆ NDFullFileName

int asynNDArrayDriver::NDFullFileName
protected

◆ NDNDimensions

int asynNDArrayDriver::NDNDimensions
protected

◆ NDNumQueuedArrays

int asynNDArrayDriver::NDNumQueuedArrays
protected

◆ NDPoolAllocBuffers

int asynNDArrayDriver::NDPoolAllocBuffers
protected

◆ NDPoolEmptyFreeList

int asynNDArrayDriver::NDPoolEmptyFreeList
protected

◆ NDPoolFreeBuffers

int asynNDArrayDriver::NDPoolFreeBuffers
protected

◆ NDPoolMaxBuffers

int asynNDArrayDriver::NDPoolMaxBuffers
protected

◆ NDPoolMaxMemory

int asynNDArrayDriver::NDPoolMaxMemory
protected

◆ NDPoolUsedMemory

int asynNDArrayDriver::NDPoolUsedMemory
protected

◆ NDPortNameSelf

int asynNDArrayDriver::NDPortNameSelf
protected

◆ NDReadFile

int asynNDArrayDriver::NDReadFile
protected

◆ NDTimeStamp

int asynNDArrayDriver::NDTimeStamp
protected

◆ NDUniqueId

int asynNDArrayDriver::NDUniqueId
protected

◆ NDWriteFile

int asynNDArrayDriver::NDWriteFile
protected

◆ pArrays

class NDArray** asynNDArrayDriver::pArrays
protected

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

◆ pAttributeList

class NDAttributeList* asynNDArrayDriver::pAttributeList
protected

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

◆ pNDArrayPool

class NDArrayPool* asynNDArrayDriver::pNDArrayPool

An NDArrayPool pointer that is initialized to pNDArrayPoolPvt_ in the constructor.

Plugins change this pointer to the one passed in NDArray::pNDArrayPool

◆ threadPriority_

int asynNDArrayDriver::threadPriority_
protected

◆ threadStackSize_

int asynNDArrayDriver::threadStackSize_
protected

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