File syn_mqtt.h¶
File List > net > syn_mqtt.h
Go to the documentation of this file
#ifndef SYN_MQTT_H
#define SYN_MQTT_H
#include "../common/syn_defs.h"
#include "../port/syn_port_socket.h"
#include "../pt/syn_pt.h"
#include "../sched/syn_task.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
SYN_MQTT_DISCONNECTED,
SYN_MQTT_CONNECTING,
SYN_MQTT_CONNECTED,
} SYN_MqttState;
typedef enum {
SYN_MQTT_RX_IDLE,
SYN_MQTT_RX_REMAINING_LEN,
SYN_MQTT_RX_PAYLOAD,
SYN_MQTT_RX_DISCARD,
} SYN_MqttRxPhase;
typedef struct {
SYN_Socket sock;
SYN_MqttState state;
const char *host;
uint16_t port;
const char *client_id;
const char *username;
const char *password;
uint16_t keep_alive_s;
void (*on_message)(const char *topic, const uint8_t *payload, size_t len, void *ctx);
void *ctx;
uint8_t *rx_buf;
size_t rx_buf_size;
uint8_t *tx_buf;
size_t tx_buf_size;
uint32_t last_activity_ms;
uint16_t next_packet_id;
uint16_t pending_puback_id;
uint32_t pending_puback_ms;
uint8_t retransmit_buf[128];
size_t retransmit_len;
/* ── Non-blocking RX State Machine ─────────────────────────────────── */
SYN_MqttRxPhase rx_phase;
uint8_t rx_header;
uint32_t rx_rem_len;
uint32_t rx_mult;
size_t rx_pos;
uint32_t rx_deadline;
} SYN_MqttClient;
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);
SYN_Status syn_mqtt_publish(SYN_MqttClient *client, const char *topic, const void *payload,
size_t len, uint8_t qos, bool retain);
SYN_Status syn_mqtt_subscribe(SYN_MqttClient *client, const char *topic, uint8_t qos);
SYN_Status syn_mqtt_ping(SYN_MqttClient *client);
SYN_PT_Status syn_mqtt_task(SYN_PT *pt, SYN_Task *task);
#ifdef __cplusplus
}
#endif
#endif /* SYN_MQTT_H */