36#ifndef PROTOCORE_MQTT_H
37#define PROTOCORE_MQTT_H
41#if PROTOCORE_ENABLE_MQTT
50#define PROTOCORE_MQTT_REMAINING_LENGTH_MAX 268435455u
53#define PROTOCORE_MQTT_PROTOCOL_LEVEL 0x04
56#define PROTOCORE_MQTT_SUBACK_FAILURE 0x80
74 MQTT_UNSUBSCRIBE = 10,
82typedef void (*MqttMessageCb)(
const char *topic_name,
const uint8_t *payload,
size_t payload_len);
100 const char *client_id;
101 const char *user_name;
102 const char *password;
115 const uint8_t *message;
129 const char *topic_name;
133 const uint8_t *payload;
143 const char *topic_filter;
152 uint32_t remaining_length;
176 MqttMessageCb on_message;
267 MqttServerArgs server;
268 MqttSessionArgs session;
270 MqttPublishArgs message;
271 MqttFilterArgs filter;
272 MqttPacketArgs packet;
274 MqttDeliveryArgs delivery;
283extern MqttVars MqttV;
288 void (*
const encode_remaining_length)(uint8_t *work);
289 void (*
const decode_remaining_length)(uint8_t *work);
290 void (*
const build_connect)(uint8_t *work);
291 void (*
const build_publish)(uint8_t *work);
292 void (*
const build_subscribe)(uint8_t *work);
293 void (*
const build_unsubscribe)(uint8_t *work);
294 void (*
const build_ack)(uint8_t *work);
295 void (*
const build_pingreq)(uint8_t *work);
296 void (*
const build_disconnect)(uint8_t *work);
297 void (*
const parse_fixed_header)(uint8_t *work);
298 void (*
const parse_publish)(uint8_t *work);
299 void (*
const parse_ack)(uint8_t *work);
300 void (*
const parse_connack)(uint8_t *work);
301 void (*
const parse_suback)(uint8_t *work);
302 void (*
const on_message)(uint8_t *work);
303 void (*
const connect)(uint8_t *work);
304 void (*
const publish)(uint8_t *work);
305 void (*
const subscribe)(uint8_t *work);
306 void (*
const unsubscribe)(uint8_t *work);
307 void (*
const loop)(uint8_t *work);
308 void (*
const connected)(uint8_t *work);
309 void (*
const disconnect)(uint8_t *work);
314void protocore_mqtt_encode_remaining_length(uint8_t *work);
315void protocore_mqtt_decode_remaining_length(uint8_t *work);
316void protocore_mqtt_build_connect(uint8_t *work);
317void protocore_mqtt_build_publish(uint8_t *work);
318void protocore_mqtt_build_subscribe(uint8_t *work);
319void protocore_mqtt_build_unsubscribe(uint8_t *work);
320void protocore_mqtt_build_ack(uint8_t *work);
321void protocore_mqtt_build_pingreq(uint8_t *work);
322void protocore_mqtt_build_disconnect(uint8_t *work);
323void protocore_mqtt_parse_fixed_header(uint8_t *work);
324void protocore_mqtt_parse_publish(uint8_t *work);
325void protocore_mqtt_parse_ack(uint8_t *work);
326void protocore_mqtt_parse_connack(uint8_t *work);
327void protocore_mqtt_parse_suback(uint8_t *work);
328void protocore_mqtt_on_message(uint8_t *work);
329void protocore_mqtt_connect(uint8_t *work);
330void protocore_mqtt_publish(uint8_t *work);
331void protocore_mqtt_subscribe(uint8_t *work);
332void protocore_mqtt_unsubscribe(uint8_t *work);
333void protocore_mqtt_loop(uint8_t *work);
334void protocore_mqtt_connected(uint8_t *work);
335void protocore_mqtt_disconnect(uint8_t *work);
341static const MqttNs Mqtt __attribute__((unused)) = {
342 .encode_remaining_length = protocore_mqtt_encode_remaining_length,
343 .decode_remaining_length = protocore_mqtt_decode_remaining_length,
344 .build_connect = protocore_mqtt_build_connect,
345 .build_publish = protocore_mqtt_build_publish,
346 .build_subscribe = protocore_mqtt_build_subscribe,
347 .build_unsubscribe = protocore_mqtt_build_unsubscribe,
348 .build_ack = protocore_mqtt_build_ack,
349 .build_pingreq = protocore_mqtt_build_pingreq,
350 .build_disconnect = protocore_mqtt_build_disconnect,
351 .parse_fixed_header = protocore_mqtt_parse_fixed_header,
352 .parse_publish = protocore_mqtt_parse_publish,
353 .parse_ack = protocore_mqtt_parse_ack,
354 .parse_connack = protocore_mqtt_parse_connack,
355 .parse_suback = protocore_mqtt_parse_suback,
356 .on_message = protocore_mqtt_on_message,
357 .connect = protocore_mqtt_connect,
358 .publish = protocore_mqtt_publish,
359 .subscribe = protocore_mqtt_subscribe,
360 .unsubscribe = protocore_mqtt_unsubscribe,
361 .loop = protocore_mqtt_loop,
362 .connected = protocore_mqtt_connected,
363 .disconnect = protocore_mqtt_disconnect,
375#if PROTOCORE_HAS_NET_STACK
376uint8_t *protocore_mqtt_span(
void);
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS