Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[3.0.0] - 2026-06-11

Added

  • name property to Node class
  • A DefaultNode that owns a Component when a Node is not defined
  • openjaus::indent function to openjaus/system/String.h
  • Ability to disable the built-in DiscoveryClient functionality through the use of {Component}.DiscoveryClient.Enabled key
  • Initial support for adding clients to a Component
    • Clients implement the IServiceClient interface
    • AbstractServiceClient implements IServiceClient and uses the IClientEvent interface to indicate a client event
  • IComponent interface to be used by clients
  • The following methods to ScaledInteger abstract base class. Changes impact all ScaledInteger derived types.
    • getMinValue method to retrieve the minimum valid value of a ScaledInteger
    • getMaxValue method to retrieve the maximum valid value of a ScaledInteger
    • getScaleFactor method to retrieve the scale factor used to convert a ScaledInteger from its real value to its scale value and vice versa
    • setDouble method to set the value of a scaled integer using a double value
    • asDouble method to get the value of a scaled integer as a double value
    • operator double() method to allow conversion of a scaled integer type to its double value
  • Component::start() method to replace Component::run()
    • Having start and stop methods seem more common that run and stop
  • openjaus::system::FixedCapacityQueue class which only keeps the last N items pushed
    • When item N + 1 is pushed to the queue, item 0 is lost, otherwise it works like a standard queue
  • Additional getter methods to Timer and SimpleWatchdog classes to retrieve the current configuration
  • openjaus::model::AbstractAddressProvider class as base class for custom address providers
  • Support for registering multiple custom address providers

Removed

  • [BREAKING] Remove SystemTree::addOnLocalComponentAddCallback method
  • [BREAKING] Remove SystemTree::removeOnLocalComponentAddCallback method

Changed

  • [BREAKING] Rename protected Component::setAddressProvider to Component::registerAddressProvider and change input parameters
  • Have Component objects point to their owning Node
  • Update to CMake 3.10 as minimum version
  • Update to C++ 14

Deprecated

  • Multiple methods on the ScaledInteger abstract base class. Changes impact all ScaledInteger derived types.
    • setValue method; use ScaledInteger::setDouble instead
    • getValue method; use ScaledInteger::asDouble instead
  • Component::run(); use Component::start() instead

Fixed

  • Minor issues with logging macros to fix output

[2.0.2] - 2025-10-09

Fixed

  • Bug in checking openjaus::model::Connection equality

Added

  • Message::isEqual(const Message* const) method to allow direct comparison between a Message instance and a Message pointer.

[2.0.1] - 2025-07-16

Fixed

  • Bug in StateMachine for transitions added to a State that only contains a nested default state

[2.0.0] - 2024-07-30

Added

  • IAddressProvider interface to allow for custom addressing mechanisms
  • IIdBroker interface to support runtime configuration of ID assignment strategy
  • AbstractIdBroker base class which encapsulates common ID assignment functionality
  • StaticIdBroker which allows for static assignment of an ID
  • InternalIdBroker which allows sharing of an ID among Components within the same process
  • IdMediator which facilitates ID exchange Component instances in the same process
  • Base PresenceVector and ValueSet classes used to derive presence vectors and value sets in messages
  • Support for serial and deserialization of InternalEvent derived classes

Changed

  • Component to configure, start, and stop the IAddressProvider object when necessary
  • [BREAKING] Rename settings keys, defaults, and constants files
  • [BREAKING] Move BUILD_KEY macro to separate settings.h file
  • [BREAKING] Change State::addEntryAction and State::addExitAction to take a std::function instead of an Action object pointer
  • [BREAKING] Moved toLocalTime(DateStamp, TimeStamp) and secondsSinceUnixEpoch(DateStamp, TimeStamp) functions from openjaus/model/fields.h to openjaus/model/TimeUtils.h

Fixed

  • Bug in StateMachine to support states with only transitions on the child default state
  • [BREAKING] Settings defaults and constants namespace; move to under openjaus::settings namespace vs just openjaus

Removed

  • [BREAKING] Newly unused Action and ActionImpl classes/files
  • [BREAKING] Removed numerous classes related to message fields
    • These classes were intended for internal use only but are marked as breaking in case they were inappropriately used by clients
  • [BREAKING] Removed openjaus/model/fields.h file
  • [BREAKING] Removed createMessageByName method from IMessageFactory interface

[1.0.0] - 2023-01-27

Added

  • Initial release -- code split from org.openjaus.sdk.cpp v8.0.0
  • virtual toXml() method to the model::Trigger class which is overridden by all derived Messages and InternalEvents
  • removeMessageCallback() method to model::StateMachine and core_v1_1::services::Transport to allow removing of a callback registered using addMessageCallback()

Changed

  • Add getOjConfigFilePath() to system::Application class to get the path to the ojconf file based on the command-line arguments

Deprecated

  • openjaus::model::SystemTree* Component::getSystemTree() const;

Fixed

  • Incorrect assertion in DatagramSocket::reuseAddress which caused a SocketException to be thrown on success
  • Using BroadcastMethod=BOTH did not enable use of multicast
  • Boolean message field type was packed incorrectly for BOOLEAN_FALSE