| /* |
| * Copyright (c) 2022 René Beckmann |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** @file mqtt_sn_msg.h |
| * |
| * @brief Function and data structures internal to MQTT-SN module. |
| */ |
| |
| #ifndef MQTT_SN_MSG_H_ |
| #define MQTT_SN_MSG_H_ |
| |
| #include <zephyr/net/mqtt_sn.h> |
| #include <zephyr/net/buf.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define MQTT_SN_LENGTH_FIELD_EXTENDED_PREFIX 0x01 |
| #define MQTT_SN_PROTOCOL_ID 0x01 |
| |
| struct mqtt_sn_flags { |
| bool dup; |
| enum mqtt_sn_qos qos; |
| bool retain; |
| bool will; |
| bool clean_session; |
| enum mqtt_sn_topic_type topic_type; |
| }; |
| |
| enum mqtt_sn_msg_type { |
| MQTT_SN_MSG_TYPE_ADVERTISE = 0x00, |
| MQTT_SN_MSG_TYPE_SEARCHGW = 0x01, |
| MQTT_SN_MSG_TYPE_GWINFO = 0x02, |
| MQTT_SN_MSG_TYPE_CONNECT = 0x04, |
| MQTT_SN_MSG_TYPE_CONNACK = 0x05, |
| MQTT_SN_MSG_TYPE_WILLTOPICREQ = 0x06, |
| MQTT_SN_MSG_TYPE_WILLTOPIC = 0x07, |
| MQTT_SN_MSG_TYPE_WILLMSGREQ = 0x08, |
| MQTT_SN_MSG_TYPE_WILLMSG = 0x09, |
| MQTT_SN_MSG_TYPE_REGISTER = 0x0A, |
| MQTT_SN_MSG_TYPE_REGACK = 0x0B, |
| MQTT_SN_MSG_TYPE_PUBLISH = 0x0C, |
| MQTT_SN_MSG_TYPE_PUBACK = 0x0D, |
| MQTT_SN_MSG_TYPE_PUBCOMP = 0x0E, |
| MQTT_SN_MSG_TYPE_PUBREC = 0x0F, |
| MQTT_SN_MSG_TYPE_PUBREL = 0x10, |
| MQTT_SN_MSG_TYPE_SUBSCRIBE = 0x12, |
| MQTT_SN_MSG_TYPE_SUBACK = 0x13, |
| MQTT_SN_MSG_TYPE_UNSUBSCRIBE = 0x14, |
| MQTT_SN_MSG_TYPE_UNSUBACK = 0x15, |
| MQTT_SN_MSG_TYPE_PINGREQ = 0x16, |
| MQTT_SN_MSG_TYPE_PINGRESP = 0x17, |
| MQTT_SN_MSG_TYPE_DISCONNECT = 0x18, |
| MQTT_SN_MSG_TYPE_WILLTOPICUPD = 0x1A, |
| MQTT_SN_MSG_TYPE_WILLTOPICRESP = 0x1B, |
| MQTT_SN_MSG_TYPE_WILLMSGUPD = 0x1C, |
| MQTT_SN_MSG_TYPE_WILLMSGRESP = 0x1D, |
| MQTT_SN_MSG_TYPE_ENCAPSULATED = 0xFE, |
| }; |
| |
| struct mqtt_sn_param_advertise { |
| uint8_t gw_id; |
| uint16_t duration; |
| }; |
| |
| struct mqtt_sn_param_searchgw { |
| uint8_t radius; |
| }; |
| |
| struct mqtt_sn_param_gwinfo { |
| uint8_t gw_id; |
| struct mqtt_sn_data gw_add; |
| }; |
| |
| struct mqtt_sn_param_connect { |
| bool will; |
| bool clean_session; |
| uint16_t duration; |
| struct mqtt_sn_data client_id; |
| }; |
| |
| struct mqtt_sn_param_connack { |
| enum mqtt_sn_return_code ret_code; |
| }; |
| |
| struct mqtt_sn_param_willtopic { |
| enum mqtt_sn_qos qos; |
| bool retain; |
| struct mqtt_sn_data topic; |
| }; |
| |
| struct mqtt_sn_param_willmsg { |
| struct mqtt_sn_data msg; |
| }; |
| |
| struct mqtt_sn_param_register { |
| uint16_t msg_id; |
| uint16_t topic_id; |
| struct mqtt_sn_data topic; |
| }; |
| |
| struct mqtt_sn_param_regack { |
| uint16_t msg_id; |
| uint16_t topic_id; |
| enum mqtt_sn_return_code ret_code; |
| }; |
| |
| struct mqtt_sn_param_publish { |
| bool dup; |
| bool retain; |
| enum mqtt_sn_qos qos; |
| enum mqtt_sn_topic_type topic_type; |
| uint16_t topic_id; |
| uint16_t msg_id; |
| struct mqtt_sn_data data; |
| }; |
| |
| struct mqtt_sn_param_puback { |
| uint16_t msg_id; |
| uint16_t topic_id; |
| enum mqtt_sn_return_code ret_code; |
| }; |
| |
| struct mqtt_sn_param_pubrec { |
| uint16_t msg_id; |
| }; |
| |
| struct mqtt_sn_param_pubrel { |
| uint16_t msg_id; |
| }; |
| |
| struct mqtt_sn_param_pubcomp { |
| uint16_t msg_id; |
| }; |
| |
| struct mqtt_sn_param_subscribe { |
| bool dup; |
| enum mqtt_sn_qos qos; |
| enum mqtt_sn_topic_type topic_type; |
| uint16_t msg_id; |
| struct { |
| struct mqtt_sn_data topic_name; |
| uint16_t topic_id; |
| } topic; |
| }; |
| |
| struct mqtt_sn_param_suback { |
| enum mqtt_sn_qos qos; |
| uint16_t topic_id; |
| uint16_t msg_id; |
| enum mqtt_sn_return_code ret_code; |
| }; |
| |
| struct mqtt_sn_param_unsubscribe { |
| enum mqtt_sn_topic_type topic_type; |
| uint16_t msg_id; |
| union { |
| struct mqtt_sn_data topic_name; |
| uint16_t topic_id; |
| } topic; |
| }; |
| |
| struct mqtt_sn_param_unsuback { |
| uint16_t msg_id; |
| }; |
| |
| struct mqtt_sn_param_pingreq { |
| struct mqtt_sn_data client_id; |
| }; |
| |
| struct mqtt_sn_param_disconnect { |
| uint16_t duration; |
| }; |
| |
| struct mqtt_sn_param_willtopicupd { |
| enum mqtt_sn_qos qos; |
| bool retain; |
| struct mqtt_sn_data topic; |
| }; |
| |
| struct mqtt_sn_param_willmsgupd { |
| struct mqtt_sn_data msg; |
| }; |
| |
| struct mqtt_sn_param_willtopicresp { |
| enum mqtt_sn_return_code ret_code; |
| }; |
| |
| struct mqtt_sn_param_willmsgresp { |
| enum mqtt_sn_return_code ret_code; |
| }; |
| |
| struct mqtt_sn_param { |
| enum mqtt_sn_msg_type type; |
| union { |
| struct mqtt_sn_param_advertise advertise; |
| struct mqtt_sn_param_searchgw searchgw; |
| struct mqtt_sn_param_gwinfo gwinfo; |
| struct mqtt_sn_param_connect connect; |
| struct mqtt_sn_param_connack connack; |
| struct mqtt_sn_param_willtopic willtopic; |
| struct mqtt_sn_param_willmsg willmsg; |
| struct mqtt_sn_param_register reg; |
| struct mqtt_sn_param_regack regack; |
| struct mqtt_sn_param_publish publish; |
| struct mqtt_sn_param_puback puback; |
| struct mqtt_sn_param_pubrec pubrec; |
| struct mqtt_sn_param_pubrel pubrel; |
| struct mqtt_sn_param_pubcomp pubcomp; |
| struct mqtt_sn_param_subscribe subscribe; |
| struct mqtt_sn_param_suback suback; |
| struct mqtt_sn_param_unsubscribe unsubscribe; |
| struct mqtt_sn_param_unsuback unsuback; |
| struct mqtt_sn_param_pingreq pingreq; |
| struct mqtt_sn_param_disconnect disconnect; |
| struct mqtt_sn_param_willtopicupd willtopicupd; |
| struct mqtt_sn_param_willmsgupd willmsgupd; |
| struct mqtt_sn_param_willtopicresp willtopicresp; |
| struct mqtt_sn_param_willmsgresp willmsgresp; |
| } params; |
| }; |
| |
| /**@brief MQTT-SN Flags-field bitmasks */ |
| #define MQTT_SN_FLAGS_DUP BIT(7) |
| #define MQTT_SN_FLAGS_QOS_0 0 |
| #define MQTT_SN_FLAGS_QOS_1 BIT(5) |
| #define MQTT_SN_FLAGS_QOS_2 BIT(6) |
| #define MQTT_SN_FLAGS_QOS_M1 BIT(5) | BIT(6) |
| #define MQTT_SN_FLAGS_MASK_QOS (BIT(5) | BIT(6)) |
| #define MQTT_SN_FLAGS_SHIFT_QOS 5 |
| #define MQTT_SN_FLAGS_RETAIN BIT(4) |
| #define MQTT_SN_FLAGS_WILL BIT(3) |
| #define MQTT_SN_FLAGS_CLEANSESSION BIT(2) |
| #define MQTT_SN_FLAGS_TOPICID_TYPE_NORMAL 0 |
| #define MQTT_SN_FLAGS_TOPICID_TYPE_PREDEF BIT(0) |
| #define MQTT_SN_FLAGS_TOPICID_TYPE_SHORT BIT(1) |
| #define MQTT_SN_FLAGS_MASK_TOPICID_TYPE (BIT(0) | BIT(1)) |
| #define MQTT_SN_FLAGS_SHIFT_TOPICID_TYPE 0 |
| |
| static inline void *net_buf_simple_add_data(struct net_buf_simple *buf, struct mqtt_sn_data *data) |
| { |
| return net_buf_simple_add_mem(buf, data->data, data->size); |
| } |
| |
| int mqtt_sn_encode_msg(struct net_buf_simple *buf, struct mqtt_sn_param *params); |
| |
| int mqtt_sn_decode_msg(struct net_buf_simple *buf, struct mqtt_sn_param *params); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* MQTT_SN_MSG_H_ */ |