dxp 3-4
|
This is the class from which NDArray drivers are derived; implements the asynGenericPointer functions for NDArray objects. More...
#include <asynNDArrayDriver.h>
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 | ~asynNDArrayDriver () |
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 asynStatus | readInt32 (asynUser *pasynUser, epicsInt32 *value) |
Called when asyn clients call pasynInt32->read(). | |
virtual asynStatus | readFloat64 (asynUser *pasynUser, epicsFloat64 *value) |
Called when asyn clients call pasynFloat64->read(). | |
virtual void | report (FILE *fp, int details) |
Report status of the driver. | |
virtual asynStatus | createFilePath (const char *path, int pathDepth) |
Function to create a directory path for a file. | |
virtual asynStatus | checkPath () |
Checks whether the directory specified NDFilePath parameter exists. | |
virtual asynStatus | createFileName (int maxChars, char *fullFileName) |
Build a file name from component parts. | |
virtual asynStatus | createFileName (int maxChars, char *filePath, char *fileName) |
Build a file name from component parts. | |
virtual asynStatus | readNDAttributesFile (const char *fileName) |
Create this driver's NDAttributeList (pAttributeList) by reading an XML file. | |
virtual asynStatus | 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 | NDADCoreVersion |
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 | 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 | NDArrayData |
int | NDArrayCallbacks |
int | NDPoolMaxBuffers |
int | NDPoolAllocBuffers |
int | NDPoolFreeBuffers |
int | NDPoolMaxMemory |
int | NDPoolUsedMemory |
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. |
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.
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.
[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 0 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 0 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. |
asynNDArrayDriver::~asynNDArrayDriver | ( | ) | [virtual] |
asynStatus 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.
asynStatus asynNDArrayDriver::createFileName | ( | int | maxChars, |
char * | fullFileName | ||
) | [virtual] |
Build a file name from component parts.
[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.
asynStatus asynNDArrayDriver::createFileName | ( | int | maxChars, |
char * | filePath, | ||
char * | fileName | ||
) | [virtual] |
Build a file name from component parts.
[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.
asynStatus asynNDArrayDriver::createFilePath | ( | const char * | path, |
int | pathDepth | ||
) | [virtual] |
Function to create a directory path for a file.
[in] | path | Path to create. The final part is the file name and is not created. |
[in] | pathDepth | This 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 direcory exists pathDepth = -2 Assume all but two directories exist. |
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.
[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::readFloat64 | ( | asynUser * | pasynUser, |
epicsFloat64 * | value | ||
) | [virtual] |
Called when asyn clients call pasynFloat64->read().
The base class implementation simply returns the value from the parameter library. Derived classes rarely need to reimplement this function.
[in] | pasynUser | pasynUser structure that encodes the reason and address. |
[in] | value | Address of the value to read. |
Reimplemented from asynPortDriver.
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.
[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.
asynStatus asynNDArrayDriver::readInt32 | ( | asynUser * | pasynUser, |
epicsInt32 * | value | ||
) | [virtual] |
Called when asyn clients call pasynInt32->read().
The base class implementation simply returns the value from the parameter library. Derived classes rarely need to reimplement this function.
[in] | pasynUser | pasynUser structure that encodes the reason and address. |
[out] | value | Address of the value to read. |
Reimplemented from asynPortDriver.
asynStatus asynNDArrayDriver::readNDAttributesFile | ( | const char * | fileName | ) | [virtual] |
Create this driver's NDAttributeList (pAttributeList) by reading an XML file.
[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 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.
[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 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.
[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..
[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.
int asynNDArrayDriver::NDADCoreVersion [protected] |
int asynNDArrayDriver::NDArrayCallbacks [protected] |
int asynNDArrayDriver::NDArrayCounter [protected] |
int asynNDArrayDriver::NDArrayData [protected] |
int asynNDArrayDriver::NDArraySize [protected] |
int asynNDArrayDriver::NDArraySizeX [protected] |
int asynNDArrayDriver::NDArraySizeY [protected] |
int asynNDArrayDriver::NDArraySizeZ [protected] |
int asynNDArrayDriver::NDAttributesFile [protected] |
int asynNDArrayDriver::NDAutoIncrement [protected] |
int asynNDArrayDriver::NDAutoSave [protected] |
int asynNDArrayDriver::NDBayerPattern [protected] |
int asynNDArrayDriver::NDColorMode [protected] |
int asynNDArrayDriver::NDDataType [protected] |
int asynNDArrayDriver::NDDimensions [protected] |
int asynNDArrayDriver::NDEpicsTSNsec [protected] |
int asynNDArrayDriver::NDEpicsTSSec [protected] |
int asynNDArrayDriver::NDFileCapture [protected] |
int asynNDArrayDriver::NDFileCreateDir [protected] |
int asynNDArrayDriver::NDFileDeleteDriverFile [protected] |
int asynNDArrayDriver::NDFileFormat [protected] |
int asynNDArrayDriver::NDFileLazyOpen [protected] |
int asynNDArrayDriver::NDFileName [protected] |
int asynNDArrayDriver::NDFileNumber [protected] |
int asynNDArrayDriver::NDFileNumCapture [protected] |
int asynNDArrayDriver::NDFileNumCaptured [protected] |
int asynNDArrayDriver::NDFilePath [protected] |
int asynNDArrayDriver::NDFilePathExists [protected] |
int asynNDArrayDriver::NDFileTemplate [protected] |
int asynNDArrayDriver::NDFileTempSuffix [protected] |
int asynNDArrayDriver::NDFileWriteMessage [protected] |
int asynNDArrayDriver::NDFileWriteMode [protected] |
int asynNDArrayDriver::NDFileWriteStatus [protected] |
int asynNDArrayDriver::NDFullFileName [protected] |
int asynNDArrayDriver::NDNDimensions [protected] |
int asynNDArrayDriver::NDPoolAllocBuffers [protected] |
int asynNDArrayDriver::NDPoolFreeBuffers [protected] |
int asynNDArrayDriver::NDPoolMaxBuffers [protected] |
int asynNDArrayDriver::NDPoolMaxMemory [protected] |
int asynNDArrayDriver::NDPoolUsedMemory [protected] |
int asynNDArrayDriver::NDPortNameSelf [protected] |
int asynNDArrayDriver::NDReadFile [protected] |
int asynNDArrayDriver::NDTimeStamp [protected] |
int asynNDArrayDriver::NDUniqueId [protected] |
int asynNDArrayDriver::NDWriteFile [protected] |
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.