34#error THIS HEADER IS A GENERATOR. DO NOT INCLUDE.
63#ifndef ETL_MESSAGE_ROUTER_INCLUDED
64#define ETL_MESSAGE_ROUTER_INCLUDED
69#if ETL_HAS_VIRTUAL_MESSAGES
70 #include "message_packet.h"
72#include "message_types.h"
129 virtual bool is_null_router()
const = 0;
130 virtual bool is_producer()
const = 0;
131 virtual bool is_consumer()
const = 0;
134 virtual void receive(etl::message_router_id_t destination_router_id,
const etl::imessage&
message)
136 if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
151 if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
160 return accepts(
msg.get_message_id());
164 etl::message_router_id_t get_message_router_id()
const
166 return message_router_id;
171 NULL_MESSAGE_ROUTER = 255,
173 ALL_MESSAGE_ROUTERS = 253,
174 MESSAGE_BROKER = 252,
175 MESSAGE_ROUTER = 251,
176 MAX_MESSAGE_ROUTER = 249
182 : message_router_id(
id_)
188 , message_router_id(
id_)
198 etl::message_router_id_t message_router_id;
221 using etl::imessage_router::receive;
232 using etl::imessage_router::accepts;
247 ETL_DEPRECATED
bool is_null_router()
const ETL_OVERRIDE
253 bool is_producer()
const ETL_OVERRIDE
259 bool is_consumer()
const ETL_OVERRIDE
276 return etl::null_message_router::instance();
313 using etl::imessage_router::receive;
324 using etl::imessage_router::accepts;
339 ETL_DEPRECATED
bool is_null_router()
const ETL_OVERRIDE
345 bool is_producer()
const ETL_OVERRIDE
351 bool is_consumer()
const ETL_OVERRIDE
360 template <
typename T>
368 template <
typename TRouter,
typename TMessage>
380 template <
typename TRouter>
392 template <
typename TRouter,
typename TMessage>
395 send_message(TRouter& destination,
397 const TMessage& message)
399 destination.receive(
id, message);
405 template <
typename TRouter>
408 send_message(TRouter& destination,
412 destination.receive(
id, message);
418#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_ROUTER_FORCE_CPP03_IMPLEMENTATION)
422 template <
typename TDerived,
typename... TMessageTypes>
423 class message_router :
public imessage_router
427#if ETL_HAS_VIRTUAL_MESSAGES
433 : imessage_router(
etl::imessage_router::MESSAGE_ROUTER)
439 : imessage_router(
etl::imessage_router::MESSAGE_ROUTER, successor_)
445 : imessage_router(id_)
452 : imessage_router(id_, successor_)
458 using etl::imessage_router::receive;
462 const bool was_handled = (receive_message_type<TMessageTypes>(msg) || ...);
472 static_cast<TDerived*
>(
this)->on_receive_unknown(msg);
477 template <typename TMessage, typename etl::enable_if<etl::is_base_of<imessage, TMessage>::value,
int>::type = 0>
478 void receive(
const TMessage& msg)
482 static_cast<TDerived*
>(
this)->on_receive(msg);
492 static_cast<TDerived*
>(
this)->on_receive_unknown(msg);
498 using imessage_router::accepts;
502 return (accepts_type<TMessageTypes>(
id) || ...);
506 ETL_DEPRECATED
bool is_null_router() const ETL_OVERRIDE
512 bool is_producer() const ETL_OVERRIDE
518 bool is_consumer() const ETL_OVERRIDE
526 template <
typename TMessage>
529 if (TMessage::ID == msg.get_message_id())
531 static_cast<TDerived*
>(
this)->on_receive(
static_cast<const TMessage&
>(msg));
541 template <
typename TMessage>
544 if (TMessage::ID ==
id)
This is the base of all message routers.
Definition message_router_generator.h:123
Definition message_packet.h:367
This router can be used as a producer-only of messages, such an interrupt routine.
Definition message_router_generator.h:283
Base exception class for message router.
Definition message_router_generator.h:90
Router id is out of the legal range.
Definition message_router_generator.h:103
This router can be used as a sink for messages or a 'null source' router.
Definition message_router_generator.h:205
Definition shared_message.h:49
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:274
uint_least8_t message_id_t
Allow alternative type for message id.
Definition message_types.h:40
Definition type_traits_generator.h:849
Is T ultimately derived from etl::imessage_router?
Definition message_router_generator.h:362
Is T ultimately derived from etl::imessage?
Definition message.h:208
pair holds two objects of arbitrary type
Definition utility.h:164