mirror of
https://github.com/ETLCPP/etl.git
synced 2026-06-15 08:26:04 +08:00
113 lines
1.9 KiB
Markdown
113 lines
1.9 KiB
Markdown
---
|
|
title: "message"
|
|
weight: 1
|
|
---
|
|
|
|
{{< callout type="info">}}
|
|
Header: `message.h`
|
|
{{< /callout >}}
|
|
|
|
Message types used for many of the framework classes.
|
|
|
|
---
|
|
|
|
```cpp
|
|
etl::message_id_t
|
|
```
|
|
The type used for message ids.
|
|
By default can hold a value between 0 and 255.
|
|
If `ETL_MESSAGE_ID_TYPE` is defined then this type will be used instead.
|
|
|
|
---
|
|
|
|
```cpp
|
|
etl::message_router_id_t
|
|
```
|
|
The type used for message router ids.
|
|
Can hold a value between 0 and 255.
|
|
|
|
---
|
|
|
|
The message classes are the common communication method across all of the message capable frameworks.
|
|
They are identified by a unique id number that specialises the base class.
|
|
|
|
## imessage
|
|
|
|
The base class for messages.
|
|
It is this class that is passed around, usually by const reference.
|
|
The class is abstract.
|
|
|
|
---
|
|
|
|
```cpp
|
|
etl::message_id_t get_message_id() const ETL_NOEXCEPT = 0;
|
|
```
|
|
Returns the id of the message.
|
|
|
|
---
|
|
|
|
## message
|
|
|
|
```cpp
|
|
message<size_t ID, typename TParent = etl::imessage>
|
|
```
|
|
Requires an integral id as the template parameter.
|
|
Inherits from `TParent`, which defaults to `etl::imessage`.
|
|
`TParent` allows additional base interfaces or functionality to be included.
|
|
static asserts if `TParent` is not a base of `etl::imessage`.
|
|
|
|
---
|
|
|
|
```cpp
|
|
ID
|
|
```
|
|
The id of the message as an enum.
|
|
Can be accessed by `etl::message` instances.
|
|
|
|
---
|
|
|
|
```cpp
|
|
TParent
|
|
```
|
|
The class that it inherits from. It must ultimately derive from `etl::imessage`.
|
|
The default is `etl::imessage`.
|
|
|
|
---
|
|
|
|
## Example
|
|
|
|
```cpp
|
|
enum
|
|
{
|
|
START,
|
|
STOP,
|
|
SET_SPEED
|
|
};
|
|
|
|
struct MyInterface : public etl::imessage
|
|
{
|
|
virtual void DoStuff() = 0;
|
|
};
|
|
|
|
// Start implements MyIterface
|
|
struct Start : public etl::message<START, MyInterface>
|
|
{
|
|
void DoStuff() override
|
|
{
|
|
// Do stuff here.
|
|
}
|
|
};
|
|
|
|
struct Stop : public etl::message<STOP>
|
|
{
|
|
bool isEmergencyStop;
|
|
};
|
|
|
|
struct SetSpeed : public etl::message<SET_SPEED>
|
|
{
|
|
uint32_t speed;
|
|
};
|
|
|
|
void Receive(const etl::imessage& msg);
|
|
```
|