Skip to content

File syn_mqtt.c

FileList > net > syn_mqtt.c

Go to the source code of this file

Lightweight MQTT 3.1.1 client implementation — fully non-blocking.

  • #include "../port/syn_port_system.h"
  • #include "../util/syn_assert.h"
  • #include "../util/syn_pack.h"
  • #include "syn_mqtt.h"
  • #include <string.h>

Public Functions

Type Name
SYN_Status syn_mqtt_init (SYN_MqttClient * client, const char * host, uint16_t port, const char * client_id, const char * username, const char * password, uint16_t keep_alive_s, uint8_t * rx_buf, size_t rx_buf_size, uint8_t * tx_buf, size_t tx_buf_size)
Initialize the MQTT client.
SYN_Status syn_mqtt_ping (SYN_MqttClient * client)
Transmit an explicit MQTT PINGREQ packet.
SYN_Status syn_mqtt_publish (SYN_MqttClient * client, const char * topic, const void * payload, size_t len, uint8_t qos, bool retain)
Publish a message to a topic.
SYN_Status syn_mqtt_subscribe (SYN_MqttClient * client, const char * topic, uint8_t qos)
Subscribe to a topic.
SYN_PT_Status syn_mqtt_task (SYN_PT * pt, SYN_Task * task)
Cooperative task for driving the MQTT client.

Public Static Functions

Type Name
size_t encode_remaining_len (uint8_t * buf, uint32_t len)
Encode MQTT remaining length into variable-length bytes.
void handle_publish (SYN_MqttClient * c, const uint8_t * payload, uint32_t len, uint8_t qos_bits)
Handle an incoming PUBLISH packet.
void poll_rx (SYN_MqttClient * c)
Non-blocking receive state machine poll.
void process_packet (SYN_MqttClient * c)
Dispatch a fully received MQTT packet.
bool send_mqtt_connect (SYN_MqttClient * c)
Build and send an MQTT CONNECT packet.
bool send_mqtt_ping (const SYN_MqttClient * c)
Send an MQTT PINGREQ packet.

Macros

Type Name
define MQTT_ACK_TIMEOUT_MS 5000
define MQTT_RECV_TIMEOUT_MS 5000

Public Functions Documentation

function syn_mqtt_init

Initialize the MQTT client.

SYN_Status syn_mqtt_init (
    SYN_MqttClient * client,
    const char * host,
    uint16_t port,
    const char * client_id,
    const char * username,
    const char * password,
    uint16_t keep_alive_s,
    uint8_t * rx_buf,
    size_t rx_buf_size,
    uint8_t * tx_buf,
    size_t tx_buf_size
) 

Configures broker destination, client ID, authentication credentials, keep-alive timing parameters, and network packet buffers.

Parameters:

  • client Pointer to client context.
  • host Broker network address string.
  • port Broker port number.
  • client_id MQTT client identity string.
  • username Authentication username (or NULL).
  • password Authentication password (or NULL).
  • keep_alive_s Keep-alive timeout parameter in seconds.
  • rx_buf Receive buffer storage.
  • rx_buf_size Receive buffer capacity.
  • tx_buf Transmit buffer storage.
  • tx_buf_size Transmit buffer capacity.

Returns:

SYN_OK on successful configuration, or error parameter code.


function syn_mqtt_ping

Transmit an explicit MQTT PINGREQ packet.

SYN_Status syn_mqtt_ping (
    SYN_MqttClient * client
) 

Note: PINGREQ packets are sent automatically by syn_mqtt_task based on the configured keep_alive_s interval. This function allows manual pinging on demand.

Parameters:

  • client Pointer to client context.

Returns:

SYN_OK on success, SYN_ERROR if not connected or transmit failed.


function syn_mqtt_publish

Publish a message to a topic.

SYN_Status syn_mqtt_publish (
    SYN_MqttClient * client,
    const char * topic,
    const void * payload,
    size_t len,
    uint8_t qos,
    bool retain
) 

Non-blocking publish command. For QoS 0, queued directly. For QoS 1, tracks acknowledgement state.

Parameters:

  • client Pointer to client context.
  • topic Topic name to target.
  • payload Data payload to send.
  • len Payload size in bytes.
  • qos Quality of service level (0 or 1).
  • retain Retain flag on broker.

Returns:

SYN_OK on queued, or error status if payload bounds exceeded.


function syn_mqtt_subscribe

Subscribe to a topic.

SYN_Status syn_mqtt_subscribe (
    SYN_MqttClient * client,
    const char * topic,
    uint8_t qos
) 

Formats and queues a subscription request for transmission.

Parameters:

  • client Pointer to client context.
  • topic Topic filter string.
  • qos Requested quality of service.

Returns:

SYN_OK on success.


function syn_mqtt_task

Cooperative task for driving the MQTT client.

SYN_PT_Status syn_mqtt_task (
    SYN_PT * pt,
    SYN_Task * task
) 

Yields during connection, socket polling, keep-alive pinging, and packet parsing loops. Runs within the cooperative scheduler context.

Parameters:

  • pt Cooperative protothread handle.
  • task Corresponding task control block.

Returns:

PT_WAITING or PT_EXITED status.


Public Static Functions Documentation

function encode_remaining_len

Encode MQTT remaining length into variable-length bytes.

static size_t encode_remaining_len (
    uint8_t * buf,
    uint32_t len
) 

Parameters:

  • buf Output buffer (at least 4 bytes).
  • len Length value to encode.

Returns:

Number of bytes written.


function handle_publish

Handle an incoming PUBLISH packet.

static void handle_publish (
    SYN_MqttClient * c,
    const uint8_t * payload,
    uint32_t len,
    uint8_t qos_bits
) 

Parameters:

  • c MQTT client.
  • payload Raw payload (after fixed header).
  • len Payload length.
  • qos_bits QoS flags from the fixed header.

function poll_rx

Non-blocking receive state machine poll.

static void poll_rx (
    SYN_MqttClient * c
) 

Reads available bytes with timeout=0. Advances through RX phases: IDLE → REMAINING_LEN → PAYLOAD / DISCARD → IDLE

Parameters:

  • c MQTT client.

function process_packet

Dispatch a fully received MQTT packet.

static void process_packet (
    SYN_MqttClient * c
) 

Parameters:

  • c MQTT client context.

function send_mqtt_connect

Build and send an MQTT CONNECT packet.

static bool send_mqtt_connect (
    SYN_MqttClient * c
) 

Parameters:

  • c MQTT client.

Returns:

true on success.


function send_mqtt_ping

Send an MQTT PINGREQ packet.

static bool send_mqtt_ping (
    const SYN_MqttClient * c
) 

Parameters:

  • c MQTT client.

Returns:

true on success.


Macro Definition Documentation

define MQTT_ACK_TIMEOUT_MS

#define MQTT_ACK_TIMEOUT_MS `5000`

Timeout for ACK responses (ms).


define MQTT_RECV_TIMEOUT_MS

#define MQTT_RECV_TIMEOUT_MS `5000`

Timeout for incomplete packet reception (ms).



The documentation for this class was generated from the following file src/syntropic/net/syn_mqtt.c