Zephyr Project API  3.3.0
A Scalable Open Source RTOS
mqtt_sn.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 René Beckmann
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
20#ifndef ZEPHYR_INCLUDE_NET_MQTT_SN_H_
21#define ZEPHYR_INCLUDE_NET_MQTT_SN_H_
22
23#include <stddef.h>
24
25#include <zephyr/net/buf.h>
26#include <zephyr/types.h>
27
28#include <sys/types.h>
29
30#ifdef CONFIG_MQTT_SN_TRANSPORT_UDP
31#include <zephyr/net/net_ip.h>
32#endif
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
47};
48
56};
57
63};
64
67 const uint8_t *data;
69};
70
80#define MQTT_SN_DATA_STRING_LITERAL(literal) ((struct mqtt_sn_data){literal, sizeof(literal) - 1})
81
89#define MQTT_SN_DATA_BYTES(...) \
90 ((struct mqtt_sn_data) { (uint8_t[]){ __VA_ARGS__ }, sizeof((uint8_t[]){ __VA_ARGS__ })})
91
103
108 struct {
113};
114
121};
122
123struct mqtt_sn_client;
124
133typedef void (*mqtt_sn_evt_cb_t)(struct mqtt_sn_client *client, const struct mqtt_sn_evt *evt);
134
148 int (*init)(struct mqtt_sn_transport *transport);
149
155 void (*deinit)(struct mqtt_sn_transport *transport);
156
160 int (*msg_send)(struct mqtt_sn_client *client, void *buf, size_t sz);
161
167 ssize_t (*recv)(struct mqtt_sn_client *client, void *buffer, size_t length);
168
179 int (*poll)(struct mqtt_sn_client *client);
180};
181
182#ifdef CONFIG_MQTT_SN_TRANSPORT_UDP
186struct mqtt_sn_transport_udp {
188 struct mqtt_sn_transport tp;
189
191 int sock;
192
194 struct sockaddr gwaddr;
195 socklen_t gwaddrlen;
196};
197
198#define UDP_TRANSPORT(transport) CONTAINER_OF(transport, struct mqtt_sn_transport_udp, tp)
199
207int mqtt_sn_transport_udp_init(struct mqtt_sn_transport_udp *udp, struct sockaddr *gwaddr,
208 socklen_t addrlen);
209#endif
210
221
223
225
227
229
233
234 int state;
237
239};
240
244int mqtt_sn_client_init(struct mqtt_sn_client *client, const struct mqtt_sn_data *client_id,
245 struct mqtt_sn_transport *transport, mqtt_sn_evt_cb_t evt_cb, void *tx,
246 size_t txsz, void *rx, size_t rxsz);
247
254
260int mqtt_sn_connect(struct mqtt_sn_client *client, bool will, bool clean_session);
261
268
275
282 struct mqtt_sn_data *topic_name);
283
288 struct mqtt_sn_data *topic_name);
289
298 struct mqtt_sn_data *topic_name, bool retain, struct mqtt_sn_data *data);
299
309
310#ifdef __cplusplus
311}
312#endif
313
314#endif /* ZEPHYR_INCLUDE_NET_MQTT_SN_H_ */
315
size_t socklen_t
Definition: net_ip.h:167
int mqtt_sn_unsubscribe(struct mqtt_sn_client *client, enum mqtt_sn_qos qos, struct mqtt_sn_data *topic_name)
Unsubscribe from a topic.
int mqtt_sn_publish(struct mqtt_sn_client *client, enum mqtt_sn_qos qos, struct mqtt_sn_data *topic_name, bool retain, struct mqtt_sn_data *data)
Publish a value.
void mqtt_sn_client_deinit(struct mqtt_sn_client *client)
Deinitialize the client.
mqtt_sn_qos
Definition: mqtt_sn.h:42
int mqtt_sn_connect(struct mqtt_sn_client *client, bool will, bool clean_session)
Connect the client.
int mqtt_sn_subscribe(struct mqtt_sn_client *client, enum mqtt_sn_qos qos, struct mqtt_sn_data *topic_name)
Subscribe to a given topic.
mqtt_sn_evt_type
Definition: mqtt_sn.h:95
mqtt_sn_return_code
Definition: mqtt_sn.h:58
int mqtt_sn_disconnect(struct mqtt_sn_client *client)
Disconnect the client.
mqtt_sn_topic_type
Definition: mqtt_sn.h:52
int mqtt_sn_client_init(struct mqtt_sn_client *client, const struct mqtt_sn_data *client_id, struct mqtt_sn_transport *transport, mqtt_sn_evt_cb_t evt_cb, void *tx, size_t txsz, void *rx, size_t rxsz)
Initialize a client.
void(* mqtt_sn_evt_cb_t)(struct mqtt_sn_client *client, const struct mqtt_sn_evt *evt)
Asynchronous event notification callback registered by the application.
Definition: mqtt_sn.h:133
int mqtt_sn_sleep(struct mqtt_sn_client *client, uint16_t duration)
Set the client into sleep state for the given duration (seconds).
int mqtt_sn_input(struct mqtt_sn_client *client)
Check the transport for new incoming data.
@ MQTT_SN_QOS_M1
Definition: mqtt_sn.h:46
@ MQTT_SN_QOS_2
Definition: mqtt_sn.h:45
@ MQTT_SN_QOS_1
Definition: mqtt_sn.h:44
@ MQTT_SN_QOS_0
Definition: mqtt_sn.h:43
@ MQTT_SN_EVT_PINGRESP
Definition: mqtt_sn.h:101
@ MQTT_SN_EVT_CONNECTED
Definition: mqtt_sn.h:96
@ MQTT_SN_EVT_PUBLISH
Definition: mqtt_sn.h:100
@ MQTT_SN_EVT_ASLEEP
Definition: mqtt_sn.h:98
@ MQTT_SN_EVT_DISCONNECTED
Definition: mqtt_sn.h:97
@ MQTT_SN_EVT_AWAKE
Definition: mqtt_sn.h:99
@ MQTT_SN_CODE_ACCEPTED
Definition: mqtt_sn.h:59
@ MQTT_SN_CODE_REJECTED_CONGESTION
Definition: mqtt_sn.h:60
@ MQTT_SN_CODE_REJECTED_NOTSUP
Definition: mqtt_sn.h:62
@ MQTT_SN_CODE_REJECTED_TOPIC_ID
Definition: mqtt_sn.h:61
@ MQTT_SN_TOPIC_TYPE_NORMAL
Definition: mqtt_sn.h:53
@ MQTT_SN_TOPIC_TYPE_PREDEF
Definition: mqtt_sn.h:54
@ MQTT_SN_TOPIC_TYPE_SHORT
Definition: mqtt_sn.h:55
__SIZE_TYPE__ ssize_t
Definition: types.h:28
struct k_thread client
Definition: main.c:31
Buffer management.
IPv6 and IPv4 definitions.
struct _slist sys_slist_t
Definition: slist.h:40
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT64_TYPE__ int64_t
Definition: stdint.h:75
A structure used to submit work after a delay.
Definition: kernel.h:3735
Definition: mqtt_sn.h:214
int state
Definition: mqtt_sn.h:234
uint16_t next_msg_id
Definition: mqtt_sn.h:230
uint8_t ping_retries
Definition: mqtt_sn.h:236
sys_slist_t publish
Definition: mqtt_sn.h:231
struct net_buf_simple tx
Definition: mqtt_sn.h:224
enum mqtt_sn_qos will_qos
Definition: mqtt_sn.h:219
struct k_work_delayable process_work
Definition: mqtt_sn.h:238
struct mqtt_sn_data client_id
Definition: mqtt_sn.h:215
struct mqtt_sn_data will_msg
Definition: mqtt_sn.h:218
sys_slist_t topic
Definition: mqtt_sn.h:232
mqtt_sn_evt_cb_t evt_cb
Definition: mqtt_sn.h:228
bool will_retain
Definition: mqtt_sn.h:220
struct mqtt_sn_transport * transport
Definition: mqtt_sn.h:222
struct net_buf_simple rx
Definition: mqtt_sn.h:226
int64_t last_ping
Definition: mqtt_sn.h:235
struct mqtt_sn_data will_topic
Definition: mqtt_sn.h:217
Abstracts memory buffers.
Definition: mqtt_sn.h:66
uint16_t size
Definition: mqtt_sn.h:68
const uint8_t * data
Definition: mqtt_sn.h:67
Definition: mqtt_sn.h:118
union mqtt_sn_evt_param param
Definition: mqtt_sn.h:120
enum mqtt_sn_evt_type type
Definition: mqtt_sn.h:119
Structure to describe an MQTT-SN transport.
Definition: mqtt_sn.h:142
ssize_t(* recv)(struct mqtt_sn_client *client, void *buffer, size_t length)
Will be called by the library when it wants to receive a message.
Definition: mqtt_sn.h:167
int(* init)(struct mqtt_sn_transport *transport)
Will be called once on client init to initialize the transport.
Definition: mqtt_sn.h:148
int(* poll)(struct mqtt_sn_client *client)
Check if incoming data is available.
Definition: mqtt_sn.h:179
int(* msg_send)(struct mqtt_sn_client *client, void *buf, size_t sz)
Definition: mqtt_sn.h:160
void(* deinit)(struct mqtt_sn_transport *transport)
Will be called on client deinit.
Definition: mqtt_sn.h:155
Simple network buffer representation.
Definition: buf.h:82
Definition: net_ip.h:344
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
static ZTEST_BMEM char buffer[8]
Definition: test_mbox_api.c:551
static ZTEST_DMEM int tp
Definition: main.c:35
Definition: mqtt_sn.h:107
struct mqtt_sn_evt_param::@232 publish
struct mqtt_sn_data data
Definition: mqtt_sn.h:109
enum mqtt_sn_topic_type topic_type
Definition: mqtt_sn.h:110
uint16_t topic_id
Definition: mqtt_sn.h:111