asyn 4-27
|
00001 #ifndef asynPortClient_H 00002 #define asynPortClient_H 00003 00004 #include <stdexcept> 00005 #include <string> 00006 00007 #include <epicsString.h> 00008 00009 #include <asynDriver.h> 00010 #include <asynInt32.h> 00011 #include <asynInt32SyncIO.h> 00012 #include <asynUInt32Digital.h> 00013 #include <asynUInt32DigitalSyncIO.h> 00014 #include <asynFloat64.h> 00015 #include <asynFloat64SyncIO.h> 00016 #include <asynOctet.h> 00017 #include <asynOctetSyncIO.h> 00018 #include <asynInt8Array.h> 00019 #include <asynInt8ArraySyncIO.h> 00020 #include <asynInt16Array.h> 00021 #include <asynInt16ArraySyncIO.h> 00022 #include <asynInt32Array.h> 00023 #include <asynInt32ArraySyncIO.h> 00024 #include <asynFloat32Array.h> 00025 #include <asynFloat32ArraySyncIO.h> 00026 #include <asynFloat64Array.h> 00027 #include <asynFloat64ArraySyncIO.h> 00028 #include <asynGenericPointer.h> 00029 #include <asynGenericPointerSyncIO.h> 00030 #include <asynEnum.h> 00031 #include <asynEnumSyncIO.h> 00032 #include <asynOption.h> 00033 #include <asynOptionSyncIO.h> 00034 #include <asynCommonSyncIO.h> 00035 #include <asynDrvUser.h> 00036 00037 #define DEFAULT_TIMEOUT 1.0 00038 00039 00042 class epicsShareClass asynPortClient { 00043 public: 00044 asynPortClient(const char *portName, int addr, const char* asynInterfaceType, const char *drvInfo, double timeout); 00045 virtual ~asynPortClient(); 00046 void setTimeout(double timeout) 00047 { timeout_ = timeout; }; 00048 void report(FILE *fp, int details); 00049 protected: 00050 asynUser *pasynUser_; 00051 asynUser *pasynUserSyncIO_; 00052 asynInterface *pasynInterface_; 00053 double timeout_; 00054 char *portName_; 00055 int addr_; 00056 char *asynInterfaceType_; 00057 char *drvInfo_; 00058 void *drvPvt; 00059 void *interruptPvt_; 00060 }; 00061 00062 00064 class epicsShareClass asynInt32Client : public asynPortClient { 00065 public: 00072 asynInt32Client(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00073 : asynPortClient(portName, addr, asynInt32Type, drvInfo, timeout) { 00074 pInterface_ = (asynInt32 *)pasynInterface_->pinterface; 00075 if (pasynInt32SyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00076 throw std::runtime_error(std::string("pasynInt32SyncIO->connect failed")); 00077 }; 00079 virtual ~asynInt32Client() { 00080 pasynInt32SyncIO->disconnect(pasynUserSyncIO_); 00081 }; 00084 virtual asynStatus read(epicsInt32 *value) { 00085 return pasynInt32SyncIO->read(pasynUserSyncIO_, value, timeout_); 00086 }; 00089 virtual asynStatus write(epicsInt32 value) { 00090 return pasynInt32SyncIO->write(pasynUserSyncIO_, value, timeout_); 00091 }; 00095 virtual asynStatus getBounds(epicsInt32 *low, epicsInt32 *high) { 00096 return pasynInt32SyncIO->getBounds(pasynUserSyncIO_, low, high); 00097 }; 00100 virtual asynStatus registerInterruptUser(interruptCallbackInt32 pCallback) { 00101 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00102 pCallback, this, &interruptPvt_); 00103 }; 00104 private: 00105 asynInt32 *pInterface_; 00106 }; 00107 00108 00110 class epicsShareClass asynUInt32DigitalClient : public asynPortClient { 00111 public: 00118 asynUInt32DigitalClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00119 : asynPortClient(portName, addr, asynUInt32DigitalType, drvInfo, timeout) { 00120 pInterface_ = (asynUInt32Digital *)pasynInterface_->pinterface; 00121 if (pasynInt32SyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00122 throw std::runtime_error(std::string("pasynInt32SyncIO->connect failed")); 00123 }; 00125 virtual ~asynUInt32DigitalClient() { 00126 pasynUInt32DigitalSyncIO->disconnect(pasynUserSyncIO_); 00127 }; 00131 virtual asynStatus read(epicsUInt32 *value, epicsUInt32 mask) { 00132 return pasynUInt32DigitalSyncIO->read(pasynUserSyncIO_, value, mask, timeout_); 00133 }; 00137 virtual asynStatus write(epicsUInt32 value, epicsUInt32 mask){ 00138 return pasynUInt32DigitalSyncIO->write(pasynUserSyncIO_, value, mask, timeout_); 00139 }; 00143 virtual asynStatus setInterrupt(epicsUInt32 mask, interruptReason reason) { 00144 return pasynUInt32DigitalSyncIO->setInterrupt(pasynUserSyncIO_, mask, reason, timeout_); 00145 }; 00148 virtual asynStatus clearInterrupt(epicsUInt32 mask) { 00149 return pasynUInt32DigitalSyncIO->clearInterrupt(pasynUserSyncIO_, mask, timeout_); 00150 }; 00154 virtual asynStatus getInterrupt(epicsUInt32 *mask, interruptReason reason) { 00155 return pasynUInt32DigitalSyncIO->getInterrupt(pasynUserSyncIO_, mask, reason, timeout_); 00156 }; 00160 virtual asynStatus registerInterruptUser(interruptCallbackUInt32Digital pCallback, epicsUInt32 mask) { 00161 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00162 pCallback, this, mask, &interruptPvt_); 00163 }; 00164 private: 00165 asynUInt32Digital *pInterface_; 00166 }; 00167 00168 00170 class epicsShareClass asynFloat64Client : public asynPortClient { 00171 public: 00178 asynFloat64Client(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00179 : asynPortClient(portName, addr, asynFloat64Type, drvInfo, timeout) { 00180 pInterface_ = (asynFloat64 *)pasynInterface_->pinterface; 00181 if (pasynFloat64SyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00182 throw std::runtime_error(std::string("pasynFloat64SyncIO->connect failed")); 00183 }; 00185 virtual ~asynFloat64Client() { 00186 pasynFloat64SyncIO->disconnect(pasynUserSyncIO_); 00187 }; 00190 virtual asynStatus read(epicsFloat64 *value) { 00191 return pasynFloat64SyncIO->read(pasynUserSyncIO_, value, timeout_); 00192 }; 00195 virtual asynStatus write(epicsFloat64 value) { 00196 return pasynFloat64SyncIO->write(pasynUserSyncIO_, value, timeout_); 00197 }; 00200 virtual asynStatus registerInterruptUser(interruptCallbackFloat64 pCallback) { 00201 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00202 pCallback, this, &interruptPvt_); 00203 }; 00204 private: 00205 asynFloat64 *pInterface_; 00206 }; 00207 00208 00210 class epicsShareClass asynOctetClient : public asynPortClient { 00211 public: 00218 asynOctetClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00219 : asynPortClient(portName, addr, asynOctetType, drvInfo, timeout) { 00220 pInterface_ = (asynOctet *)pasynInterface_->pinterface; 00221 if (pasynOctetSyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00222 throw std::runtime_error(std::string("pasynOctetSyncIO->connect failed")); 00223 }; 00225 virtual ~asynOctetClient() { 00226 pasynOctetSyncIO->disconnect(pasynUserSyncIO_); 00227 }; 00232 virtual asynStatus write(const char *buffer, size_t bufferLen, size_t *nActual) { 00233 return pasynOctetSyncIO->write(pasynUserSyncIO_, buffer, bufferLen, timeout_, nActual); 00234 }; 00240 virtual asynStatus read(char *buffer, size_t bufferLen, size_t *nActual, int *eomReason) { 00241 return pasynOctetSyncIO->read(pasynUserSyncIO_, buffer, bufferLen, timeout_, nActual, eomReason); 00242 }; 00251 virtual asynStatus writeRead(const char *writeBuffer, size_t writeBufferLen, char *readBuffer, size_t readBufferLen, 00252 size_t *nBytesOut, size_t *nBytesIn, int *eomReason) { 00253 return pasynOctetSyncIO->writeRead(pasynUserSyncIO_, writeBuffer, writeBufferLen, readBuffer, readBufferLen, 00254 timeout_, nBytesOut, nBytesIn, eomReason); 00255 }; 00257 virtual asynStatus flush() { 00258 return pasynOctetSyncIO->flush(pasynUserSyncIO_); 00259 }; 00263 virtual asynStatus setInputEos(const char *eos, int eosLen) { 00264 return pasynOctetSyncIO->setInputEos(pasynUserSyncIO_, eos, eosLen); 00265 }; 00270 virtual asynStatus getInputEos(char *eos, int eosSize, int *eosLen) { 00271 return pasynOctetSyncIO->getInputEos(pasynUserSyncIO_, eos, eosSize, eosLen); 00272 }; 00276 virtual asynStatus setOutputEos(const char *eos, int eosLen) { 00277 return pasynOctetSyncIO->setOutputEos(pasynUserSyncIO_, eos, eosLen); 00278 }; 00283 virtual asynStatus getOutputEos(char *eos, int eosSize, int *eosLen) { 00284 return pasynOctetSyncIO->getOutputEos(pasynUserSyncIO_, eos, eosSize, eosLen); 00285 }; 00288 virtual asynStatus registerInterruptUser(interruptCallbackOctet pCallback) { 00289 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00290 pCallback, this, &interruptPvt_); 00291 }; 00292 private: 00293 asynOctet *pInterface_; 00294 }; 00295 00296 00298 class epicsShareClass asynInt8ArrayClient : public asynPortClient { 00299 public: 00306 asynInt8ArrayClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00307 : asynPortClient(portName, addr, asynInt8ArrayType, drvInfo, timeout) { 00308 pInterface_ = (asynInt8Array *)pasynInterface_->pinterface; 00309 if (pasynInt8ArraySyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00310 throw std::runtime_error(std::string("pasynInt8ArraySyncIO->connect failed")); 00311 }; 00313 virtual ~asynInt8ArrayClient() { 00314 pasynInt8ArraySyncIO->disconnect(pasynUserSyncIO_); 00315 }; 00320 virtual asynStatus read(epicsInt8 *value, size_t nElements, size_t *nIn) { 00321 return pasynInt8ArraySyncIO->read(pasynUserSyncIO_, value, nElements, nIn, timeout_); 00322 }; 00326 virtual asynStatus write(epicsInt8 *value, size_t nElements) { 00327 return pasynInt8ArraySyncIO->write(pasynUserSyncIO_, value, nElements, timeout_); 00328 }; 00331 virtual asynStatus registerInterruptUser(interruptCallbackInt8Array pCallback) { 00332 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00333 pCallback, this, &interruptPvt_); 00334 }; 00335 private: 00336 asynInt8Array *pInterface_; 00337 }; 00338 00339 00341 class epicsShareClass asynInt16ArrayClient : public asynPortClient { 00342 public: 00349 asynInt16ArrayClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00350 : asynPortClient(portName, addr, asynInt16ArrayType, drvInfo, timeout) { 00351 pInterface_ = (asynInt16Array *)pasynInterface_->pinterface; 00352 if (pasynInt16ArraySyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00353 throw std::runtime_error(std::string("pasynInt16ArraySyncIO->connect failed")); 00354 }; 00356 virtual ~asynInt16ArrayClient() { 00357 pasynInt16ArraySyncIO->disconnect(pasynUserSyncIO_); 00358 }; 00363 virtual asynStatus read(epicsInt16 *value, size_t nElements, size_t *nIn) { 00364 return pasynInt16ArraySyncIO->read(pasynUserSyncIO_, value, nElements, nIn, timeout_); 00365 }; 00369 virtual asynStatus write(epicsInt16 *value, size_t nElements) { 00370 return pasynInt16ArraySyncIO->write(pasynUserSyncIO_, value, nElements, timeout_); 00371 }; 00374 virtual asynStatus registerInterruptUser(interruptCallbackInt16Array pCallback) { 00375 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00376 pCallback, this, &interruptPvt_); 00377 }; 00378 private: 00379 asynInt16Array *pInterface_; 00380 }; 00381 00382 00384 class epicsShareClass asynInt32ArrayClient : public asynPortClient { 00385 public: 00392 asynInt32ArrayClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00393 : asynPortClient(portName, addr, asynInt32ArrayType, drvInfo, timeout) { 00394 pInterface_ = (asynInt32Array *)pasynInterface_->pinterface; 00395 if (pasynInt32ArraySyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00396 throw std::runtime_error(std::string("pasynInt32ArraySyncIO->connect failed")); 00397 }; 00399 virtual ~asynInt32ArrayClient() { 00400 pasynInt32ArraySyncIO->disconnect(pasynUserSyncIO_); 00401 }; 00406 virtual asynStatus read(epicsInt32 *value, size_t nElements, size_t *nIn) { 00407 return pasynInt32ArraySyncIO->read(pasynUserSyncIO_, value, nElements, nIn, timeout_); 00408 }; 00412 virtual asynStatus write(epicsInt32 *value, size_t nElements) { 00413 return pasynInt32ArraySyncIO->write(pasynUserSyncIO_, value, nElements, timeout_); 00414 }; 00417 virtual asynStatus registerInterruptUser(interruptCallbackInt32Array pCallback) { 00418 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00419 pCallback, this, &interruptPvt_); 00420 }; 00421 private: 00422 asynInt32Array *pInterface_; 00423 }; 00424 00425 00427 class epicsShareClass asynFloat32ArrayClient : public asynPortClient { 00428 public: 00435 asynFloat32ArrayClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00436 : asynPortClient(portName, addr, asynFloat32ArrayType, drvInfo, timeout) { 00437 pInterface_ = (asynFloat32Array *)pasynInterface_->pinterface; 00438 if (pasynFloat32ArraySyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00439 throw std::runtime_error(std::string("pasynFloat64ArraySyncIO->connect failed")); 00440 }; 00442 virtual ~asynFloat32ArrayClient() { 00443 pasynFloat32ArraySyncIO->disconnect(pasynUserSyncIO_); 00444 }; 00449 virtual asynStatus read(epicsFloat32 *value, size_t nElements, size_t *nIn) { 00450 return pasynFloat32ArraySyncIO->read(pasynUserSyncIO_, value, nElements, nIn, timeout_); 00451 }; 00455 virtual asynStatus write(epicsFloat32 *value, size_t nElements) { 00456 return pasynFloat32ArraySyncIO->write(pasynUserSyncIO_, value, nElements, timeout_); 00457 }; 00460 virtual asynStatus registerInterruptUser(interruptCallbackFloat32Array pCallback) { 00461 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00462 pCallback, this, &interruptPvt_); 00463 }; 00464 private: 00465 asynFloat32Array *pInterface_; 00466 }; 00467 00468 00470 class epicsShareClass asynFloat64ArrayClient : public asynPortClient { 00471 public: 00478 asynFloat64ArrayClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00479 : asynPortClient(portName, addr, asynFloat64ArrayType, drvInfo, timeout) { 00480 pInterface_ = (asynFloat64Array *)pasynInterface_->pinterface; 00481 if (pasynFloat64ArraySyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00482 throw std::runtime_error(std::string("pasynFloat64ArraySyncIO->connect failed")); 00483 }; 00485 virtual ~asynFloat64ArrayClient() { 00486 pasynFloat64ArraySyncIO->disconnect(pasynUserSyncIO_); 00487 }; 00492 virtual asynStatus read(epicsFloat64 *value, size_t nElements, size_t *nIn) { 00493 return pasynFloat64ArraySyncIO->read(pasynUserSyncIO_, value, nElements, nIn, timeout_); 00494 }; 00498 virtual asynStatus write(epicsFloat64 *value, size_t nElements) { 00499 return pasynFloat64ArraySyncIO->write(pasynUserSyncIO_, value, nElements, timeout_); 00500 }; 00503 virtual asynStatus registerInterruptUser(interruptCallbackFloat64Array pCallback) { 00504 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00505 pCallback, this, &interruptPvt_); 00506 }; 00507 private: 00508 asynFloat64Array *pInterface_; 00509 }; 00510 00511 00513 class epicsShareClass asynGenericPointerClient : public asynPortClient { 00514 public: 00521 asynGenericPointerClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00522 : asynPortClient(portName, addr, asynGenericPointerType, drvInfo, timeout) { 00523 pInterface_ = (asynGenericPointer *)pasynInterface_->pinterface; 00524 if (pasynGenericPointerSyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00525 throw std::runtime_error(std::string("pasynGenericPointerSyncIO->connect failed")); 00526 }; 00528 virtual ~asynGenericPointerClient() { 00529 pasynGenericPointerSyncIO->disconnect(pasynUserSyncIO_); 00530 }; 00533 virtual asynStatus read(void *pointer) { 00534 return pasynGenericPointerSyncIO->read(pasynUserSyncIO_, pointer, timeout_); 00535 }; 00538 virtual asynStatus write(void *pointer) { 00539 return pasynGenericPointerSyncIO->write(pasynUserSyncIO_, pointer, timeout_); 00540 }; 00543 virtual asynStatus registerInterruptUser(interruptCallbackGenericPointer pCallback) { 00544 return pInterface_->registerInterruptUser(pasynInterface_->drvPvt, pasynUser_, 00545 pCallback, this, &interruptPvt_); 00546 }; 00547 private: 00548 asynGenericPointer *pInterface_; 00549 }; 00550 00551 00553 class epicsShareClass asynOptionClient : public asynPortClient { 00554 public: 00561 asynOptionClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00562 : asynPortClient(portName, addr, asynOptionType, drvInfo, timeout) { 00563 pInterface_ = (asynOption *)pasynInterface_->pinterface; 00564 if (pasynOptionSyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00565 throw std::runtime_error(std::string("pasynOptionSyncIO->connect failed")); 00566 }; 00568 virtual ~asynOptionClient() { 00569 pasynOptionSyncIO->disconnect(pasynUserSyncIO_); 00570 }; 00575 virtual asynStatus getOption(const char *key, char *value, int maxChars) { 00576 return pasynOptionSyncIO->getOption(pasynUserSyncIO_, key, value, maxChars, timeout_); 00577 }; 00581 virtual asynStatus setOption(const char *key, const char *value) { 00582 return pasynOptionSyncIO->setOption(pasynUserSyncIO_, key, value, timeout_); 00583 }; 00584 private: 00585 asynOption *pInterface_; 00586 }; 00587 00588 00590 class epicsShareClass asynEnumClient : public asynPortClient { 00591 public: 00598 asynEnumClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00599 : asynPortClient(portName, addr, asynEnumType, drvInfo, timeout) { 00600 pInterface_ = (asynEnum *)pasynInterface_->pinterface; 00601 if (pasynEnumSyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00602 throw std::runtime_error(std::string("pasynEnumSyncIO->connect failed")); 00603 }; 00605 virtual ~asynEnumClient() { 00606 pasynEnumSyncIO->disconnect(pasynUserSyncIO_); 00607 }; 00614 virtual asynStatus read(char *strings[], int values[], int severities[], size_t nElements, size_t *nIn) { 00615 return pasynEnumSyncIO->read(pasynUserSyncIO_, strings, values, severities, nElements, nIn, timeout_); 00616 }; 00622 virtual asynStatus write(char *strings[], int values[], int severities[], size_t nElements) { 00623 return pasynEnumSyncIO->write(pasynUserSyncIO_, strings, values, severities, nElements, timeout_); 00624 }; 00625 private: 00626 asynEnum *pInterface_; 00627 }; 00628 00629 00631 class epicsShareClass asynCommonClient : public asynPortClient { 00632 public: 00639 asynCommonClient(const char *portName, int addr, const char *drvInfo, double timeout=DEFAULT_TIMEOUT) 00640 : asynPortClient(portName, addr, asynCommonType, drvInfo, timeout) { 00641 pInterface_ = (asynCommon *)pasynInterface_->pinterface; 00642 if (pasynCommonSyncIO->connect(portName, addr, &pasynUserSyncIO_, drvInfo)) 00643 throw std::runtime_error(std::string("pasynCommonSyncIO->connect failed")); 00644 }; 00646 virtual ~asynCommonClient() { 00647 pasynCommonSyncIO->disconnect(pasynUserSyncIO_); 00648 }; 00652 virtual void report(FILE *fp, int details) { 00653 pasynCommonSyncIO->report(pasynUserSyncIO_, fp, details); 00654 }; 00656 virtual asynStatus connect() { 00657 return pasynCommonSyncIO->connectDevice(pasynUserSyncIO_); 00658 }; 00660 virtual asynStatus disconnect() { 00661 return pasynCommonSyncIO->disconnectDevice(pasynUserSyncIO_); 00662 }; 00663 private: 00664 asynCommon *pInterface_; 00665 }; 00666 00667 #endif