A C++ template library for embedded applications
Designed and maintained by
Aster Consulting Ltd


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


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

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.

Timer driven message generators (not implemented)

A class that can hook in to a hardware timer service and generate messages at asynchronous intervals.
This 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.

The base for tasks controlled by etl::scheduler.