mirror of
https://github.com/ETLCPP/etl.git
synced 2026-11-09 14:49:53 +08:00
Merge remote-tracking branch 'origin/development'
# Conflicts: # include/etl/version.h # support/Release notes.txt
This commit is contained in:
commit
89df7cb04a
@ -238,7 +238,7 @@ namespace etl
|
||||
/// Starts the FSM.
|
||||
/// Can only be called once.
|
||||
/// Subsequent calls will do nothing.
|
||||
///\param call_on_enter_state If will call on_enter_state() for the first state. Default = true.
|
||||
///\param call_on_enter_state If true will call on_enter_state() for the first state. Default = true.
|
||||
//*******************************************
|
||||
void start(bool call_on_enter_state = true)
|
||||
{
|
||||
@ -273,6 +273,17 @@ namespace etl
|
||||
receive(nmr, message);
|
||||
}
|
||||
|
||||
//*******************************************
|
||||
/// Top level message handler for the FSM.
|
||||
//*******************************************
|
||||
void receive(imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& message)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, message);
|
||||
}
|
||||
}
|
||||
|
||||
//*******************************************
|
||||
/// Top level message handler for the FSM.
|
||||
//*******************************************
|
||||
@ -360,6 +371,12 @@ namespace etl
|
||||
p_state = nullptr;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
etl::ifsm_state* p_state; ///< A pointer to the current state.
|
||||
@ -390,7 +407,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -455,7 +472,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -519,7 +536,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -582,7 +599,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -643,7 +660,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -703,7 +720,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -762,7 +779,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -820,7 +837,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -876,7 +893,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -931,7 +948,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -985,7 +1002,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -1038,7 +1055,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -1089,7 +1106,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -1139,7 +1156,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -1188,7 +1205,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -1236,7 +1253,7 @@ namespace etl
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
@ -1280,9 +1297,9 @@ namespace etl
|
||||
: ifsm_state(STATE_ID)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
~fsm_state()
|
||||
{
|
||||
}
|
||||
|
||||
@ -285,6 +285,17 @@ namespace etl
|
||||
receive(nmr, message);
|
||||
}
|
||||
|
||||
//*******************************************
|
||||
/// Top level message handler for the FSM.
|
||||
//*******************************************
|
||||
void receive(imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& message)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, message);
|
||||
}
|
||||
}
|
||||
|
||||
//*******************************************
|
||||
/// Top level message handler for the FSM.
|
||||
//*******************************************
|
||||
@ -372,6 +383,12 @@ namespace etl
|
||||
p_state = nullptr;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
etl::ifsm_state* p_state; ///< A pointer to the current state.
|
||||
|
||||
@ -102,21 +102,12 @@ namespace etl
|
||||
|
||||
if (ok)
|
||||
{
|
||||
if (router.is_bus())
|
||||
{
|
||||
// Message busses get added to the end.
|
||||
router_list.push_back(&router);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Routers get added in id order.
|
||||
router_list_t::iterator irouter = std::upper_bound(router_list.begin(),
|
||||
router_list.end(),
|
||||
router.get_message_router_id(),
|
||||
compare_router_id());
|
||||
router_list_t::iterator irouter = std::upper_bound(router_list.begin(),
|
||||
router_list.end(),
|
||||
router.get_message_router_id(),
|
||||
compare_router_id());
|
||||
|
||||
router_list.insert(irouter, &router);
|
||||
}
|
||||
router_list.insert(irouter, &router);
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,17 +194,9 @@ namespace etl
|
||||
{
|
||||
etl::imessage_router& router = **irouter;
|
||||
|
||||
if (router.is_bus())
|
||||
if (router.accepts(message.message_id))
|
||||
{
|
||||
// The router is actually a bus.
|
||||
etl::imessage_bus& bus = static_cast<etl::imessage_bus&>(router);
|
||||
|
||||
// So pass it on.
|
||||
bus.receive(source, destination_router_id, message);
|
||||
}
|
||||
else if (router.accepts(message.message_id))
|
||||
{
|
||||
router.receive(source, message);
|
||||
router.receive(source, destination_router_id, message);
|
||||
}
|
||||
|
||||
++irouter;
|
||||
@ -254,11 +237,8 @@ namespace etl
|
||||
|
||||
while (irouter != router_list.end())
|
||||
{
|
||||
// The router is actually a bus.
|
||||
etl::imessage_bus& bus = static_cast<etl::imessage_bus&>(**irouter);
|
||||
|
||||
// So pass it on.
|
||||
bus.receive(source, destination_router_id, message);
|
||||
(*irouter)->receive(source, destination_router_id, message);
|
||||
|
||||
++irouter;
|
||||
}
|
||||
@ -291,6 +271,12 @@ namespace etl
|
||||
return router_list.clear();
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
//*******************************************
|
||||
|
||||
@ -102,7 +102,9 @@ namespace etl
|
||||
virtual ~imessage_router() {}
|
||||
virtual void receive(const etl::imessage& message) = 0;
|
||||
virtual void receive(imessage_router& source, const etl::imessage& message) = 0;
|
||||
virtual void receive(imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& message) = 0;
|
||||
virtual bool accepts(etl::message_id_t id) const = 0;
|
||||
virtual bool is_null_router() const = 0;
|
||||
|
||||
//********************************************
|
||||
bool accepts(const etl::imessage& msg) const
|
||||
@ -116,18 +118,6 @@ namespace etl
|
||||
return message_router_id;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return (message_router_id == NULL_MESSAGE_ROUTER);
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_bus() const
|
||||
{
|
||||
return (message_router_id == MESSAGE_BUS);
|
||||
}
|
||||
|
||||
//********************************************
|
||||
void set_successor(imessage_router& successor_)
|
||||
{
|
||||
@ -203,12 +193,23 @@ namespace etl
|
||||
{
|
||||
}
|
||||
|
||||
//********************************************
|
||||
void receive(imessage_router&, etl::message_router_id_t, const etl::imessage&)
|
||||
{
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool accepts(etl::message_id_t) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
static null_message_router& instance()
|
||||
{
|
||||
@ -369,6 +370,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -421,6 +431,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -554,6 +570,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -605,6 +630,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -736,6 +767,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -786,6 +826,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -915,6 +961,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -964,6 +1019,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -1090,6 +1151,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -1138,6 +1208,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -1262,6 +1338,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -1309,6 +1394,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -1431,6 +1522,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -1477,6 +1577,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -1597,6 +1703,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -1642,6 +1757,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -1759,6 +1880,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -1803,6 +1933,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -1918,6 +2054,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -1960,6 +2105,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -2073,6 +2224,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -2114,6 +2274,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -2225,6 +2391,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -2265,6 +2440,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -2373,6 +2554,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -2412,6 +2602,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -2518,6 +2714,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -2556,6 +2761,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -2660,6 +2871,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -2697,6 +2917,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -2799,6 +3025,15 @@ namespace etl
|
||||
receive(etl::null_message_router::instance(), msg);
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)
|
||||
{
|
||||
if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
|
||||
{
|
||||
receive(source, msg);
|
||||
}
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void receive(etl::imessage_router& source, const etl::imessage& msg)
|
||||
{
|
||||
@ -2835,6 +3070,12 @@ namespace etl
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -114,7 +114,9 @@ namespace etl
|
||||
virtual ~imessage_router() {}
|
||||
virtual void receive(const etl::imessage& message) = 0;
|
||||
virtual void receive(imessage_router& source, const etl::imessage& message) = 0;
|
||||
virtual void receive(imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& message) = 0;
|
||||
virtual bool accepts(etl::message_id_t id) const = 0;
|
||||
virtual bool is_null_router() const = 0;
|
||||
|
||||
//********************************************
|
||||
bool accepts(const etl::imessage& msg) const
|
||||
@ -128,18 +130,6 @@ namespace etl
|
||||
return message_router_id;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return (message_router_id == NULL_MESSAGE_ROUTER);
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_bus() const
|
||||
{
|
||||
return (message_router_id == MESSAGE_BUS);
|
||||
}
|
||||
|
||||
//********************************************
|
||||
void set_successor(imessage_router& successor_)
|
||||
{
|
||||
@ -215,12 +205,23 @@ namespace etl
|
||||
{
|
||||
}
|
||||
|
||||
//********************************************
|
||||
void receive(imessage_router&, etl::message_router_id_t, const etl::imessage&)
|
||||
{
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool accepts(etl::message_id_t) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
static null_message_router& instance()
|
||||
{
|
||||
@ -376,6 +377,15 @@ namespace etl
|
||||
cog.outl(" }")
|
||||
cog.outl("")
|
||||
cog.outl(" //**********************************************")
|
||||
cog.outl(" void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)")
|
||||
cog.outl(" {")
|
||||
cog.outl(" if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))")
|
||||
cog.outl(" {")
|
||||
cog.outl(" receive(source, msg);")
|
||||
cog.outl(" }")
|
||||
cog.outl(" }")
|
||||
cog.outl("")
|
||||
cog.outl(" //**********************************************")
|
||||
cog.outl(" void receive(etl::imessage_router& source, const etl::imessage& msg)")
|
||||
cog.outl(" {")
|
||||
cog.outl(" const etl::message_id_t id = msg.message_id;")
|
||||
@ -419,6 +429,12 @@ namespace etl
|
||||
cog.outl(" return false; break;")
|
||||
cog.outl(" }")
|
||||
cog.outl(" }")
|
||||
cog.outl("")
|
||||
cog.outl(" //********************************************")
|
||||
cog.outl(" bool is_null_router() const")
|
||||
cog.outl(" {")
|
||||
cog.outl(" return false;")
|
||||
cog.outl(" }")
|
||||
cog.outl("};")
|
||||
|
||||
####################################
|
||||
@ -561,6 +577,15 @@ namespace etl
|
||||
cog.outl(" }")
|
||||
cog.outl("")
|
||||
cog.outl(" //**********************************************")
|
||||
cog.outl(" void receive(etl::imessage_router& source, etl::message_router_id_t destination_router_id, const etl::imessage& msg)")
|
||||
cog.outl(" {")
|
||||
cog.outl(" if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))")
|
||||
cog.outl(" {")
|
||||
cog.outl(" receive(source, msg);")
|
||||
cog.outl(" }")
|
||||
cog.outl(" }")
|
||||
cog.outl("")
|
||||
cog.outl(" //**********************************************")
|
||||
cog.outl(" void receive(etl::imessage_router& source, const etl::imessage& msg)")
|
||||
cog.outl(" {")
|
||||
cog.outl(" const size_t id = msg.message_id;")
|
||||
@ -605,6 +630,12 @@ namespace etl
|
||||
cog.outl(" return false; break;")
|
||||
cog.outl(" }")
|
||||
cog.outl(" }")
|
||||
cog.outl("")
|
||||
cog.outl(" //********************************************")
|
||||
cog.outl(" bool is_null_router() const")
|
||||
cog.outl(" {")
|
||||
cog.outl(" return false;")
|
||||
cog.outl(" }")
|
||||
cog.outl("};")
|
||||
]]]*/
|
||||
/*[[[end]]]*/
|
||||
|
||||
@ -63,7 +63,7 @@ SOFTWARE.
|
||||
#if !defined(ETL_MESSAGE_TIMER_DISABLE_INTERRUPTS) || !defined(ETL_MESSAGE_TIMER_ENABLE_INTERRUPTS)
|
||||
#error ETL_MESSAGE_TIMER_DISABLE_INTERRUPTS and/or ETL_MESSAGE_TIMER_ENABLE_INTERRUPTS not defined
|
||||
#endif
|
||||
|
||||
|
||||
#define ETL_DISABLE_TIMER_UPDATES (ETL_MESSAGE_TIMER_DISABLE_INTERRUPTS)
|
||||
#define ETL_ENABLE_TIMER_UPDATES (ETL_MESSAGE_TIMER_ENABLE_INTERRUPTS)
|
||||
#define ETL_TIMER_UPDATES_ENABLED true
|
||||
@ -95,24 +95,17 @@ namespace etl
|
||||
etl::imessage_router& irouter_,
|
||||
uint32_t period_,
|
||||
bool repeating_,
|
||||
etl::message_router_id_t destination_router_id_)
|
||||
etl::message_router_id_t destination_router_id_ = etl::imessage_bus::ALL_MESSAGE_ROUTERS)
|
||||
: p_message(&message_),
|
||||
p_router(&irouter_),
|
||||
period(period_),
|
||||
delta(etl::timer::state::INACTIVE),
|
||||
destination_router_id(destination_router_id_),
|
||||
id(id_),
|
||||
previous(etl::timer::id::NO_TIMER),
|
||||
next(etl::timer::id::NO_TIMER),
|
||||
repeating(repeating_)
|
||||
{
|
||||
if (irouter_.is_bus())
|
||||
{
|
||||
destination_router_id = destination_router_id_;
|
||||
}
|
||||
else
|
||||
{
|
||||
destination_router_id = etl::imessage_bus::ALL_MESSAGE_ROUTERS;
|
||||
}
|
||||
}
|
||||
|
||||
//*******************************************
|
||||
@ -471,17 +464,8 @@ namespace etl
|
||||
|
||||
if (timer.p_router != nullptr)
|
||||
{
|
||||
if (timer.p_router->is_bus())
|
||||
{
|
||||
// Send to a message bus.
|
||||
etl::imessage_bus& bus = static_cast<etl::imessage_bus&>(*(timer.p_router));
|
||||
bus.receive(timer.destination_router_id, *(timer.p_message));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Send to a router.
|
||||
timer.p_router->receive(*(timer.p_message));
|
||||
}
|
||||
static etl::null_message_router nmr;
|
||||
timer.p_router->receive(nmr, timer.destination_router_id, *(timer.p_message));
|
||||
}
|
||||
|
||||
has_active = !active_list.empty();
|
||||
@ -576,7 +560,7 @@ namespace etl
|
||||
timer_array[id_].period = period_;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -627,7 +611,7 @@ namespace etl
|
||||
private_message_timer::list active_list;
|
||||
|
||||
volatile bool enabled;
|
||||
|
||||
|
||||
#if defined(ETL_MESSAGE_TIMER_USE_ATOMIC_LOCK)
|
||||
volatile etl::timer_semaphore_t process_semaphore;
|
||||
#endif
|
||||
|
||||
@ -38,7 +38,7 @@ SOFTWARE.
|
||||
///\ingroup utilities
|
||||
|
||||
#define ETL_VERSION_MAJOR 14
|
||||
#define ETL_VERSION_MINOR 25
|
||||
#define ETL_VERSION_MINOR 26
|
||||
#define ETL_VERSION_PATCH 0
|
||||
|
||||
#define ETL_VERSION ETL_STRINGIFY(ETL_VERSION_MAJOR) ETL_STRINGIFY(ETL_VERSION_MINOR) ETL_STRINGIFY(ETL_VERSION_PATCH)
|
||||
|
||||
@ -1,3 +1,9 @@
|
||||
===============================================================================
|
||||
14.26.0
|
||||
Simplified message framework internal code.
|
||||
Additional receive() virtual function overload taking destination id.
|
||||
Removed is_bus() member function.
|
||||
|
||||
===============================================================================
|
||||
14.25.0
|
||||
Added variadic template versions of etl::largest, etl::largest_type,
|
||||
|
||||
@ -255,10 +255,10 @@ namespace
|
||||
RouterA router3(ROUTER3);
|
||||
RouterA router4(ROUTER4);
|
||||
|
||||
bus1.subscribe(router1);
|
||||
bus1.subscribe(router2);
|
||||
bus1.subscribe(bus2);
|
||||
bus1.subscribe(router1);
|
||||
bus1.subscribe(bus3);
|
||||
bus1.subscribe(router2);
|
||||
|
||||
bus2.subscribe(router3);
|
||||
bus3.subscribe(router4);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user