Changelog

[1.0.1] - 2024-01-11

Fixed

  • STD dispatcher incorrectly schedules repeating timer event (https://github.com/igor-krechetov/hsmcpp/pull/8)

  • Race condition when starting timers with Qt Dispatcher (used invalid context for lambda function)

  • Add libc version check for test_memory_footprint test application

[1.0.0] - 2023-05-25

Updated

  • add activeStates argument to failedTransition callback

  • optimize HSM::impl::isSubstateOf()

Fixed

  • overriding HSM and dispatcher callbacks didn’t work

  • made logHsmAction() thread-safe

[0.38.0] - 2023-05-18

Updated

  • added new constructors for Variant class (initialization from vector, list and map)

  • signifficantly improved performance of Variant container by removing unnecesary memory copy/reallocations

Fixed

  • debug traces were not fully disabled by default

[0.37.0] - 2023-05-12

Added

  • HierarchicalStateMachine::dispatcher() method

  • support for enqued actions in dispatcher (see IHsmEventDispatcher::enqueueAction())

Fixed

  • deleting HSM instance while it still had pending events sometimes cased crash

[0.36.0] - 2023-05-03

Updated

  • Fixed clang-tidy warnings

  • Reduced complexity of some large methods in HsmImpl

  • Moved private enums and structs from HsmImpl to a separate file

  • Moved HistoryType, TransitionType, StateActionTrigger, StateAction enums from HierarchicalStateMachine class to HsmTypes.hpp (breaks interface)

  • update Coverity tools to 2022.12.2

[0.35.0] - 2023-04-26

Added

  • Support for custom types in Variant container

  • New Variant::clear() method

  • New Variant::isEmpty() method

  • Implemented bool,string to number conversion in toInt64(), toUInt64(), toDouble()

  • Implemented string to bool conversion in toBool()

  • Implemented vector,list to bytearray conversion in toByteArray()

  • New Variant’s methods getByteArray(), getVector(), getList(), getMap(), getPair() for type-safe fast access to internal data

Updated

  • scxml2gen now generates timers if it finds events with “ONTIMER” prefix (before it generated timers only if they were used in state actions)

  • Removed unsafe memory management in Variant class

  • Variant’s toByteArray(), toVector(), toList(), toMap(), toPair() methods replaced with type-safe versions

  • Removed unsafe Variant::value() method

  • Refactoring and coverage increase of unit tests for Variant class.

  • VariantDict_t renamed to VariantMap_t

  • Variant::Type::DICTIONARY renamed to Variant::Type::MAP

  • Varaint::make() and constructor for PAIR type replaced with a template version

Fixed

  • Variant’s logic for comparing double values

  • Variant’s logic for comparing numeric values of different types

[0.34.0] - 2023-04-07

Added

  • added version.hpp with library version

Updated

  • improved behavior of Final States when working with Parallel states

  • unit-tests refactoring (added BaseAsyncHsm class and removed AsyncHsm)

  • improved async logic in unit-tests (multithreaded, parallel)

Fixed

  • Coverity issue in HierarchicalStateMachine::Impl::initialize (unhandled exception when calling shared_from_this(), but it was not possible due to Impl always being created as a shared pointer)

  • rare dead-lock in HsmEventDispatcherSTD destructor

  • wait_for() in std based ConditionVariable was not working correctly without stopWaiting callback

[0.33.0] - 2023-03-23

Added

  • isTimerRunning API

Fixed

  • added thread safety for Dispatcher timer API

[0.32.0] - 2023-03-22

Fixed

  • Deleting HSM before dispatcher was able to process all pending events resulted in a crash

  • Deleting dispatcher resulted in undefined behavior

Updated

  • Enabled arduino-lint in CI

  • HSM now does not take ownership of dispatcher instance

[0.31.0] - 2023-03-16

Added

  • ArduinoIDE support

[0.30.2] - 2023-03-15

Updated

  • scxml2gen: changed generated event, state, timer values from const to constexpr

Fixed

  • dispatcher timer APIs were not thread-safe

[0.30.1] - 2023-03-14

Added

  • Variant::toPair() method

  • Variant::isPair() method

Fixed

  • calling HsmEventDispatcherGLibmm::start() multiple times is now safe

  • calling transition() or similar API before initialize() or after release() caused a crash

Updated

  • documentation for all public classes

[0.30.0] - 2023-02-28

Updated

  • removed template from HierarchicalStateMachine and separated implementaion (BREAKS INTERFACE)

  • state, event and timer enums were replaced with integer type (no extra work is needed if scxml generation is used)

[0.29.1] - 2023-02-09

Added

  • Arudino examples

Updated

  • removed ArduinoLog dependency

Fixed

  • scxml2gen: generation of PlantUML diagrams was broken when state machine had conditional entry transition without event

  • fixed FreeRTOS build

[0.29.0] - 2023-02-03

Added

  • timers support for std, glib dispatchers

  • interrupts safety for Arduino dispatcher

Fixed

  • std dispatcher didn’t wake up when events were emited from interrupts

Updated

  • CriticalSection was renamed into InterruptsFreeSection

  • added a new CriticalSection class

[0.28.2] - 2023-02-02

Fixed

  • applied clang format to all code

  • scxml2gen: fixed MISRA warnings in template code

[0.28.1] - 2023-02-02

Fixed

  • scxml2gen: changed template to reduce stack consumption during HSM initialization on Arduino

[0.28.0] - 2023-02-01

Added

  • interrupts support for std, glib, glibmm and qt dispatchers

Updated

  • updated build logic based on HSMBUILD_PLATFORM. “windows” and “posix” values added

[0.27.3] - 2023-01-26

Fixed

  • MISRA warnings

  • lock issue in async tests (01-30)

[0.27.2] - 2023-01-25

Fixed

  • onEntry and onState callbacks of initial HSM state are not called

[0.27.1] - 2023-01-22

Added

  • scxml2gen: new generate_code and generate_diagram API for usage from Python scripts

Updated

  • change getStateName, getEventName to be const

Fixed

  • scxml2gen: generation of entry transitions with condition but without an event

Build

  • CI scripts and github actions

  • PlatformIO build integration

[0.27.0] - 2023-01-20

Added

  • Arduino support

  • upgraded gtest to 1.13.0

  • unit tests description (states)

Fixed

  • scxml2gen: generation of self-transitions

[0.26.0] - 2023-01-02

Added

  • support for internal/external self-transitions

[0.25.0] - 2022-12-28

Fixed

  • improved handling of parent states:

    • parent states are now kept active when activating substates

    • parent state’s enter/exit callbacks are called correctly during transitions

  • hsmdebugger was not generating diagrams after update to scxml2gen api

[0.24.6] - 2022-09-27

Added

  • support for final states in scxml2gen

[0.24.5] - 2022-08-16

Fixed

  • install missing os headers after build

[0.24.4] - 2022-07-03

Added

  • timers support for Qt dispatcher

[0.24.3] - 2022-07-02

Added

  • support for Qt6

[0.24.2] - 2022-06-12

Fixed

  • bool type support in hsmcpp::variant (for compilers where bool is treated as int)

[0.24.1] - 2022-06-07

Fixed

  • build fix for hsm timers in FreeRTOS

[0.24.0] - 2022-06-07

Added

  • FreeRTOS support

  • abstraction layer for platform specific features (threading)

  • support for transitions from signals/interrupts (FreeRTOS)

  • unit tests bringup for FreeRTOS

Fixed

  • hsm initialization

  • fixed dispatcher test for Qt platform

[0.23.0] - 2022-05-24

Added

  • new API to interact with timers (start, stop, restart)

[0.22.0] - 2022-02-25

Added

  • support for final states & exit points (library only)

[0.21.2] - 2022-01-24

Added

  • scxml2gen is now correctly installed after build

  • improved cmake and pkg-config usability

  • added better CMake script examples

Fixed

  • fixed support for C++11

[0.21.1] - 2021-11-10

Fixed

  • incorrect code generation from scxml

[0.21.0] - 2021-11-04

Added

  • support for condition callbacks in entry transitions

Fixed

  • scxml2gen: multiple conditional entry transitions were not handled correctly

[0.20.0] - 2021-09-30

Added

  • new state action: transition. It makes possible go initiate HSM transitions from within HSM.

[0.19.2] - 2021-09-09

Added

  • new Variant constructors

  • Variant unit-tests (basic)

[0.19.1] - 2021-09-01

Fixed

  • recursive lock in GLib base dispatcher

[0.19.0] - 2021-08-30

Added

  • support for vector and list types to Variant (VariantVector_t, VariantList_t)

Fixed

  • deadlock in GLib dispatcher

  • fixed build with enabled traces

[0.18.1] - 2021-08-20

Added

  • Variant::toMap()

  • Variant::isMap()

Updated

  • improved dispatcher emit logic when used with multiple HSM instances

Fixed

  • fixed 05_timers_generated example

[0.18.0] - 2021-08-19

Added

  • added posibility to set expected condition value for transitions

Updated

  • improved internal HSM traces

[0.17.1] - 2021-08-19

Added

  • Variant::make to convert std::map to VariantMap_t

Updated

  • improve VariantMap_t to accept Variant as a key

[0.17.0] - 2021-08-18

Added

  • callback for notifications about failed transitions

[0.16.0] - 2021-08-13

Added

  • timers support to hsmcpp

  • timers support in GLibmm dispatcher

  • scxml2gen: support of timers

  • scxml2gen: improve state description format when generating plantuml diagram

  • hsmdebugger: support of timers

[0.15.0] - 2021-08-06

Fixed

  • added namespace for hsmcpp

[0.14.4] - 2021-08-04

Added

  • BYTEARRAY type to Variant

Fixed

  • fix build issue related with no default constructor for TransitionInfo

[0.14.3] - 2021-08-03

Fixed

  • fix build warnings

  • renamed trace macroses to avoid potential name conflicts

[0.14.1] - 2021-06-13

Updated

  • memory footprint test

  • add new template to use hsmcpp directly from GitHub

  • diagrams for wiki (history)

Fixed

  • fix build script to explicitly use python 3

  • fix variables export

[0.14.1] - 2021-06-05

Added

  • support for history states in scxml2gen

  • example for history usage

  • generateHsmDiagram() CMake function

Fixed

  • hsmdebugger: selecting jar file for plantuml wasn’t working on Ubuntu

[0.14.0] - 2021-05-31

Added

  • support for history states (not supported in generator yet)

Fixed

  • handle scenario when initial state of HSM has substates (from now on initialize() API must be called after defining HSM structure)

[0.13.4] - 2021-05-24

Added

  • HSMBUILD_DEBUGGING build option

  • diagrams for wiki

[0.13.3] - 2021-05-17

Fixed

  • crash in hsmdebugger while quickly switching frames

[0.13.2] - 2021-05-16

Added

  • support for Windows build

  • simple build scripts

Fixed

  • scxml2gen: added support of Python 3 versions before 3.8 (due to a bug in XML parser)

[0.13.1] - 2021-05-03

Added

  • hsmdebugger: app icon

  • hsmdebugger: setting to set plantuml path

  • hsmdebugger: startup scripts for Windows and Linux

Fixed

  • hsmdebugger: Windows support

[0.13.0] - 2021-04-30

Added

  • hsmdebugger: search frames feature

  • hsmdebugger: settings

  • hsmdebugger: caching of generated images

Fixed

  • crash caused by mistake in enableHsmDebugging()

[0.12.1] - 2021-04-25

Added

  • add configurable hsm dump path

  • scxml2gen: add support to blocks generation

  • scxml2gen: update template

  • scxml2gen: add generation of getStateName(), getEventName() functions

  • hsmdebugger: add recent files

  • examples: simplify 03_debugging

[0.12.0] - 2021-04-19

Added

  • initial version of hsmdebugger

[0.11.0] - 2021-04-14

Added

  • support for parallel states and transitions

  • scxml2gen: support for parallel states and transitions

[0.10.0] - 2021-04-04

Added

  • support for conditional entrypoints in states ## [0.9.0] - 2021-03-30 ### Added

  • scxml2gen: support for include of external files

[0.8.0] - 2021-03-27

Added

  • scxml2gen: PlantUML state diagrams generator (from SCXML)

  • scxml2gen: support for uppercase generator variables in templates

[0.7.0] - 2021-03-26

Added

  • SCXML based code generator

  • CMake function to use code generation from CMakeLists

  • Example of generator usage (02_generated)

[0.6.0] - 2021-03-23

Added

  • Qt based event dispatcher

  • Qt based example

Updated

  • improve log macroses

  • rename emit() -> emitEvent() in IHsmEventDispatcher (due to name collision with Qt)

[0.5.1] - 2021-03-23

Added

  • cmake templates showing how to include hsmcpp in a project

  • new examples

  • HsmEventDispatcherSTD::join()

  • HsmEventDispatcherSTD::stop()

Updated

  • improved build configuration

  • rename build options: HSMBUILD_VERBOSE, HSMBUILD_STRUCTURE_VALIDATION, HSMBUILD_THREAD_SAFETY, HSMBUILD_DISPATCHER_GLIB, HSMBUILD_DISPATCHER_GLIBMM, HSMBUILD_DISPATCHER_STD, HSMBUILD_TESTS, HSMBUILD_EXAMPLES

  • dispatchers are now compiled into separate modules (with own pkg-config files)

  • examples and tests are compiled based on enabled dispatchers

  • move pkg-config templates to a subfolder (/pkgconfig)

[0.5.0] - 2021-03-17

Added

  • glib based event dispatcher

Updated

  • reduce output from gtests

  • improve gtest CMakeLists

Fixed

  • improve thread safety in all available dispatchers

  • assigning same Variant object to itself

  • move dispatchers creation to main thread in gtests

Build

  • new CMake build option: DISPATCHER_GLIBMM ## [0.4.2] - 2021-03-10 ### Added

  • add timeout to sync transitions

  • add transitionSync() API for convenience

Updated

  • remove HsmHandlerClass from HierarchicalStateMachine class template parameters

  • rename HsmEventDispatcherGLib -> HsmEventDispatcherGLibmm

[0.4.1] - 2021-03-08

Updated

  • thread safety for HSM

Build

  • New CMake build options: THREAD_SAFETY

[0.4.0] - 2021-03-05

Added

  • std::thread based event dispatcher

Updated

  • Dispatchers should now be set using initialize() methond of HSM. If dispatcher is not running yet it will be automatically started.

Fixed

  • Fix a race-condition bug in AsyncHsm (unittests).

Build

  • New CMake build options: DISPATCHER_STD, BUILD_TESTS, BUILD_EXAMPLES

  • Unittests are now compiled into two separate binaries: GLib and STD based.

[0.3.0] - 2021-03-04

Added

  • Support for custom event dispatchers. Allows integration of HSM with any event dispatching mechanism used on the project.

  • GLibmm event dispatcher

Fixed

  • Remov unnecessary event emit during transition

Build

  • CMake build options: VERBOSE, STRUCTURE_VALIDATION, DISPATCHER_GLIB

[0.2.0] - 2021-03-02

Added

  • Support for substate entry points

  • Conditional transitions

  • Lambda functors can now be used as callbacks

[0.1.0] - 2021-02-15

Added

  • Initial commit of HSMCPP. This version is usable, but requires some code cleanup.