Experimental Physics and Industrial Control System
Folks,
asyn R4-21 is now available. Links to the new documentation, release notes and tar file can be found here:
http://www.aps.anl.gov/epics/modules/soft/asyn/
asyn is also available via the APS Subversion repository here:
https://svn.aps.anl.gov/epics/asyn/
This is from the R4-21 release notes:
- asynDriver
Restored the original versions of pasynManager->lockPort and unlockPort that were used in asyn prior to R4-14. These versions just call epicsMutexLock and epicsMutexUnlock. In R4-14 these versions were replaced with versions that queued requests to lock the port. The R4-14 versions fixed a problem with the interfaces/asynXXXSyncIO functions, but it has become clear that the original versions are useful in some circumstances. The change was done as follows:
The lockPort and unlockPort functions in R4-20 were renamed to pasynManager->queueLockPort and queueUnlockPort.
The interfaces/asynXXXSyncIO functions were all changed to call the queueLockPort and queueUnlockPort, so they function identically to how they have since R4-14.
The versions of lockPort and unlockPort that existed prior to R4-14 were restored to pasynManager.
Changed the report() function so that if details<0 then asynManager does not print information for each device (address). It calls pasynCommon->report(-details) in this case so driver report functions will not be affected.
Changed the asynTrace print, printIO, vprint, vprintIO functions so they use EPICS_PRINTF_STYLE. This causes the GCC (version 3.0 and higher) and clang compilers to check the agreement of format strings with function arguments when using asynPrint() and asynPrintIO(), just as they do with printf(). This is very helpful in finding errors, and uncovered a number in asyn itself, which have been fixed.
- devGpib
Changed event code readback to support both the original 'short' VAL field (EPICS 3.14 and earlier) and the new 'string' VAL field (EPICS 3.15 and later).
Added support for DSET_AIRAW and DSET_AORAW definitions.
Replace strcpy with strncpy in devCommonGpib.c to reduce possibility of errors. Use NELEMENTS macro in devSkeletonGpib.c rather than hardcoding. Thanks to Andrew Johnson for these.
- devEpics
Improved the initMbboDirect function in devAsynUInt32Digital.c. If an initial value is read successfully from the driver it now sets the .Bn fields in the record. It also sets VAL rather than RVAL and returns 2 rather than 0. Thanks to Andrew Johnson for this.
Fixed a bug in devAsynUInt32Digital.c, which was missing a call to epicsMutexLock in interruptCallbackInput. Thanks to Angus Gratton for this fix.
Fixed a bug in devAsynXXXArray.h to handle case of multiple interrupt callbacks between record processing. Previously this would result in a call to the asynXXXArray->read() in the driver, which is not correct. The asynXXXArray device support does not have a ring buffer, so multiple interrupt callbacks between processing results in data being "lost", i.e. the record processes more than once with the same data. This is not really an error, but we now issue an ASYN_TRACEIO_DEVICE warning. This is analogous to ring buffer overflow for non-array data types.
Changed the "ring buffer overflow" messages from "ASYN_TRACE_ERROR" to "ASYN_TRACEIO_DEVICE", for devAsynFloat64. This was done for other device support in R4-20, but float64 was overlooked.
- Interfaces
Added writeRead and writeReadOnce functions to the asynGenericPointer interface. Thanks to Florian Feldbauer for this addition.
Fixed a bug in asynCommonSyncIO that could cause a crash if the connect() function returned an error.
- asynPortDriver
Added support for the asynOption interface. Added code to demonstrate and test this to the testErrors test application.
Added new method asynPortDriver::flushOctet(), which implements asynOctet::flush(). The base class implementation reproduces the behavior of asynOctetBase.c::flushIt, i.e. it calls pasynOctet->read() repeatedly with a timeout of 0.05 seconds until it gets no data back. But now drivers can implement their own version of flush() if a different behavior is desired, which was not previously possible.
Changed the code so that the length of string parameters returned in readOctet and octetCallback is now strlen(string)+1, rather than strlen(string). The length thus now includes the terminating nil. This fixes problems with clients that request long strings or subscribe to monitors with a length of 0, but don't check for a nil terminator.
Changed the meaning of the "details" argument in the asynPortDriver::report() function. The new meaning is:
0 = no details
>=1: print details for parameter list (address) 0
>=2: print details for all parameters lists (addresses)
>=3: print interrupt callback information
Changed the connect() and disconnect() methods to return an error if the device address specified by the pasynUser is invalid (i.e. <-1 or >MAX_ADDR-1).
Fixed problem that was causing dynamic builds (e.g. SHARED_LIBRARIES=YES) to fail on Windows.
- asynPortDriver/exceptions
Changes to allow compiling with the old vxWorks Tornado 2.0.2.1 compiler. Thanks to Dirk Zimoch for this fix.
- Other
Many minor changes to avoid compiler warnings on Linux, vxWorks, and WIN32. Thanks to Dirk Zimoch for many of these.
Mark
- Navigate by Date:
- Prev:
Re: trying to compile snmp for Wiener PL512 crate application James F Ross
- Next:
Re: gateway: strange configuration Martin L. Smith
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
<2013>
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re: EDM Text Control Widget Motif behavior Isadoro Carlino
- Next:
Rounding in conversion of ao record haquin
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
<2013>
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024