Skip to main content
Version: 2.10.0

Messages

As a developer, you will have to create and use Luos messages to exchange information between servicesSoftware element run by Luos that can communicate with other services. It can be a driver or an app.. In order to do that, you have to understand how messages work.

Message structure

Luos engine's messages are managed by the msg_t structure:

typedef struct{
header_t header;
uint8_t data[MAX_DATA_MSG_SIZE];
}msg_t;

All messages have a header. A header is a 7-byte field containing all information allowing services to understand the messages' context. All services in the network catch and decode the header of each sent and received message.

data is a table containing data.

Info: MAX_DATA_MSG_SIZE represents the maximum size of messages (default value is 128 bytes);

To send data to any services you want, you will have to first fill out some information on the header.

here is the header_t structure:

typedef struct{
uint16_t protocol : 4; /*!< Protocol version. */
uint16_t target : 12; /*!< Target address, it can be (ID, Topic,Broadcast, Type). */
uint16_t target_mode : 4; /*!< Select targeting mode (ID, ID+ACK, Topic, Broadcast, Type). */
uint16_t source : 12; /*!< Source address, it can be (ID, Topic, Broadcast, Type). */
uint8_t cmd; /*!< msg definition. */
uint16_t size; /*!< Size of the data field. */
}header_t;
  • Protocol (4 bits): This field provides the protocol revision. This field is automatically filled; you don't have to deal with it.
  • Target (12 bits): This field contains the target address. To understand the real destination of this field, you have to know the addressing mode contained on the Target_mode field.
  • Target_mode (4 bits): This field indicates the addressing mode and how to understand the Target field. It can take different values:
    • SERVICEID: This mode allows to communicate with a unique service using its ID without acknowledgment return.
    • SERVICEIDACK: This mode allows to communicate with a unique service using its ID with acknowledgment return.
    • TYPE: This mode sends a message to all services with a given type, e.g. all "Sharp digital distance sensor".
    • BROADCAST: This mode allows all the services in the network to catch a message. In this case, the message contains a type of data used by multiple services.
    • TOPIC: Publisher/Subscriber mode, allows multiple services to catch a message depending on the topic that they subscribed to.
    • NODEID: This mode allows to send a message to all the services of a specific node without acknowledgment return.
    • NODEIDACK: This mode allows to send a message to all the services of a specific node with acknowledgment return.
  • Source (12 bits): The unique ID of the transmitter service.
  • CMD (8 bits): The command defines the transmitted data's type.
  • Size (16 bits): Size of the incoming data.
  • ACK (8 bits): Acknowledgment signal demanded in target modes IDACK and NODEIDACK, after the good reception of the message.