asyn  4-33
asynPortDriver.h
Go to the documentation of this file.
1 #ifndef asynPortDriver_H
2 #define asynPortDriver_H
3 
4 #include <vector>
5 #include <string>
6 
7 #include <epicsTypes.h>
8 #include <epicsMutex.h>
9 
10 #include <asynStandardInterfaces.h>
11 #include <asynParamType.h>
12 #include <paramErrors.h>
13 
14 class paramList;
15 
16 epicsShareFunc void* findAsynPortDriver(const char *portName);
17 typedef void (*userTimeStampFunction)(void *userPvt, epicsTimeStamp *pTimeStamp);
18 
19 #ifdef __cplusplus
20 
22 #define asynCommonMask 0x00000001
23 #define asynDrvUserMask 0x00000002
24 #define asynOptionMask 0x00000004
25 #define asynInt32Mask 0x00000008
26 #define asynUInt32DigitalMask 0x00000010
27 #define asynFloat64Mask 0x00000020
28 #define asynOctetMask 0x00000040
29 #define asynInt8ArrayMask 0x00000080
30 #define asynInt16ArrayMask 0x00000100
31 #define asynInt32ArrayMask 0x00000200
32 #define asynFloat32ArrayMask 0x00000400
33 #define asynFloat64ArrayMask 0x00000800
34 #define asynGenericPointerMask 0x00001000
35 #define asynEnumMask 0x00002000
36 
37 
38 
41 class epicsShareClass asynPortDriver {
42 public:
43  asynPortDriver(const char *portName, int maxAddr, int interfaceMask, int interruptMask,
44  int asynFlags, int autoConnect, int priority, int stackSize);
45  asynPortDriver(const char *portName, int maxAddr, int paramTableSize, int interfaceMask, int interruptMask,
46  int asynFlags, int autoConnect, int priority, int stackSize) EPICS_DEPRECATED;
47  virtual ~asynPortDriver();
48  virtual asynStatus lock();
49  virtual asynStatus unlock();
50  virtual asynStatus getAddress(asynUser *pasynUser, int *address);
51  virtual asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
52  virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
53  virtual asynStatus readUInt32Digital(asynUser *pasynUser, epicsUInt32 *value, epicsUInt32 mask);
54  virtual asynStatus writeUInt32Digital(asynUser *pasynUser, epicsUInt32 value, epicsUInt32 mask);
55  virtual asynStatus setInterruptUInt32Digital(asynUser *pasynUser, epicsUInt32 mask, interruptReason reason);
56  virtual asynStatus clearInterruptUInt32Digital(asynUser *pasynUser, epicsUInt32 mask);
57  virtual asynStatus getInterruptUInt32Digital(asynUser *pasynUser, epicsUInt32 *mask, interruptReason reason);
58  virtual asynStatus getBounds(asynUser *pasynUser, epicsInt32 *low, epicsInt32 *high);
59  virtual asynStatus readFloat64(asynUser *pasynUser, epicsFloat64 *value);
60  virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
61  virtual asynStatus readOctet(asynUser *pasynUser, char *value, size_t maxChars,
62  size_t *nActual, int *eomReason);
63  virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars,
64  size_t *nActual);
65  virtual asynStatus flushOctet(asynUser *pasynUser);
66  virtual asynStatus setInputEosOctet(asynUser *pasynUser, const char *eos, int eosLen);
67  virtual asynStatus getInputEosOctet(asynUser *pasynUser, char *eos, int eosSize, int *eosLen);
68  virtual asynStatus setOutputEosOctet(asynUser *pasynUser, const char *eos, int eosLen);
69  virtual asynStatus getOutputEosOctet(asynUser *pasynUser, char *eos, int eosSize, int *eosLen);
70  virtual asynStatus readInt8Array(asynUser *pasynUser, epicsInt8 *value,
71  size_t nElements, size_t *nIn);
72  virtual asynStatus writeInt8Array(asynUser *pasynUser, epicsInt8 *value,
73  size_t nElements);
74  virtual asynStatus doCallbacksInt8Array(epicsInt8 *value,
75  size_t nElements, int reason, int addr);
76  virtual asynStatus readInt16Array(asynUser *pasynUser, epicsInt16 *value,
77  size_t nElements, size_t *nIn);
78  virtual asynStatus writeInt16Array(asynUser *pasynUser, epicsInt16 *value,
79  size_t nElements);
80  virtual asynStatus doCallbacksInt16Array(epicsInt16 *value,
81  size_t nElements, int reason, int addr);
82  virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value,
83  size_t nElements, size_t *nIn);
84  virtual asynStatus writeInt32Array(asynUser *pasynUser, epicsInt32 *value,
85  size_t nElements);
86  virtual asynStatus doCallbacksInt32Array(epicsInt32 *value,
87  size_t nElements, int reason, int addr);
88  virtual asynStatus readFloat32Array(asynUser *pasynUser, epicsFloat32 *value,
89  size_t nElements, size_t *nIn);
90  virtual asynStatus writeFloat32Array(asynUser *pasynUser, epicsFloat32 *value,
91  size_t nElements);
92  virtual asynStatus doCallbacksFloat32Array(epicsFloat32 *value,
93  size_t nElements, int reason, int addr);
94  virtual asynStatus readFloat64Array(asynUser *pasynUser, epicsFloat64 *value,
95  size_t nElements, size_t *nIn);
96  virtual asynStatus writeFloat64Array(asynUser *pasynUser, epicsFloat64 *value,
97  size_t nElements);
98  virtual asynStatus doCallbacksFloat64Array(epicsFloat64 *value,
99  size_t nElements, int reason, int addr);
100  virtual asynStatus readGenericPointer(asynUser *pasynUser, void *pointer);
101  virtual asynStatus writeGenericPointer(asynUser *pasynUser, void *pointer);
102  virtual asynStatus doCallbacksGenericPointer(void *pointer, int reason, int addr);
103  virtual asynStatus readOption(asynUser *pasynUser, const char *key, char *value, int maxChars);
104  virtual asynStatus writeOption(asynUser *pasynUser, const char *key, const char *value);
105  virtual asynStatus readEnum(asynUser *pasynUser, char *strings[], int values[], int severities[], size_t nElements, size_t *nIn);
106  virtual asynStatus writeEnum(asynUser *pasynUser, char *strings[], int values[], int severities[], size_t nElements);
107  virtual asynStatus doCallbacksEnum(char *strings[], int values[], int severities[], size_t nElements, int reason, int addr);
108  virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
109  const char **pptypeName, size_t *psize);
110  virtual asynStatus drvUserGetType(asynUser *pasynUser,
111  const char **pptypeName, size_t *psize);
112  virtual asynStatus drvUserDestroy(asynUser *pasynUser);
113  virtual void report(FILE *fp, int details);
114  virtual asynStatus connect(asynUser *pasynUser);
115  virtual asynStatus disconnect(asynUser *pasynUser);
116 
117  virtual asynStatus createParam( const char *name, asynParamType type, int *index);
118  virtual asynStatus createParam(int list, const char *name, asynParamType type, int *index);
119  virtual asynStatus findParam( const char *name, int *index);
120  virtual asynStatus findParam(int list, const char *name, int *index);
121  virtual asynStatus getParamName( int index, const char **name);
122  virtual asynStatus getParamName(int list, int index, const char **name);
123  virtual asynStatus getParamType( int index, asynParamType *type);
124  virtual asynStatus getParamType(int list, int index, asynParamType *type);
125  virtual asynStatus setParamStatus( int index, asynStatus status);
126  virtual asynStatus setParamStatus(int list, int index, asynStatus status);
127  virtual asynStatus getParamStatus( int index, asynStatus *status);
128  virtual asynStatus getParamStatus(int list, int index, asynStatus *status);
129  virtual asynStatus setParamAlarmStatus( int index, int status);
130  virtual asynStatus setParamAlarmStatus(int list, int index, int status);
131  virtual asynStatus getParamAlarmStatus( int index, int *status);
132  virtual asynStatus getParamAlarmStatus(int list, int index, int *status);
133  virtual asynStatus setParamAlarmSeverity( int index, int severity);
134  virtual asynStatus setParamAlarmSeverity(int list, int index, int severity);
135  virtual asynStatus getParamAlarmSeverity( int index, int *severity);
136  virtual asynStatus getParamAlarmSeverity(int list, int index, int *severity);
137  virtual void reportSetParamErrors(asynStatus status, int index, int list, const char *functionName);
138  virtual void reportGetParamErrors(asynStatus status, int index, int list, const char *functionName);
139  virtual asynStatus setIntegerParam( int index, int value);
140  virtual asynStatus setIntegerParam(int list, int index, int value);
141  virtual asynStatus setUIntDigitalParam( int index, epicsUInt32 value, epicsUInt32 valueMask);
142  virtual asynStatus setUIntDigitalParam(int list, int index, epicsUInt32 value, epicsUInt32 valueMask);
143  virtual asynStatus setUIntDigitalParam( int index, epicsUInt32 value, epicsUInt32 valueMask, epicsUInt32 interruptMask);
144  virtual asynStatus setUIntDigitalParam(int list, int index, epicsUInt32 value, epicsUInt32 valueMask, epicsUInt32 interruptMask);
145  virtual asynStatus setUInt32DigitalInterrupt( int index, epicsUInt32 mask, interruptReason reason);
146  virtual asynStatus setUInt32DigitalInterrupt(int list, int index, epicsUInt32 mask, interruptReason reason);
147  virtual asynStatus clearUInt32DigitalInterrupt( int index, epicsUInt32 mask);
148  virtual asynStatus clearUInt32DigitalInterrupt(int list, int index, epicsUInt32 mask);
149  virtual asynStatus getUInt32DigitalInterrupt( int index, epicsUInt32 *mask, interruptReason reason);
150  virtual asynStatus getUInt32DigitalInterrupt(int list, int index, epicsUInt32 *mask, interruptReason reason);
151  virtual asynStatus setDoubleParam( int index, double value);
152  virtual asynStatus setDoubleParam(int list, int index, double value);
153  virtual asynStatus setStringParam( int index, const char *value);
154  virtual asynStatus setStringParam(int list, int index, const char *value);
155  virtual asynStatus setStringParam( int index, const std::string& value);
156  virtual asynStatus setStringParam(int list, int index, const std::string& value);
157  virtual asynStatus getIntegerParam( int index, epicsInt32 * value);
158  virtual asynStatus getIntegerParam(int list, int index, epicsInt32 * value);
159  virtual asynStatus getUIntDigitalParam( int index, epicsUInt32 *value, epicsUInt32 mask);
160  virtual asynStatus getUIntDigitalParam(int list, int index, epicsUInt32 *value, epicsUInt32 mask);
161  virtual asynStatus getDoubleParam( int index, double * value);
162  virtual asynStatus getDoubleParam(int list, int index, double * value);
163  virtual asynStatus getStringParam( int index, int maxChars, char *value);
164  virtual asynStatus getStringParam(int list, int index, int maxChars, char *value);
165  virtual asynStatus getStringParam( int index, std::string& value);
166  virtual asynStatus getStringParam(int list, int index, std::string& value);
167  virtual asynStatus callParamCallbacks();
168  virtual asynStatus callParamCallbacks( int addr);
169  virtual asynStatus callParamCallbacks(int list, int addr);
170  virtual asynStatus updateTimeStamp();
171  virtual asynStatus updateTimeStamp(epicsTimeStamp *pTimeStamp);
172  virtual asynStatus getTimeStamp(epicsTimeStamp *pTimeStamp);
173  virtual asynStatus setTimeStamp(const epicsTimeStamp *pTimeStamp);
174  asynStandardInterfaces *getAsynStdInterfaces();
175  virtual void reportParams(FILE *fp, int details);
176 
177  char *portName;
179  int maxAddr;
180  void callbackTask();
181 
182 protected:
183  void initialize(const char *portNameIn, int maxAddrIn, int interfaceMask, int interruptMask, int asynFlags,
184  int autoConnect, int priority, int stackSize);
185  asynUser *pasynUserSelf;
186  asynStandardInterfaces asynStdInterfaces;
188 private:
189  std::vector<paramList*> params;
190  epicsMutexId mutexId;
191  char *inputEosOctet;
192  int inputEosLenOctet;
193  char *outputEosOctet;
194  int outputEosLenOctet;
195  template <typename epicsType, typename interruptType>
196  asynStatus doCallbacksArray(epicsType *value, size_t nElements,
197  int reason, int address, void *interruptPvt);
198 
199  friend class paramList;
200 };
201 
202 #endif /* cplusplus */
203 
204 #endif
Class to support parameter library (also called parameter list); set and get values indexed by parame...
Definition: asynPortDriver.cpp:47
asynParamType
Parameter data types for the parameter library.
Definition: asynParamType.h:12
Base class for asyn port drivers; handles most of the bookkeeping for writing an asyn port driver wit...
Definition: asynPortDriver.h:41
char * portName
The name of this asyn port.
Definition: asynPortDriver.h:177
void(* userTimeStampFunction)(void *userPvt, epicsTimeStamp *pTimeStamp)
Definition: asynPortDriver.h:17
asynStandardInterfaces asynStdInterfaces
The asyn interfaces this driver implements.
Definition: asynPortDriver.h:186
void * findAsynPortDriver(const char *portName)
Utility function that returns a pointer to an asynPortDriver object from its name.
Definition: asynPortDriver.cpp:3414
asynUser * pasynUserSelf
asynUser connected to ourselves for asynTrace
Definition: asynPortDriver.h:185
int maxAddr
The maximum asyn address (addr) supported by this driver.
Definition: asynPortDriver.h:179