34#error THIS HEADER IS A GENERATOR. DO NOT INCLUDE.
63#ifndef ETL_MESSAGE_ROUTER_INCLUDED
64#define ETL_MESSAGE_ROUTER_INCLUDED
69#include "message_packet.h"
70#include "message_types.h"
105 :
message_router_exception(ETL_ERROR_TEXT(
"message router:illegal id", ETL_MESSAGE_ROUTER_FILE_ID
"A"), file_name_, line_number_)
127 virtual bool is_null_router()
const = 0;
128 virtual bool is_producer()
const = 0;
129 virtual bool is_consumer()
const = 0;
132 virtual void receive(etl::message_router_id_t destination_router_id,
const etl::imessage&
message)
134 if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
147 virtual void receive(etl::message_router_id_t destination_router_id,
etl::shared_message shared_msg)
149 if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
158 return accepts(msg.get_message_id());
162 etl::message_router_id_t get_message_router_id()
const
164 return message_router_id;
169 NULL_MESSAGE_ROUTER = 255,
171 ALL_MESSAGE_ROUTERS = 253,
172 MESSAGE_BROKER = 252,
173 MESSAGE_ROUTER = 251,
174 MAX_MESSAGE_ROUTER = 249
180 : message_router_id(id_)
186 , message_router_id(id_)
196 etl::message_router_id_t message_router_id;
219 using etl::imessage_router::receive;
230 using etl::imessage_router::accepts;
245 ETL_DEPRECATED
bool is_null_router()
const ETL_OVERRIDE
251 bool is_producer()
const ETL_OVERRIDE
257 bool is_consumer()
const ETL_OVERRIDE
274 return etl::null_message_router::instance();
311 using etl::imessage_router::receive;
322 using etl::imessage_router::accepts;
337 ETL_DEPRECATED
bool is_null_router() const ETL_OVERRIDE
343 bool is_producer() const ETL_OVERRIDE
349 bool is_consumer() const ETL_OVERRIDE
377 etl::message_router_id_t
id,
380 destination.receive(
id, message);
387 etl::message_router_id_t
id,
390 destination.receive(
id, message);
396#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_ROUTER_FORCE_CPP03_IMPLEMENTATION)
400 template <
typename TDerived,
typename... TMessageTypes>
401 class message_router :
public imessage_router
409 : imessage_router(
etl::imessage_router::MESSAGE_ROUTER)
415 : imessage_router(
etl::imessage_router::MESSAGE_ROUTER, successor_)
420 message_router(etl::message_router_id_t id_)
421 : imessage_router(id_)
428 : imessage_router(id_, successor_)
434 using etl::imessage_router::receive;
438 const bool was_handled = (receive_message_type<TMessageTypes>(msg) || ...);
448 static_cast<TDerived*
>(
this)->on_receive_unknown(msg);
453 template <typename TMessage, typename etl::enable_if<etl::is_base_of<imessage, TMessage>::value,
int>::type = 0>
454 void receive(
const TMessage& msg)
458 static_cast<TDerived*
>(
this)->on_receive(msg);
468 static_cast<TDerived*
>(
this)->on_receive_unknown(msg);
474 using imessage_router::accepts;
478 return (accepts_type<TMessageTypes>(
id) || ...);
482 ETL_DEPRECATED
bool is_null_router() const ETL_OVERRIDE
488 bool is_producer() const ETL_OVERRIDE
494 bool is_consumer() const ETL_OVERRIDE
502 template <
typename TMessage>
505 if (TMessage::ID == msg.get_message_id())
507 static_cast<TDerived*
>(
this)->on_receive(
static_cast<const TMessage&
>(msg));
517 template <
typename TMessage>
520 if (TMessage::ID ==
id)
This is the base of all message routers.
Definition: message_router_generator.h:121
Definition: message_packet.h:335
This router can be used as a producer-only of messages, such an interrupt routine.
Definition: message_router_generator.h:281
Base exception class for message router.
Definition: message_router_generator.h:88
Router id is out of the legal range.
Definition: message_router_generator.h:101
This router can be used as a sink for messages or a 'null source' router.
Definition: message_router_generator.h:203
Definition: shared_message.h:49
ETL_NODISCARD etl::imessage & get_message()
Get a reference to the contained message.
Definition: shared_message.h:159
Adds successor traits to a class.
Definition: successor.h:73
bool has_successor() const
Does this have a successor?
Definition: successor.h:184
successor_type & get_successor() const
Definition: successor.h:174
successor()
Default constructor.
Definition: successor.h:81
#define ETL_ASSERT(b, e)
Definition: error_handler.h:316
Definition: exception.h:47
bitset_ext
Definition: absolute.h:38
etl::imessage_router & get_null_message_router()
null message router functionality.
Definition: message_router_generator.h:272
uint_least8_t message_id_t
Allow alternative type for message id.
Definition: message_types.h:40
Definition: type_traits.h:1376