A C++ template library for embedded applications
MIT licensed
Designed and
maintained by
John Wellbelove

Frameworks

A set of framework template classes to enable the easy creation of systems.

Overview

A set of modular template classes that can be mixed and matched together to provide message routing, finite state
machines, timer driven message generators, routers, buses and cooperative schedulers.
All of the message framework classes are based on etl::imessage_router, allowing combinations of Router/Bus/FSM.

The framework uses CRTP to eliminate the need for most virtual functions and enable direct calls to handler functions.

The class types

Messages
Message type used for router, bus and FSM classes.

Message Router
A class that will automatically route incoming messages to specific handlers based on the message list defined in the
template parameters.

Message Bus

An expansion of the observer pattern in that message routers will be able to subscribe to messages on a bus.
The messages will be either broadcast, to be automatically picked up by any router that has a handler, or addressed to
a particular router or router id.

Finite State Machine

A finite state machine driven by the reception of messages (events) . The incoming messages will be automatically
routed to specific handlers based on the message list defined in the template parameters. Optional 'on entry' and 'on
exit' handlers are available.

Hierarchical Finite State Machine

A hierarchical finite state machine driven by the reception of messages (events) . The incoming messages will be
automatically routed to specific handlers based on the message list defined in the template parameters. Optional 'on
entry' and 'on exit' handlers are available.

State Chart
A finite state machine driven by the reception of events. The incoming event will call the optional action based on a state
table. Optional 'on entry' and 'on exit' handlers can be declared in a state table. Lighter weight than the described FSM
above.

Timer driven message/callback generators
message_timer
message_timer_atomic
message_timer_interrupt
message_timer_locked
callback_timer
callback_timer_atomic
callback_timer_interrupt
callback_timer_locked
A set of classes that can hook in to a hardware timer service and generate messages or callbacks at asynchronous
intervals.
The message timer will likely be used in conjunction with the message router, bus or finite state machine frameworks.

Cooperative Scheduler

A lightweight cooperative multi-tasking scheduler.
Can be used stand-alone or in conjunction with a messaging system such as the ETL's message router or FSM as the
back-end handler. For use when a complex OS or RTOS is overkill.

Tasks
The base for tasks controlled by etl::scheduler.

Callback Service
Allows easier integration of 'C' style events (such as interrupt vectors) and C++ handlers.
It can allow abstraction between low level events such as interrupts and their application dependent handlers.

Messaging class diagram