asynDriver: Asynchronous Driver Support - Known Problems

April 2004


Release 3-1

exceptionConnect and exceptionDisconnect

If multiple clients must wait because of a connect or disconnect only the first one gets notified. The fix is:

diff -r1.42 asynManager.c
391,392c391,392
<     pexceptionUser  = (exceptionUser *)ellFirst(&pdpCommon->exceptionNotifyList);
<     while(pexceptionUser) {
---
>     while((pexceptionUser  =
>     (exceptionUser *)ellFirst(&pdpCommon->exceptionNotifyList))) {
mercury% pwd
/home/phoebus/MRK/epics/modules/soft/asyn/asyn/asynDriver

POSIX (termios) local serial ports

The following patch must be applied to allow local serial ports to work on POSIX (Solaris, Linux, WIN32-cygwin) machines:

diff -u -r1.10 -r1.11
--- asyn/drvAsynSerial/drvAsynSerialPort.c	15 Apr 2004 21:17:03 -0000	1.10
+++ asyn/drvAsynSerial/drvAsynSerialPort.c	10 May 2004 18:30:57 -0000	1.11
@@ -11,7 +11,7 @@
 ***********************************************************************/
 
 /*
- * $Id: drvAsynSerialPort.c,v 1.10 2004/04/15 21:17:03 norume Exp $
+ * $Id: drvAsynSerialPort.c,v 1.11 2004/05/10 18:30:57 norume Exp $
  */
 
 #include 
@@ -170,7 +170,6 @@
     asynUser *pasynUser = tty->pasynUser;
 
 #if defined(USE_TERMIOS)
-    struct termios termios;
     int baudCode;
     switch (tty->baud) {
     case 50:    baudCode = B50;     break;
@@ -201,10 +200,10 @@
     tty->termios.c_lflag = 0;
     tty->termios.c_cc[VMIN] = 0;
     tty->termios.c_cc[VTIME] = 0;
-    cfsetispeed(&termios,baudCode);
-    cfsetospeed(&termios,baudCode);
+    cfsetispeed(&tty->termios,baudCode);
+    cfsetospeed(&tty->termios,baudCode);
     tty->readPollmsec = -1;
-    if (tcsetattr(tty->fd, TCSADRAIN, &termios) < 0) {
+    if (tcsetattr(tty->fd, TCSADRAIN, &tty->termios) < 0) {
         epicsSnprintf(pasynUser->errorMessage,pasynUser->errorMessageSize,
                                   "Can't set \"%s\" attributes: %s",
                                        tty->serialDeviceName, strerror(errno));

EPICS Base R3.14.6

When building with EPICS Base R3.14.6 or greater, comment out the epicsInterruptibleSyscall.h and epicsInterruptibleSyscall.c lines in asyn/Makefile:

@@ -19,10 +19,10 @@
 SRC_DIRS += $(ASYN)/asynDriver
 INC += asynDriver.h
 INC += epicsInterruptibleSyscall.h
-INC += epicsString1.h
+#INC += epicsString1.h
 asyn_SRCS += asynManager.c
 asyn_SRCS += epicsInterruptibleSyscall.c
-asyn_SRCS += epicsString1.c
+#asyn_SRCS += epicsString1.c
 
 SRC_DIRS += $(ASYN)/asynGpib
 INC += asynGpibDriver.h

Mac OS X (Darwin)

The RPC library on Mac OSD 10.3.3 does not handle device timeouts properly and may cause core dumps. A bug report has been filed with Apple. A workaround is to use the GNU glibc RPC/XDR routines.

Interrupt Callback

If a user callback calls a low level driver with an infinite or very long timeout, there is no way to make the call terminate. Is there a generic way to abort the call?

Greensprings IP488

Does not support GPIB specific functions.

NI1014 VME Gpib driver

This needs to be implemented for asynDriver.

Generic EPICS device support

Think about creating generic support for connecting to EPICS records.

Network Protocols

Consider generic support for various network protocals: Modbus, etherIP, etc.