asyn R4-32 is now available.
asyn is available on github here:
tar and zip files are available here:
Soon you will be able to find links to the new documentation and release notes here:
These are the items from the R4-32 release notes:
- Fixes to queueLockPort() which is used by the asynXXXSyncIO interfaces.
Previously queueLockPort() did not specify a timeout value or timeout callback function in the call to pasynManager->queueRequest().
This meant that if a port disconnected while a lock request was queued it would hang until the port reconnected.
For example, calls to the asynXXXSyncIO functions would not return until the port reconnected.
Added a timeout callback for the queueRequest in queueLockPort(). This callback function prints a warning message with ASYN_TRACE_WARNING.
It sets the psynUser->auxStatus field to asynTimeout so that queueLockPort() detects an error and returns an error status without locking the port.
Callers must be sure to check the return status of queueLockPort and not call any port driver functions if it does.
This was already done in all of the asynXXXSyncIO functions.
The timeout for the queueLockPort queue request is determined as follows
- Each port now has a queueLockPortTimeout value. This is set to a default of 2.0 seconds when the port is created.
- This can be changed with a new iocsh command asynSetQueueLockPortTimeout(portName, timeout)
- If the pasynUser->timeout that is passed for a particular I/O operation is larger than the port timeout value this larger value is used instead.
- In traceVprintIOSource if the traceIOMask is 0 or traceTruncateSize ≤ 0 output a newline, otherwise output is garbled
- Replaced "int" with "epicsInt32" in many places for consistency and to avoid compiler warnings on some architectures. Thanks to Scott Baily for this.
- Added new asynPortDriver::getParamType() methods. Thanks to Mark Davis for this.
- Added a new asynPortDriver constructor that removes the paramTableSize argument.
Marked the previous constructor as EPICS_DEPRECATED. Added a new initialize() method that both constructors call to do the actual work.
Changed all of the asynPortDriver example programs and unit test programs to use the new constructor. Thanks to Martin Konrad for this.
- Test application *Main.cpp files
- The main programs in all of the test applications have been updated to the version in the template files in EPICS base 3.15.5.
This includes a call to epicsExit() after the iocsh() returns. This is needed for epicsAtExit to work correctly on some platforms, including Windows.
- Files in configure/ directories
- The Makefile, CONFIG, CONFIG_SITE, and RULES* files in configure/, makeSupport/top/configure/, and documentation/HowToDoSerial/AB300/configure/
have been updated to the versions in the template files in EPICS base 3.15.5. The new versions are better suited to site-specific customization.