asynPortClient

date:

January 26, 2019

author:

Mark Rivers, University of Chicago

Overview

asynPortClient is a set of C++ classes that are designed to simplify the task of writing a client that directly communicates with an asyn port driver, without running an EPICS IOC. They handle the details of connecting to the driver, finding the required interfaces, etc. They only use the synchronous interfaces, so all calls are blocking. If clients need asynchronous operation then they can use the normal C interface with pasynManager->queueRequest.

asynPortClient provides a base class, asynParamClient, from which interface-specific class are derived. It also provides a class for each of the standard asyn interfaces, (asynInt32Client, asynFloat64Client, asynCommonClient, asynEnumClient, etc.).

The asynPortClient class connects to a specific asynPortDriver object. It creates an asynParamClient derived class for each of the parameters in that driver. It uses the std::map class to map between the parameter name key and the asynParamClient object for that parameter. It also defines generic write() and read() methods that take a paramName argument and the value to be written or pointer to read into. The data type of the value or pointer must match the parameter type or a run-time exception will be thrown.

Detailed documentation

The detailed documentation for asynPortClient is in these files (generated by doxygen):

Examples

One example of the use of asynPortClient can be found in areaDetector/ADSimDetector

Another example client using the asynPortClient class is provided in the testAsynPortClientApp application in asyn. This tests running C++ applications that communicate with asyn port drivers without running an IOC. This currently contains a single test application, testAsynIPPortClient.cpp. This program creates an asynIPPort driver, and uses the command line arguments to set the hostInfo string, a single command string to send to the server, and optionally the input and output EOS. It then prints out the response from the server. There are 3 example shell scripts that show how to use testAsynIPPortClient to communicate with a Web server, XPS motor controller, and a telnet host respectively.