Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
shell_mqtt.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 G-Technologies Sdn. Bhd.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_SHELL_SHELL_MQTT_H_
14#define ZEPHYR_INCLUDE_SHELL_SHELL_MQTT_H_
15
16#include <zephyr/kernel.h>
17#include <zephyr/shell/shell.h>
18#include <zephyr/net/socket.h>
19#include <zephyr/net/net_mgmt.h>
22#include <zephyr/net/mqtt.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
30
31#define RX_RB_SIZE CONFIG_SHELL_MQTT_RX_BUF_SIZE
32#define TX_BUF_SIZE CONFIG_SHELL_MQTT_TX_BUF_SIZE
33#define SH_MQTT_BUFFER_SIZE 64
34#define DEVICE_ID_BIN_MAX_SIZE 3
35#define DEVICE_ID_HEX_MAX_SIZE ((DEVICE_ID_BIN_MAX_SIZE * 2) + 1)
36#define SH_MQTT_TOPIC_RX_MAX_SIZE DEVICE_ID_HEX_MAX_SIZE + sizeof(CONFIG_SHELL_MQTT_TOPIC_RX_ID)
37#define SH_MQTT_TOPIC_TX_MAX_SIZE DEVICE_ID_HEX_MAX_SIZE + sizeof(CONFIG_SHELL_MQTT_TOPIC_TX_ID)
38
39extern const struct shell_transport_api shell_mqtt_transport_api;
40
41struct shell_mqtt_tx_buf {
43 char buf[TX_BUF_SIZE];
44
46 uint16_t len;
47};
48
50struct shell_mqtt {
51 char device_id[DEVICE_ID_HEX_MAX_SIZE];
52 char sub_topic[SH_MQTT_TOPIC_RX_MAX_SIZE];
53 char pub_topic[SH_MQTT_TOPIC_TX_MAX_SIZE];
54
56 shell_transport_handler_t shell_handler;
57
58 struct ring_buf rx_rb;
59 uint8_t rx_rb_buf[RX_RB_SIZE];
60 uint8_t *rx_rb_ptr;
61
62 struct shell_mqtt_tx_buf tx_buf;
63
65 void *shell_context;
66
68 struct mqtt_client mqtt_cli;
69
70 /* Buffers for MQTT client. */
71 struct buffer {
72 uint8_t rx[SH_MQTT_BUFFER_SIZE];
73 uint8_t tx[SH_MQTT_BUFFER_SIZE];
74 } buf;
75
76 struct k_mutex lock;
77
79 struct net_sockaddr_storage broker;
80
81 struct zsock_addrinfo *haddr;
82 struct zsock_pollfd fds[1];
83 int nfds;
84
85 struct mqtt_publish_param pub_data;
86
87 struct net_mgmt_event_callback mgmt_cb;
88
90 struct k_work_q workq;
91 struct k_work net_disconnected_work;
92 struct k_work_delayable connect_dwork;
93 struct k_work_delayable subscribe_dwork;
94 struct k_work_delayable process_dwork;
95 struct k_work_delayable publish_dwork;
96
98 enum sh_mqtt_transport_state {
99 SHELL_MQTT_TRANSPORT_DISCONNECTED,
100 SHELL_MQTT_TRANSPORT_CONNECTED,
101 } transport_state;
102
104 enum sh_mqtt_subscribe_state {
105 SHELL_MQTT_NOT_SUBSCRIBED,
106 SHELL_MQTT_SUBSCRIBED,
107 } subscribe_state;
108
110 enum sh_mqtt_network_state {
111 SHELL_MQTT_NETWORK_DISCONNECTED,
112 SHELL_MQTT_NETWORK_CONNECTED,
113 } network_state;
114};
116
123
129#define SHELL_MQTT_DEFINE(_name) \
130 static struct shell_mqtt _name##_shell_mqtt; \
131 struct shell_transport _name = { .api = &shell_mqtt_transport_api, \
132 .ctx = (struct shell_mqtt *)&_name##_shell_mqtt }
133
143
156bool shell_mqtt_get_devid(char *id, int id_max_len);
157
159
160#ifdef __cplusplus
161}
162#endif
163
164#endif /* ZEPHYR_INCLUDE_SHELL_SHELL_MQTT_H_ */
API for monitoring network connections and interfaces.
enum mgmt_cb_return(* mgmt_cb)(uint32_t event, enum mgmt_cb_return prev_status, int32_t *rc, uint16_t *group, bool *abort_more, void *data, size_t data_size)
Function to be called on MGMT notification/event.
Definition callbacks.h:75
void(* shell_transport_handler_t)(enum shell_transport_evt evt, void *context)
Shell transport event handler callback.
Definition shell.h:831
bool shell_mqtt_get_devid(char *id, int id_max_len)
Function to define the device ID (devid) for which the shell mqtt backend uses as a client ID when it...
const struct shell * shell_backend_mqtt_get_ptr(void)
This function provides pointer to shell mqtt backend instance.
Public kernel APIs.
MQTT Client Implementation.
BSD Sockets compatible API definitions.
Network Events code public header.
Network Management API public header.
Header file for the ring buffer API.
Header file for the shell subsystem.
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Unified shell transport interface.
Definition shell.h:863
Shell instance internals.
Definition shell.h:1128