Andrew Starritt

ACAI Release Notes        

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.

Release Index

1.8
1.7
1.6
1.5
1.4
1.3
1.2
1.1

1.8

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.

1.8.1

Release date: 17-12-2025

The changes are:

1.7

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.

1.7.6

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.

1.7.5

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.

1.7.4

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.

1.7.3

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.

1.7.2

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.

1.7.1

Release date: 03-07-2022

PV Names

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.

Client API

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.

Long Strings

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.

Shared Libary Version

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

Private Header File

The acai_private_common.h header file is no longer “built” into the <top>/include directory.

1.6

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.

1.6.4

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.

1.6.3

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.

1.6.2

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.

1.6.1

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.

1.5

The introduction of the 1.5 series was due to a change in the behavour of the putString function.

1.5.8

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.

1.5.7

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.

1.5.6

There was no 1.5.6 release - I incremented the version no. twice by mistake.

1.5.5

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.

1.5.4

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.

1.5.3

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)

1.5.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.

1.5.1

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.

1.4

The introduction of the 1.4 series was due to re-factoring the acai version macros into a separate acai_version.h file

1.4.8

Released: 20-03-2019

Removed another not very help error report (when element count = 0, out of the readSubscribeChannel function).

1.4.7

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.

1.4.6

Released: 16-12-2018

1.4.5

Released: 02-05-2018

1.4.4

Released: 21-04-2018

1.4.3

Released: 08-04-2018

1.4.2

Released: 28-02-2018

1.4.1

Released: 18-02-2018

1.3

Re-organised directory structure

1.3.9

Released: 14-01-2018

1.3.8

Released: 22-10-2017

1.3.7

Released: 21-10-2017

1.3.6

Released: 22-10-2017

1.3.5

Released: 16-08-2017

1.3.4

Released: 27-07-2017

1.3.3

Released: 23-07-2017

1.3.2

Released: 09-07-2017

1.3.1

Released: 08-07-2017

1.2

1.2.3

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);

1.2.2

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.

1.2.1

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;

1.1

1.1.4

1.1.3

1.1.2

1.1.1

Last updated: Wed Dec 17 18:59:23 2025