
Note: the release notes are a work in progress - currently focusing on the release notes for the most recent releases, and back filling the older release notes as and when I find the time.
1.8
1.7
1.6
1.5
1.4
1.3
1.2
1.1
The introduction of the 1.8 series introduces a change as to how the ACAI client uses the eventMask specified using the setEventMask method. If the eventMask includes EventProperty, a separate DBR_CTRL_XXXX property subscription is created which means the client will receive a full meta data update if/when the a property value (such as EGU, precsison, enumeration values) change.
The call back function and overideable dataUpdate method reflect this wiht the parameter name changing for isFirstUpdate to isMetaUpdate.
Note: the default event mask is is unchanged and still is: EventValue | EventAlarm. If EventProperty is not used, then there is no change of behaviour.
Release date: 17-12-2025
The changes are:
Event mask handling as described in paragraph 1.8 above.
All code files updated to use the SPDX-License nothation.
Note, this is now explicity LGPL-3.0-only.
Removed the mutual include between ACAI::Client_Set and
ACAI::Abstract_Client_User.
The ACAI::Client_Set now no longer “knows about” the
ACAI::Abstract_Client_User class.
This avoids a seg fault error when running test_abstract_user.
Added test.sh script to run all three tests.
The introduction of the 1.7 series is due to how the ACAI client stores and uses PV names internally. Previously used a fixed length char array based on the maximum IOC record name length. It now uses a std::string which allow longer PV names, which in turn caters for extended json filter qualifiers and other Channel Access servers not subject to the record name length limit.
Release date: 29-03-2025
acai now uses POSIX_TIME_AT_EPICS_EPOCH out of epicsTime.h instead of own copy.
acai_monitor changes are:
Improved how pdf manual is generated, esp. with respect to failures. Temporary files are now suffixed by .local, and hence ignored by gitignore.
Release date: 17-07-2023
Configure doxygen to create a PDF manual. This requires latex. This change will not fail the overall build if latex not available.
Release date: 10-08-2022
Updated from GPL to LGPL license - no functional changes.
Added methed to get/put boolean and get/put boolean arrays. For the gut functions checks if value is equal/not equal 0. For the put functions, writes 0 or 1 as DBF_LONG.
Improved getString for float values.
Release date: 10-08-2022
Added a new function getEnumerationIndex (string to int) function which is the
reverse of getEnumeration (int to string), i.e. it allow an enumeration state
string to be converted to in integer (or returns -1 when no match).
Note: the conversion is strict in that it is case and white space
sensitive.
Modified the minFieldValue/maxFieldValue functions to refect the number of enumeration states when the field type is DBF_ENUM.
Release date: 18-07-2022
Fixed up the total stuff up with the initilisation of an internal ACAI::Client private data class. This updated avoids segmentation faults on platforms such as CentOS Stream 8 and Rocky Linux (however I got-away-with-it on CentOS 7).
Also now store the PV’s hostname:port using a standard string (as opposed to a traditional char buffer).
The obsolete ACAI_MAX_PVNAME_LENGTH macro has been removed.
Release date: 03-07-2022
The ACAI client now stores PV names in a std::string as opposed to a plain char buffer array of size defined by PVNAME_STRINGSZ, i.e. 61. The 61, or 60 limit after exluding the zero, is the IOC’s record name limit and does not allow for field names and/or additional filters and qualifiers, e.g.
RECORD_NAME.VAL[10001:20001]
Also the 60 limit does not necessarily apply to other Channel Access servers.
The API for putByteArray has changed from:
bool putByteArray (void* valueArray, const unsigned int count);
to:
bool putByteArray (const void* valueArray, const unsigned int count);
This should have no practical impact.
The acai_monitor program now take an -l, –longstr option which tells the program to treat arrays of DBF_CHAR as long strings, i.e. similar to the caget -S option.
The SHRLIB_VERSION in the Makefile is now just the major and minor release numbers, i.e. is defined as:
SHRLIB_VERSION = 1.7
and not as:
SHRLIB_VERSION = 1.7.1
The acai_private_common.h header file is no longer “built” into the <top>/include directory.
The introduction of the 1.6 series is due to a modification to how the buffered callback queue is managed if/when the queue gets too large.
Release date: 14-03-2022
Added two new client functions that return the minimum and maximum values supported by the host’s field type:
double minFieldValue () const;
double maxFieldValue () const;
Example: -32768 and +32767 for the DBF_SHORT field type. Note: for DBF_CHAR, the range encompasses both CHAR and UCHAR, i.e. -128 and +255 respectively.
Also added a function to provide the CA protocol version:
static ACAI::ClientString protocolVersion ();
and aca_monitor now uses this when outputing version information.
Also fixed up function spelling typo in many comments.
Added the acai logo to the doxygen generated html files.
Release date: 20-10-2021
Fixed a bug and potential segment faults when writing an array of type DBF_STRING.
Also use a better marco name, BUILDING_ACAI_LIBRARY, to indicate if/when we are building the shared library, as opposed to building against the the shared library header file.
Release date: 02-05-2021
The clientFieldTypeImage function (out of acai_client_types) now returns “DBF_STRING”, “DBF_SHORT” etc, as opposed to “STRING”, “SHORT” etc.
Re-modified the acai_client getString function to use %e for very small or very large numbers, and %f for regular numbers. The threshold between use of %e or %f is driven by the precision.
Release date: 24-02-2021
Modified buffered_callbacks to check for multiple updates for a channel and discard the updates if/when queue length exceeds threshold.
The getString method now uses the %g format, as opposed to the %f format, for floats and doubles. This is really sensible for large numbers.
acai_monitor option processing now allows combined “-mg” or “-gm” in lieu of “-m -g”
Fixed a number of comment spelling/typo errors.
Release notes relocated to the andrewstarritt.github.io repository and converted to mark-down. Also some, but not all, release notes have been back-filled. The README.md now links to the new release notes.
The introduction of the 1.5 series was due to a change in the behavour of the putString function.
Released: 27-08-2020
Added the following function to acai client.
bool putByteArray (void* valueArray, const unsigned int count);
This writes a traditional byte array value to the channel. Under the covers, this uses the DBF_CHAR field type.
Released: 04-07-2020
Improved acai_monitor option processing and help message.
Made acai_private_common.h public for test_csnprintf and added suitable use at your own peril warning - it is still essentially private.
There was no 1.5.6 release - I incremented the version no. twice by mistake.
Update to support MSVC, specifically define snprintf as _snprintf for Released: 14-01-2020
MSVC versions eariler than 1900. Also updated code to eliminate some MSVC warnings.
Released: 24-08-2019
Added the following function to acai client:
static ACAI::Client* cast (void* item);
This function attempts to cast a void* to a Client* and checks the internal magic numbers. It returns NULL if cast fails, similar to dynamic_cast.
The client hostname is now included in acai_monitor meta data output.
Fixed the fuction [sic] typo.
Released: 22-07-2019
Updated to keep MSVC happy, including:
Now include stdlib.h for malloc/free when using mingw.
Updated the configure/RELEASE file to match latest generated by makeBaseApp.pl (out of base-7.0.2)
Released: 29-04-2019
Modified the in logic in putString. For PVs with a DBF type of DBF_CHAR, the PV must have two or more elements in order to be deemed a long string. A single DBF_CHAR (like the .PROC field) are not deemed a long string.
Released: 30-03-2019
Modified the behavior of putString. This will now always write the string data in long string format if the native type if DBF_CHAR irrespective of the isLongString setting and/or PV name ending with a ‘$’. The isLongString setting now just applies to getString.
The introduction of the 1.4 series was due to re-factoring the acai version macros into a separate acai_version.h file
Released: 20-03-2019
Removed another not very help error report (when element count = 0, out of the readSubscribeChannel function).
Released: 18-03-2019
Don’t report errors for zero length updates, these seem to be quite common for transient PVs.
acai_monitor - tidied up info output and added copyright header to main file.
Fixed a few typos in the README.md file and updated email address.
Ran doxygen -u over acai.cfg - mainly comment changes.
Released: 16-12-2018
Released: 02-05-2018
Released: 21-04-2018
Released: 08-04-2018
Released: 28-02-2018
Released: 18-02-2018
Re-organised directory structure
Released: 14-01-2018
Released: 22-10-2017
Released: 21-10-2017
Released: 22-10-2017
Released: 16-08-2017
Released: 27-07-2017
Released: 23-07-2017
Released: 09-07-2017
Released: 08-07-2017
Added to Client_Set
bool areAllChannelsReady ();
bool waitAllChannelsReady (const double timeOut, const double pollInterval = 0.05);
and to Abstract_Client_User
bool areAllRegisteredChannelsReady ();
bool waitAllRegisteredChannelsReady (const double timeOut, const double pollInterval = 0.05);
Added put call back notification. The use of put callback is off by default.
For enumeration types, the upper display and control limit functions now return number of states less one (as opposed to zero).
Function description typo fixes.
Change of API
void rawDataPointer (void* dest, const size_t size,
unsigned int& count) const;
became
size_t getRawData (void* dest, const size_t size,
const size_t offset = 0) const;