areaDetector
3-14
EPICS areaDetector framework
|
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 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) |
virtual asynStatus | setIntegerParam (int index, int value) |
Sets the value for an integer in the parameter library. More... | |
virtual asynStatus | setIntegerParam (int list, int index, int value) |
Sets the value for an integer in the parameter library. More... | |
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... | |
virtual void | updateTimeStamps (NDArray *pArray) |
asynStatus | incrementQueuedArrayCount () |
asynStatus | decrementQueuedArrayCount () |
int | getQueuedArrayCount () |
void | updateQueuedArrayCount () |
Public Attributes | |
class NDArrayPool * | pNDArrayPool |
An NDArrayPool pointer that is initialized to pNDArrayPoolPvt_ in the constructor. More... | |
Friends | |
class | NDArrayPool |
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 | 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.
[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] | 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. This value is no longer used and is ignored. It will be removed in a future major release. |
[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. This value should also be used for any other threads this object creates. |
[in] | stackSize | The 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. |
|
virtual |
|
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.
|
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
|
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.
|
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.
|
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 directory exists pathDepth = -2 Assume all but two directories exist. |
asynStatus asynNDArrayDriver::decrementQueuedArrayCount | ( | ) |
|
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.
int asynNDArrayDriver::getQueuedArrayCount | ( | ) |
asynStatus asynNDArrayDriver::incrementQueuedArrayCount | ( | ) |
|
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. |
|
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.
|
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 pvaDriver, NDDriverStdArrays, FirewireDCAM, aravisCamera, ADVimba, URLDriver, ADSpinnaker, simDetector, roper, xcamCamera, QImage, ADPylon, ADPvCam, PSL, prosilica, pointGrey, pixirad, pilatusDetector, ADPICam, PhotonII, PerkinElmer, ADnED, mythen, merlinDetector, marCCD, mar345, LightField, ADLambda, hamamatsu, ADGenICam, FirewireWinDCAM, FastCCD, ADEuresys, eigerDetector, Dexela, ADCSimDetector, NDPluginBadPixel, NDFileHDF5, BISDetector, ADAravis, andor3, AndorCCD, and adsc.
|
virtual |
Sets the value for an integer in the parameter library.
Calls setIntegerParam(0, index, value) i.e. for parameter list 0.
[in] | index | The parameter number |
[in] | value | Value to set. |
|
virtual |
Sets the value for an integer in the parameter library.
[in] | list | The parameter list number. Must be < maxAddr passed to asynPortDriver::asynPortDriver. |
[in] | index | The parameter number |
[in] | value | Value to set. This function was added to trap the driver setting ADAcquire to 0 and setting NumQueuedArrays. It implements the logic of setting ADAcquireBusy to reflect whether acquisition is done. If WaitForPlugins is true then this includes waiting for NumQueuedArrays to be 0. When ADAcquire goes to 0 it must use getQueuedArrayCount rather then NumQueuedArrays from the parameter library, because NumQueuedArrays is updated in a separate thread and might not have been set yet. getQueuedArrayCount updates immediately. |
void asynNDArrayDriver::updateQueuedArrayCount | ( | ) |
|
virtual |
|
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 . |
|
virtual |
Reimplemented in SpecsAnalyser, pvaDriver, NDDriverStdArrays, FirewireDCAM, aravisCamera, URLDriver, ADTimePix, simDetector, roper, xcamCamera, QImage, ADPvCam, PSL, prosilica, pointGrey, pixirad, pilatusDetector, ADPICam, PhotonII, PerkinElmer, ADnED, mythen, merlinDetector, marCCD, mar345, LightField, ADLambda, hamamatsu, ADGenICam, FirewireWinDCAM, FastCCD, ADEuresys, eigerDetector, Dexela, ADCSimDetector, NDPosPlugin, NDPluginTimeSeries, NDPluginStats, NDPluginROIStat, NDPluginROI, NDPluginProcess, NDPluginOverlay, NDPluginFile, NDPluginDriver, NDPluginCodec, NDPluginCircularBuff, NDPluginAttrPlot, NDPluginAttribute, NDFileHDF5, ADDriver, BISDetector, ADAravis, andor3, AndorCCD, and adsc.
|
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 pvaDriver, ADTimePix, pilatusDetector, ADnED, mythen, LightField, eigerDetector, NDPosPlugin, NDPluginCircularBuff, NDPluginBadPixel, NDFileNexus, NDFileHDF5, FastCCD, xcamCamera, PSL, and NDPluginDriver.
|
friend |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
An array of NDArray pointers used to store data in the driver.
|
protected |
An NDAttributeList object used to obtain the current values of a set of attributes.
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
|
protected |
|
protected |