#include <NDPluginDriver.h>
Public Member Functions | |
NDPluginDriver (const char *portName, int queueSize, int blockingCallbacks, const char *NDArrayPort, int NDArrayAddr, int maxAddr, int paramTableSize, int maxBuffers, size_t maxMemory, int interfaceMask, int interruptMask, int asynFlags, int autoConnect, int priority, int stackSize) | |
Constructor for NDPluginDriver; most parameters are simply passed to asynNDArrayDriver::asynNDArrayDriver. | |
virtual asynStatus | writeInt32 (asynUser *pasynUser, epicsInt32 value) |
Called when asyn clients call pasynInt32->write(). | |
virtual asynStatus | writeOctet (asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual) |
Called when asyn clients call pasynOctet->write(). | |
virtual asynStatus | readInt32Array (asynUser *pasynUser, epicsInt32 *value, size_t nElements, size_t *nIn) |
Called when asyn clients call pasynInt32Array->read(). | |
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 parameters defined in for the NDPluginDriver class if the drvInfo field matches one the strings defined for it. | |
virtual void | driverCallback (asynUser *pasynUser, void *genericPointer) |
Method that is called from the driver with a new NDArray. | |
virtual void | processTask (void) |
Method runs as a separate thread, waiting for NDArrays to arrive in a message queue and processing them. | |
Protected Member Functions | |
virtual void | processCallbacks (NDArray *pArray) |
Method that is normally called at the beginning of the processCallbacks method in derived classes. | |
virtual asynStatus | connectToArrayPort (void) |
Connect this plugin to an NDArray port driver; disconnect from any existing driver first, register for callbacks if enabled. | |
Protected Attributes | |
asynUser * | pasynUserGenericPointer |
asynUser for connecting to NDArray driver | |
void * | asynGenericPointerPvt |
Handle for connecting to NDArray driver. | |
asynGenericPointer * | pasynGenericPointer |
asyn interface for connecting to NDArray driver |
NDPluginDriver::NDPluginDriver | ( | const char * | portName, | |
int | queueSize, | |||
int | blockingCallbacks, | |||
const char * | NDArrayPort, | |||
int | NDArrayAddr, | |||
int | maxAddr, | |||
int | paramTableSize, | |||
int | maxBuffers, | |||
size_t | maxMemory, | |||
int | interfaceMask, | |||
int | interruptMask, | |||
int | asynFlags, | |||
int | autoConnect, | |||
int | priority, | |||
int | stackSize | |||
) |
Constructor for NDPluginDriver; most parameters are simply passed to asynNDArrayDriver::asynNDArrayDriver.
After calling the base class constructor this method creates a thread to execute the NDArray callbacks, and sets reasonable default values for all of the parameters defined in NDPluginDriver.h.
[in] | portName | The name of the asyn port driver to be created. |
[in] | queueSize | The number of NDArrays that the input queue for this plugin can hold when NDPluginDriverBlockingCallbacks=0. Larger queues can decrease the number of dropped arrays, at the expense of more NDArray buffers being allocated from the underlying driver's NDArrayPool. |
[in] | blockingCallbacks | Initial setting for the NDPluginDriverBlockingCallbacks flag. 0=callbacks are queued and executed by the callback thread; 1 callbacks execute in the thread of the driver doing the callbacks. |
[in] | NDArrayPort | Name of asyn port driver for initial source of NDArray callbacks. |
[in] | NDArrayAddr | asyn port driver address for initial source of NDArray callbacks. |
[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. |
asynStatus NDPluginDriver::connectToArrayPort | ( | void | ) | [protected, virtual] |
Connect this plugin to an NDArray port driver; disconnect from any existing driver first, register for callbacks if enabled.
void NDPluginDriver::driverCallback | ( | asynUser * | pasynUser, | |
void * | genericPointer | |||
) | [virtual] |
Method that is called from the driver with a new NDArray.
It calls the processCallbacks function, which typically is implemented in the derived class. It can either do the callbacks directly (if NDPluginDriverBlockingCallbacks=1) or by queueing the arrays to be processed by a background task (if NDPluginDriverBlockingCallbacks=0). In the latter case arrays can be dropped if the queue is full. This method should really be private, but it must be called from a C-linkage callback function, so it must be public.
[in] | pasynUser | The pasynUser from the asyn client. |
[in] | genericPointer | The pointer to the NDArray |
asynStatus NDPluginDriver::drvUserCreate | ( | asynUser * | pasynUser, | |
const char * | drvInfo, | |||
const char ** | pptypeName, | |||
size_t * | psize | |||
) | [virtual] |
Sets pasynUser->reason to one of the enum values for the parameters defined in for the NDPluginDriver class if the drvInfo field matches one the strings defined for it.
Simply calls asynPortDriver::drvUserCreateParam with the parameter table for this driver, and then base class asynNDArrayDriver::drvUserCreate if that fails.
[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 from asynNDArrayDriver.
Reimplemented in NDFileJPEG, NDFileNexus, NDPluginColorConvert, NDPluginFile, NDPluginROI, and NDPluginStdArrays.
void NDPluginDriver::processCallbacks | ( | NDArray * | pArray | ) | [protected, virtual] |
Method that is normally called at the beginning of the processCallbacks method in derived classes.
[in] | pArray | The NDArray from the callback. |
Reimplemented in NDPluginColorConvert, NDPluginFile, NDPluginROI, and NDPluginStdArrays.
void NDPluginDriver::processTask | ( | void | ) | [virtual] |
Method runs as a separate thread, waiting for NDArrays to arrive in a message queue and processing them.
This thread is used when NDPluginDriverBlockingCallbacks=0. This method should really be private, but it must be called from a C-linkage callback function, so it must be public.
asynStatus NDPluginDriver::readInt32Array | ( | asynUser * | pasynUser, | |
epicsInt32 * | value, | |||
size_t | nElements, | |||
size_t * | nIn | |||
) | [virtual] |
Called when asyn clients call pasynInt32Array->read().
Returns the value of the array dimensions for the last NDArray.
[in] | pasynUser | pasynUser structure that encodes the reason and address. |
[in] | value | Pointer to the array to read. |
[in] | nElements | Number of elements to read. |
[out] | nIn | Number of elements actually read. |
Reimplemented in NDPluginStdArrays.
asynStatus NDPluginDriver::writeInt32 | ( | asynUser * | pasynUser, | |
epicsInt32 | value | |||
) | [virtual] |
Called when asyn clients call pasynInt32->write().
This function performs actions for some parameters, including NDPluginDriverEnableCallbacks and NDPluginDriverArrayAddr. 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 | Value to write. |
Reimplemented in NDPluginFile, and NDPluginROI.
asynStatus NDPluginDriver::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 NDPluginDriverArrayPort. 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 asynNDArrayDriver.
void* NDPluginDriver::asynGenericPointerPvt [protected] |
Handle for connecting to NDArray driver.
asynGenericPointer* NDPluginDriver::pasynGenericPointer [protected] |
asyn interface for connecting to NDArray driver
asynUser* NDPluginDriver::pasynUserGenericPointer [protected] |
asynUser for connecting to NDArray driver