#include <asynNDArrayDriver.h>
Public Member Functions | |
asynNDArrayDriver (const char *portName, int maxAddr, int paramTableSize, 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 asynStatus | drvUserCreate (asynUser *pasynUser, const char *drvInfo, const char **pptypeName, size_t *psize) |
Sets pasynUser->reason to one of the enum values for the NDStdDriverParam_t values defined in asynNDArrayDriver.h if the drvInfo field matches one the strings defined in that file. | |
virtual void | report (FILE *fp, int details) |
Report status of the driver. | |
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 | |
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. |
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 | paramTableSize, | |||
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] | paramTableSize | The number of parameters that this driver supports. |
[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. |
int 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. |
int 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. |
asynStatus asynNDArrayDriver::drvUserCreate | ( | asynUser * | pasynUser, | |
const char * | drvInfo, | |||
const char ** | pptypeName, | |||
size_t * | psize | |||
) | [virtual] |
Sets pasynUser->reason to one of the enum values for the NDStdDriverParam_t values defined in asynNDArrayDriver.h if the drvInfo field matches one the strings defined in that file.
Simply calls asynPortDriver::drvUserCreateParam with the parameter table for this driver.
[in] | pasynUser | pasynUser structure that driver modifies |
[in] | drvInfo | String containing information about what driver function is being referenced |
[out] | pptypeName | Location in which driver puts a copy of drvInfo. |
[out] | psize | Location where driver puts size of param |
Reimplemented in ADDriver, adsc, FirewireWinDCAM, mar345, marCCD, PerkinElmer, pilatusDetector, NDFileJPEG, NDFileNexus, NDPluginColorConvert, NDPluginDriver, NDPluginFile, NDPluginROI, NDPluginStdArrays, prosilica, pvCam, roper, and simDetector.
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.
[out] | pList | The NDAttributeList to copy the attributes to. |
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. |
int 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. |
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.
[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 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.
[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 . |
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 in adsc, pilatusDetector, and NDPluginDriver.
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.