MQTT Client¶
MQTT client v3.1.1 implementation, based on callback (non-netconn) connection API.
-
group
LWGSM_APP_MQTT_CLIENT MQTT client.
Typedefs
-
typedef struct lwgsm_mqtt_client *
lwgsm_mqtt_client_p¶ Pointer to lwgsm_mqtt_client_t structure.
-
typedef void (*
lwgsm_mqtt_evt_fn)(lwgsm_mqtt_client_p client, lwgsm_mqtt_evt_t *evt)¶ MQTT event callback function.
- Parameters
[in] client: MQTT client[in] evt: MQTT event with type and related data
Enums
-
enum
lwgsm_mqtt_qos_t¶ Quality of service enumeration.
Values:
-
enumerator
LWGSM_MQTT_QOS_AT_MOST_ONCE¶ Delivery is not guaranteed to arrive, but can arrive
up to 1 time= non-critical packets where losses are allowed
-
enumerator
LWGSM_MQTT_QOS_AT_LEAST_ONCE¶ Delivery is quaranteed
at least once, but it may be delivered multiple times with the same content
-
enumerator
LWGSM_MQTT_QOS_EXACTLY_ONCE¶ Delivery is quaranteed
exactly once= very critical packets such as billing informations or similar
-
enumerator
-
enum
lwgsm_mqtt_state_t¶ State of MQTT client.
Values:
-
enumerator
LWGSM_MQTT_CONN_DISCONNECTED¶ Connection with server is not established
-
enumerator
LWGSM_MQTT_CONN_CONNECTING¶ Client is connecting to server
-
enumerator
LWGSM_MQTT_CONN_DISCONNECTING¶ Client connection is disconnecting from server
-
enumerator
LWGSM_MQTT_CONNECTING¶ MQTT client is connecting… CONNECT command has been sent to server
-
enumerator
LWGSM_MQTT_CONNECTED¶ MQTT is fully connected and ready to send data on topics
-
enumerator
-
enum
lwgsm_mqtt_evt_type_t¶ MQTT event types.
Values:
-
enumerator
LWGSM_MQTT_EVT_CONNECT¶ MQTT client connect event
-
enumerator
LWGSM_MQTT_EVT_SUBSCRIBE¶ MQTT client subscribed to specific topic
-
enumerator
LWGSM_MQTT_EVT_UNSUBSCRIBE¶ MQTT client unsubscribed from specific topic
-
enumerator
LWGSM_MQTT_EVT_PUBLISH¶ MQTT client publish message to server event.
- Note
When publishing packet with quality of service LWGSM_MQTT_QOS_AT_MOST_ONCE, you may not receive event, even if packet was successfully sent, thus do not rely on this event for packet with
qos = LWGSM_MQTT_QOS_AT_MOST_ONCE
-
enumerator
LWGSM_MQTT_EVT_PUBLISH_RECV¶ MQTT client received a publish message from server
-
enumerator
LWGSM_MQTT_EVT_DISCONNECT¶ MQTT client disconnected from MQTT server
-
enumerator
LWGSM_MQTT_EVT_KEEP_ALIVE¶ MQTT keep-alive sent to server and reply received
-
enumerator
-
enum
lwgsm_mqtt_conn_status_t¶ List of possible results from MQTT server when executing connect command.
Values:
-
enumerator
LWGSM_MQTT_CONN_STATUS_ACCEPTED¶ Connection accepted and ready to use
-
enumerator
LWGSM_MQTT_CONN_STATUS_REFUSED_PROTOCOL_VERSION¶ Connection Refused, unacceptable protocol version
-
enumerator
LWGSM_MQTT_CONN_STATUS_REFUSED_ID¶ Connection refused, identifier rejected
-
enumerator
LWGSM_MQTT_CONN_STATUS_REFUSED_SERVER¶ Connection refused, server unavailable
-
enumerator
LWGSM_MQTT_CONN_STATUS_REFUSED_USER_PASS¶ Connection refused, bad user name or password
-
enumerator
LWGSM_MQTT_CONN_STATUS_REFUSED_NOT_AUTHORIZED¶ Connection refused, not authorized
-
enumerator
LWGSM_MQTT_CONN_STATUS_TCP_FAILED¶ TCP connection to server was not successful
-
enumerator
Functions
-
lwgsm_mqtt_client_p
lwgsm_mqtt_client_new(size_t tx_buff_len, size_t rx_buff_len)¶ Allocate a new MQTT client structure.
- Return
Pointer to new allocated MQTT client structure or
NULLon failure- Parameters
[in] tx_buff_len: Length of raw data output buffer[in] rx_buff_len: Length of raw data input buffer
-
void
lwgsm_mqtt_client_delete(lwgsm_mqtt_client_p client)¶ Delete MQTT client structure.
- Note
MQTT client must be disconnected first
- Parameters
[in] client: MQTT client
-
lwgsmr_t
lwgsm_mqtt_client_connect(lwgsm_mqtt_client_p client, const char *host, lwgsm_port_t port, lwgsm_mqtt_evt_fn evt_fn, const lwgsm_mqtt_client_info_t *info)¶ Connect to MQTT server.
- Note
After TCP connection is established, CONNECT packet is automatically sent to server
- Return
lwgsmOK on success, member of lwgsmr_t enumeration otherwise
- Parameters
[in] client: MQTT client[in] host: Host address for server[in] port: Host port number[in] evt_fn: Callback function for all events on this MQTT client[in] info: Information structure for connection
-
lwgsmr_t
lwgsm_mqtt_client_disconnect(lwgsm_mqtt_client_p client)¶ Disconnect from MQTT server.
-
uint8_t
lwgsm_mqtt_client_is_connected(lwgsm_mqtt_client_p client)¶ Test if client is connected to server and accepted to MQTT protocol.
- Note
Function will return error if TCP is connected but MQTT not accepted
- Return
1on success,0otherwise- Parameters
[in] client: MQTT client
-
lwgsmr_t
lwgsm_mqtt_client_subscribe(lwgsm_mqtt_client_p client, const char *topic, lwgsm_mqtt_qos_t qos, void *arg)¶ Subscribe to MQTT topic.
- Return
lwgsmOK on success, member of lwgsmr_t enumeration otherwise
- Parameters
[in] client: MQTT client[in] topic: Topic name to subscribe to[in] qos: Quality of service. This parameter can be a value of lwgsm_mqtt_qos_t[in] arg: User custom argument used in callback
-
lwgsmr_t
lwgsm_mqtt_client_unsubscribe(lwgsm_mqtt_client_p client, const char *topic, void *arg)¶ Unsubscribe from MQTT topic.
-
lwgsmr_t
lwgsm_mqtt_client_publish(lwgsm_mqtt_client_p client, const char *topic, const void *payload, uint16_t len, lwgsm_mqtt_qos_t qos, uint8_t retain, void *arg)¶ Publish a new message on specific topic.
- Return
lwgsmOK on success, member of lwgsmr_t enumeration otherwise
- Parameters
[in] client: MQTT client[in] topic: Topic to send message to[in] payload: Message data[in] payload_len: Length of payload data[in] qos: Quality of service. This parameter can be a value of lwgsm_mqtt_qos_t enumeration[in] retain: Retian parameter value[in] arg: User custom argument used in callback
-
void *
lwgsm_mqtt_client_get_arg(lwgsm_mqtt_client_p client)¶ Get user argument on client.
- Return
User argument
- Parameters
[in] client: MQTT client handle
-
void
lwgsm_mqtt_client_set_arg(lwgsm_mqtt_client_p client, void *arg)¶ Set user argument on client.
- Parameters
[in] client: MQTT client handle[in] arg: User argument
-
struct
lwgsm_mqtt_client_info_t¶ - #include <lwgsm_mqtt_client.h>
MQTT client information structure.
Public Members
-
const char *
id¶ Client unique identifier. It is required and must be set by user
-
const char *
user¶ Authentication username. Set to
NULLif not required
-
const char *
pass¶ Authentication password, set to
NULLif not required
-
uint16_t
keep_alive¶ Keep-alive parameter in units of seconds. When set to
0, functionality is disabled (not recommended)
-
const char *
will_topic¶ Will topic
-
const char *
will_message¶ Will message
-
lwgsm_mqtt_qos_t
will_qos¶ Will topic quality of service
-
const char *
-
struct
lwgsm_mqtt_request_t¶ - #include <lwgsm_mqtt_client.h>
MQTT request object.
Public Members
-
uint8_t
status¶ Entry status flag for in use or pending bit
-
uint16_t
packet_id¶ Packet ID generated by client on publish
-
void *
arg¶ User defined argument
-
uint32_t
expected_sent_len¶ Number of total bytes which must be sent on connection before we can say “packet was sent”.
-
uint32_t
timeout_start_time¶ Timeout start time in units of milliseconds
-
uint8_t
-
struct
lwgsm_mqtt_evt_t¶ - #include <lwgsm_mqtt_client.h>
MQTT event structure for callback function.
Public Members
-
lwgsm_mqtt_evt_type_t
type¶ Event type
-
lwgsm_mqtt_conn_status_t
status¶ Connection status with MQTT
-
struct lwgsm_mqtt_evt_t::[anonymous]::[anonymous]
connect¶ Event for connecting to server
-
uint8_t
is_accepted¶ Status if client was accepted to MQTT prior disconnect event
-
struct lwgsm_mqtt_evt_t::[anonymous]::[anonymous]
disconnect¶ Event for disconnecting from server
-
void *
arg¶ User argument for callback function
-
struct lwgsm_mqtt_evt_t::[anonymous]::[anonymous]
sub_unsub_scribed¶ Event for (un)subscribe to/from topics
-
struct lwgsm_mqtt_evt_t::[anonymous]::[anonymous]
publish¶ Published event
-
const uint8_t *
topic¶ Pointer to topic identifier
-
size_t
topic_len¶ Length of topic
-
const void *
payload¶ Topic payload
-
size_t
payload_len¶ Length of topic payload
-
uint8_t
dup¶ Duplicate flag if message was sent again
-
lwgsm_mqtt_qos_t
qos¶ Received packet quality of service
-
struct lwgsm_mqtt_evt_t::[anonymous]::[anonymous]
publish_recv¶ Publish received event
-
union lwgsm_mqtt_evt_t::[anonymous]
evt¶ Event data parameters
-
lwgsm_mqtt_evt_type_t
-
typedef struct lwgsm_mqtt_client *
-
group
LWGSM_APP_MQTT_CLIENT_EVT Event helper functions.
Connect event
- Note
Use these functions on LWGSM_MQTT_EVT_CONNECT event
-
lwgsm_mqtt_client_evt_connect_get_status(client, evt)¶ Get connection status.
- Return
Connection status. Member of lwgsm_mqtt_conn_status_t
- Parameters
[in] client: MQTT client[in] evt: Event handle
Disconnect event
- Note
Use these functions on LWGSM_MQTT_EVT_DISCONNECT event
-
lwgsm_mqtt_client_evt_disconnect_is_accepted(client, evt)¶ Check if MQTT client was accepted by server when disconnect event occurred.
- Return
1on success,0otherwise- Parameters
[in] client: MQTT client[in] evt: Event handle
Subscribe/unsubscribe event
- Note
Use these functions on LWGSM_MQTT_EVT_SUBSCRIBE or LWGSM_MQTT_EVT_UNSUBSCRIBE events
-
lwgsm_mqtt_client_evt_subscribe_get_argument(client, evt)¶ Get user argument used on lwgsm_mqtt_client_subscribe.
- Return
User argument
- Parameters
[in] client: MQTT client[in] evt: Event handle
-
lwgsm_mqtt_client_evt_subscribe_get_result(client, evt)¶ Get result of subscribe event.
-
lwgsm_mqtt_client_evt_unsubscribe_get_argument(client, evt)¶ Get user argument used on lwgsm_mqtt_client_unsubscribe.
- Return
User argument
- Parameters
[in] client: MQTT client[in] evt: Event handle
Publish receive event
- Note
Use these functions on LWGSM_MQTT_EVT_PUBLISH_RECV event
-
lwgsm_mqtt_client_evt_publish_recv_get_topic(client, evt)¶ Get topic from received publish packet.
- Return
Topic name
- Parameters
[in] client: MQTT client[in] evt: Event handle
-
lwgsm_mqtt_client_evt_publish_recv_get_topic_len(client, evt)¶ Get topic length from received publish packet.
- Return
Topic length
- Parameters
[in] client: MQTT client[in] evt: Event handle
-
lwgsm_mqtt_client_evt_publish_recv_get_payload(client, evt)¶ Get payload from received publish packet.
- Return
Packet payload
- Parameters
[in] client: MQTT client[in] evt: Event handle
-
lwgsm_mqtt_client_evt_publish_recv_get_payload_len(client, evt)¶ Get payload length from received publish packet.
- Return
Payload length
- Parameters
[in] client: MQTT client[in] evt: Event handle
-
lwgsm_mqtt_client_evt_publish_recv_is_duplicate(client, evt)¶ Check if packet is duplicated.
- Return
1if duplicated,0otherwise- Parameters
[in] client: MQTT client[in] evt: Event handle
-
lwgsm_mqtt_client_evt_publish_recv_get_qos(client, evt)¶ Get received quality of service.
- Return
Member of lwgsm_mqtt_qos_t enumeration
- Parameters
[in] client: MQTT client[in] evt: Event handle
Publish event
- Note
Use these functions on LWGSM_MQTT_EVT_PUBLISH event
-
lwgsm_mqtt_client_evt_publish_get_argument(client, evt)¶ Get user argument used on lwgsm_mqtt_client_publish.
- Return
User argument
- Parameters
[in] client: MQTT client[in] evt: Event handle
Defines
-
lwgsm_mqtt_client_evt_get_type(client, evt)¶ Get MQTT event type.
- Return
MQTT Event type, value of lwgsm_mqtt_evt_type_t enumeration
- Parameters
[in] client: MQTT client[in] evt: Event handle