dgiot/apps/emqx_sn/include/emqx_sn.hrl
2021-05-22 03:06:00 +09:00

186 lines
6.5 KiB
Erlang

%%--------------------------------------------------------------------
%% Copyright (c) 2020-2021 EMQ Technologies Co., Ltd. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
%% MQTT-SN Types
%%--------------------------------------------------------------------
-define(SN_ADVERTISE, 16#00).
-define(SN_SEARCHGW, 16#01).
-define(SN_GWINFO, 16#02).
-define(SN_CONNECT, 16#04).
-define(SN_CONNACK, 16#05).
-define(SN_WILLTOPICREQ, 16#06).
-define(SN_WILLTOPIC, 16#07).
-define(SN_WILLMSGREQ, 16#08).
-define(SN_WILLMSG, 16#09).
-define(SN_REGISTER, 16#0A).
-define(SN_REGACK, 16#0B).
-define(SN_PUBLISH, 16#0C).
-define(SN_PUBACK, 16#0D).
-define(SN_PUBCOMP, 16#0E).
-define(SN_PUBREC, 16#0F).
-define(SN_PUBREL, 16#10).
-define(SN_SUBSCRIBE, 16#12).
-define(SN_SUBACK, 16#13).
-define(SN_UNSUBSCRIBE, 16#14).
-define(SN_UNSUBACK, 16#15).
-define(SN_PINGREQ, 16#16).
-define(SN_PINGRESP, 16#17).
-define(SN_DISCONNECT, 16#18).
-define(SN_WILLTOPICUPD, 16#1A).
-define(SN_WILLTOPICRESP, 16#1B).
-define(SN_WILLMSGUPD, 16#1C).
-define(SN_WILLMSGRESP, 16#1D).
-type(mqtt_sn_type() :: ?SN_ADVERTISE..?SN_WILLMSGRESP).
-define(SN_RC_ACCEPTED, 16#00).
-define(SN_RC_CONGESTION, 16#01).
-define(SN_RC_INVALID_TOPIC_ID, 16#02).
-define(SN_RC_NOT_SUPPORTED, 16#03).
-define(QOS_NEG1, 3).
-type(mqtt_sn_return_code() :: ?SN_RC_ACCEPTED .. ?SN_RC_NOT_SUPPORTED).
%%--------------------------------------------------------------------
%% MQTT-SN Message
%%--------------------------------------------------------------------
-record(mqtt_sn_flags, {dup = false,
qos = 0,
retain = false,
will = false,
clean_start = false,
topic_id_type = 0}).
-type(mqtt_sn_flags() :: #mqtt_sn_flags{}).
-type(mqtt_sn_variable() :: undefined | integer() | binary() | tuple()).
-record(mqtt_sn_message, {type :: mqtt_sn_type(),
variable :: mqtt_sn_variable()}).
-type(mqtt_sn_message() :: #mqtt_sn_message{}).
-define(SN_ADVERTISE_MSG(GwId, Duration),
#mqtt_sn_message{type = ?SN_ADVERTISE,
variable = {GwId, Duration}}).
-define(SN_SEARCHGW_MSG(Radius),
#mqtt_sn_message{type = ?SN_SEARCHGW,
variable = Radius}).
-define(SN_GWINFO_MSG(GwId, GwAddr),
#mqtt_sn_message{type = ?SN_GWINFO,
variable = {GwId, GwAddr}}).
-define(SN_CONNECT_MSG(Flags, ProtocolId, Duration, ClientId),
#mqtt_sn_message{type = ?SN_CONNECT,
variable = {Flags, ProtocolId, Duration, ClientId}}).
-define(SN_CONNACK_MSG(ReturnCode),
#mqtt_sn_message{type = ?SN_CONNACK, variable = ReturnCode}).
-define(SN_WILLTOPICREQ_MSG(),
#mqtt_sn_message{type = ?SN_WILLTOPICREQ}).
-define(SN_WILLTOPIC_MSG(Flags, Topic),
#mqtt_sn_message{type = ?SN_WILLTOPIC,
variable = {Flags, Topic}}).
-define(SN_WILLTOPIC_EMPTY_MSG,
#mqtt_sn_message{type = ?SN_WILLTOPIC,
variable = undefined}).
-define(SN_WILLMSGREQ_MSG(),
#mqtt_sn_message{type = ?SN_WILLMSGREQ}).
-define(SN_WILLMSG_MSG(Msg),
#mqtt_sn_message{type = ?SN_WILLMSG, variable = Msg}).
-define(SN_REGISTER_MSG(TopicId, MsgId, TopicName),
#mqtt_sn_message{type = ?SN_REGISTER,
variable = {TopicId, MsgId, TopicName}}).
-define(SN_REGACK_MSG(TopicId, MsgId, ReturnCode),
#mqtt_sn_message{type = ?SN_REGACK,
variable = {TopicId, MsgId, ReturnCode}}).
-define(SN_PUBLISH_MSG(Flags, TopicId, MsgId, Data),
#mqtt_sn_message{type = ?SN_PUBLISH,
variable = {Flags, TopicId, MsgId, Data}}).
-define(SN_PUBACK_MSG(TopicId, MsgId, ReturnCode),
#mqtt_sn_message{type = ?SN_PUBACK,
variable = {TopicId, MsgId, ReturnCode}}).
%% Type: SN_PUBREC | SN_PUBREL | SN_PUBCOMP
-define(SN_PUBREC_MSG(Type, MsgId),
#mqtt_sn_message{type = Type,
variable = MsgId}).
-define(SN_SUBSCRIBE_MSG(Flags, MsgId, Topic),
#mqtt_sn_message{type = ?SN_SUBSCRIBE,
variable = {Flags, MsgId, Topic}}).
-define(SN_SUBACK_MSG(Flags, TopicId, MsgId, ReturnCode),
#mqtt_sn_message{type = ?SN_SUBACK,
variable = {Flags, TopicId, MsgId, ReturnCode}}).
-define(SN_UNSUBSCRIBE_MSG(Flags, MsgId, Topic),
#mqtt_sn_message{type = ?SN_UNSUBSCRIBE,
variable = {Flags, MsgId, Topic}}).
-define(SN_UNSUBACK_MSG(MsgId),
#mqtt_sn_message{type = ?SN_UNSUBACK,
variable = MsgId}).
-define(SN_PINGREQ_MSG(ClientId),
#mqtt_sn_message{type = ?SN_PINGREQ, variable = ClientId}).
-define(SN_PINGRESP_MSG(), #mqtt_sn_message{type = ?SN_PINGRESP}).
-define(SN_DISCONNECT_MSG(Duration),
#mqtt_sn_message{type = ?SN_DISCONNECT,
variable = Duration}).
-define(SN_WILLTOPICUPD_MSG(Flags, Topic),
#mqtt_sn_message{type = ?SN_WILLTOPICUPD,
variable = {Flags, Topic}}).
-define(SN_WILLTOPICRESP_MSG(ReturnCode),
#mqtt_sn_message{type = ?SN_WILLTOPICRESP,
variable = ReturnCode}).
-define(SN_WILLMSGUPD_MSG(Msg),
#mqtt_sn_message{type = ?SN_WILLMSGUPD,
variable = Msg}).
-define(SN_WILLMSGRESP_MSG(ReturnCode),
#mqtt_sn_message{type = ?SN_WILLMSGRESP,
variable = ReturnCode}).
-define(SN_NORMAL_TOPIC, 0).
-define(SN_PREDEFINED_TOPIC, 1).
-define(SN_SHORT_TOPIC, 2).
-define(SN_RESERVED_TOPIC, 3).
-define(SN_INVALID_TOPIC_ID, 0).