m2mb API docs  25.30.003
m2mb API sets documentation
Documentation for m2mb_mqttsn functionalities

This group includes all the information about m2mb_mqttsn configuration and usage *. More...

#define m2mb_mqttsn_conf_(h, args...)   m2mb_mqttsn_conf( h, CMDS( args ) )
 
enum  M2MB_MQTTSN_IND_E { M2MB_MQTTSN_INDICATION_DISCONNECT = 0, M2MB_MQTTSN_INDICATION_MESSAGE_RCV = 1 }
 MQTT-SN Indications enum. More...
 
enum  M2MB_MQTTSN_RESPONSE_E {
  M2MB_MQTTSN_SUCCESS = 0, M2MB_MQTTSN_ERROR_BAD_ARG = -1, M2MB_MQTTSN_ERROR_OUT_OF_BUFFER = -2, M2MB_MQTTSN_ERROR_MALFORMED_DATA = -3,
  M2MB_MQTTSN_ERROR_PACKET_TYPE = -4, M2MB_MQTTSN_ERROR_PACKET_ID = -5, M2MB_MQTTSN_ERROR_TIMEOUT = -7, M2MB_MQTTSN_ERROR_NETWORK = -8,
  M2MB_MQTTSN_ERROR_MEMORY = -9, M2MB_MQTTSN_ERROR_STAT = -10, M2MB_MQTTSN_ERROR_CALLBACK = -13, M2MB_MQTTSN_ERROR_SEM = -14,
  M2MB_MQTTSN_ERROR_ASYNC_THREAD = -16, M2MB_MQTTSN_ERROR = -100, M2MB_MQTTSN_CONTINUE = -101
}
 MQTT-SN APIs response enum. More...
 
enum  M2MB_MQTTSN_STATUS_E {
  M2MB_MQTTSN_NOT_CONNECTED, M2MB_MQTTSN_SOCKET_CONNECTED, M2MB_MQTTSN_CLIENT_CONNECTED, M2MB_MQTTSN_CONN_RESET_BY_PEER,
  M2MB_MQTTSN_PINGREQ_TIMEOUT_FAIL, M2MB_MQTTSN_CONNECT_TIMEOUT, M2MB_MQTTSN_CLIENT_SLEEP, M2MB_MQTTSN_CLIENT_AWAKE,
  M2MB_MQTTSN_FATAL_ERROR, M2MB_MQTTSN_NETWORK_ERROR, M2MB_MQTTSN_STATUS_UNKNOWN = 0xFF
}
 mqtt-sn client status enum More...
 
enum  M2MB_MQTTSN_ACTION_E {
  M2MB_MQTTSN_SET_CLIENT_ID, M2MB_MQTTSN_SET_TIMEOUT_MS, M2MB_MQTTSN_SECURE_OPT, M2MB_MQTTSN_SET_KEEPALIVE_SEC,
  M2MB_MQTTSN_SET_CLEAN_SESSION, M2MB_MQTTSN_SET_LAST_WILL, M2MB_MQTTSN_SET_PDP_CONTEXT, M2MB_MQTTSN_GET_CLIENT_ID,
  M2MB_MQTTSN_GET_TIMEOUT_MS, M2MB_MQTTSN_GET_KEEPALIVE_SEC, M2MB_MQTTSN_GET_CLEAN_SESSION, M2MB_MQTTSN_GET_LAST_WILL,
  M2MB_MQTTSN_GET_PDP_CONTEXT
}
 MQTT-SN actions enum List of actions performed through m2mb_mqttsn_conf API. More...
 
enum  M2MB_MQTTSN_QOS_E { M2MB_MQTTSN_QOS_0 = 0, M2MB_MQTTSN_QOS_1 = 1, M2MB_MQTTSN_QOS_2 = 2, M2MB_MQTTSN_QOS_3 = 3 }
 MQTT-SN QoS Enum. More...
 
enum  M2MB_MQTTSN_TOPIC_ID_E { M2MB_MQTTSN_TOPIC_ID_NORMAL = 0x0, M2MB_MQTTSN_TOPIC_ID_PREDEF = 0x1, M2MB_MQTTSN_TOPIC_ID_SHORT = 0x2 }
 MQTT-SN Topic ID types. More...
 
enum  M2MB_MQTTSN_RX_STATUS_E { M2MB_MQTTSN_RX_FINISHED, M2MB_MQTTSN_RX_MORE_DATA }
 MQTT-SN Receive Data Status Enum. More...
 
enum  M2MB_MQTTSN_CODE_E { M2MB_MQTTSN_CODE_ACCEPTED = 0x00, M2MB_MQTTSN_CODE_CONGESTION = 0x01, M2MB_MQTTSN_CODE_INVTOPICNAME = 0x02, M2MB_MQTTSN_CODE_NOTSUPPORTED = 0x03 }
 RETURN CODE values received in various MQTT-SN response (Acknowledgement) packets. More...
 
typedef HANDLE M2MB_MQTTSN_HANDLE
 MQTT-SN context handle. This is obtained from m2mb_mqttsn_init API and then used in subsequent MQTT-SN APIs.
 
typedef struct M2MB_MQTTSN_WILL M2MB_MQTTSN_WILL_T
 MQTT-SN will structure. Used while setting will and will topic update.
 
typedef struct M2MB_MQTTSN_PUBLISH M2MB_MQTTSN_PUBLISH_T
 MQTT-SN Publish structure. This is used to Publish data to the Gateway.
 
typedef struct M2MB_MQTTSN_SUBSCRIBE M2MB_MQTTSN_SUBSCRIBE_T
 MQTT-SN Subscribe structure. This is used while subscribing to a topic/topic Id.
 
typedef struct M2MB_MQTTSN_MESSAGE_CTX M2MB_MQTTSN_MESSAGE_CTX_T
 MQTT-SN Subscribe structure. This is used while subscribing to a topic/topic Id.
 
typedef void(* m2mb_mqttsn_ind_callback) (M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size, void *resp, void *userdata)
 MQTT-SN callback prototype. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_init (M2MB_MQTTSN_HANDLE *pHandle, m2mb_mqttsn_ind_callback callback, void *userdata)
 m2mb_mqttsn_init is called to initialize MQTT-SN context. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_deinit (M2MB_MQTTSN_HANDLE handle)
 m2mb_mqttsn_deinit deinitializes MQTT-SN service for specified MQTT-SN client. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_conf (M2MB_MQTTSN_HANDLE handle, UINT8 nCmds,...)
 m2mb_mqttsn_conf sets/gets some MQTTSN parameters and configurations. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_socket (M2MB_MQTTSN_HANDLE handle, const CHAR *host, UINT32 port)
 m2mb_mqttsn_socket is called to initialize the socket More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_clean_socket (M2MB_MQTTSN_HANDLE handle)
 m2mb_mqttsn_clean_socket is called to perform socket related cleanup More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_connect (M2MB_MQTTSN_HANDLE handle, UINT8 *return_code)
 m2mb_mqttsn_connect is called to connect to the specified MQTTSN Gateway. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_disconnect (M2MB_MQTTSN_HANDLE handle)
 m2mb_mqttsn_disconnect is called to disconnect from the MQTTSN Gateway. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_register (M2MB_MQTTSN_HANDLE handle, const CHAR *topic, UINT16 *topic_id, UINT8 *return_code)
 m2mb_mqttsn_register is called to send Register packet to the Gateway. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_publish (M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_PUBLISH_T publish, UINT8 *return_code)
 m2mb_mqttsn_publish is called to send Publish packet to the Gateway. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_subscribe (M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_SUBSCRIBE_T subscribe, UINT16 *topic_id, UINT8 *return_code)
 m2mb_mqttsn_subscribe is called to send Subscribe to the specified topic/topic name. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_unsubscribe (M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_TOPIC_ID_E topic_type, const CHAR *topic, UINT16 topic_id)
 m2mb_mqttsn_unsubscribe is called to send Unsubscribe to the specified topic/topic name. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_ping (M2MB_MQTTSN_HANDLE handle)
 m2mb_mqttsn_ping is called to ping More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_enter_sleep (M2MB_MQTTSN_HANDLE handle, UINT16 duration)
 m2mn_mqttsn_enter_sleep is called to enable sleeping client functionality More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_awake (M2MB_MQTTSN_HANDLE handle)
 m2mb_mqttsn_awake is called to enter "awake" state More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_will_topic_update (M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_WILL_T *will, UINT8 *return_code)
 m2mb_mqttsn_will_topic_update is called to send Topic Update packet to the Gateway. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_will_message_update (M2MB_MQTTSN_HANDLE handle, CHAR *will_msg, UINT16 will_msg_len, UINT8 *return_code)
 m2mb_mqttsn_will_message_update is called to send Will Message Update packet to the Gateway. More...
 
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_get_client_status (M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_STATUS_E *status)
 m2mb_mqttsn_get_client_status gets MQTTSN client current status More...
 

Detailed Description

This group includes all the information about m2mb_mqttsn configuration and usage *.

Typedef Documentation

◆ m2mb_mqttsn_ind_callback

typedef void( * m2mb_mqttsn_ind_callback) (M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size, void *resp, void *userdata)

MQTT-SN callback prototype.

This callback is triggered when MQTT-SN client receives any event (M2MB_MQTTSN_IND_E)

Parameters
[in]Handlehandle to the MQTT-SN client instance on which MQTT-SN message is received
[in]eventevent indication for which the callback has been triggered
[in]resp_sizesize of the data sent
[in]respresponse
[in]userdatauser data returned by callback function
Returns
None
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
printf("Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
printf("MQTT-SN Message: Topic %s, Len %d\r\n", buf, msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
printf("Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
printf("More data to be received");
}
break;
default :
printf("default case");
break;
}
}
void main(void)
{
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//... Use MQTT-SN APIs ....

Enumeration Type Documentation

◆ M2MB_MQTTSN_ACTION_E

MQTT-SN actions enum List of actions performed through m2mb_mqttsn_conf API.

Enumerator
M2MB_MQTTSN_SET_CLIENT_ID 

To set client id of the device.
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" );

M2MB_MQTTSN_SET_TIMEOUT_MS 

To set Timeout for MQTT-SN operations in milliseconds.
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );

M2MB_MQTTSN_SECURE_OPT 

To enable Secured MQTT-SN. This feature will not be supported in 1st release.

M2MB_MQTTSN_SET_KEEPALIVE_SEC 

To set keep alive interval of the connection in seconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_KEEPALIVE_SEC, 60 ) );

M2MB_MQTTSN_SET_CLEAN_SESSION 

Set clean session flag that will be used by the MQTT-SN core. User has to specify value to be set.
If it is set to 1, session will be non-persistent. Else, it will be persistent.
Default value is 1. m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLEAN_SESSION, 1 ) );

M2MB_MQTTSN_SET_LAST_WILL 

Set MQTT-SN Protocol will flag that will be used by the MQTT-SN core. These configuration will be used to set will during connection establishment
M2MB_MQTTSN_WILL_T client_will = {0}; CHAR will_topic[] = "last_will_topic"; CHAR will_msg[] = "client disconnected"; client_will.will=1; client_will.qos = 1; client_will.retain=1; client_will.will_topic = will_topic; client_will.will_msg = will_msg; client_will.will_msg_len = strlen( will_msg ); m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_LAST_WILL, &client_will );

M2MB_MQTTSN_SET_PDP_CONTEXT 

To set pdp conetxt to be used for the MQTT-SN client.
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_PDP_CONTEXT, 2 ) );

M2MB_MQTTSN_GET_CLIENT_ID 

To retrieve client id of the device configured by the user.
UINT8* cid = NULL; m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_GET_CLIENT_ID, &cid ) ); printf("Cid = %s", cid);

M2MB_MQTTSN_GET_TIMEOUT_MS 

To retrieve timeout of the MQTT-SN operations in milliseconds.
UINT32 timeout = 0; m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_GET_TIMEOUT_MS, &timeout ) ); printf("timeout = %d ms", timeout);

M2MB_MQTTSN_GET_KEEPALIVE_SEC 

To retrieve Keepalive interval in seconds.
UINT32 keepalive = 0; m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_GET_KEEPALIVE_SEC, &keepalive ) ); printf("keepalive = %d ms", keepalive);

M2MB_MQTTSN_GET_CLEAN_SESSION 

To retrieve configured clean session flag that will be used by the MQTT-SN core.
UINT8 clean_session; m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_GET_CLEAN_SESSION, &clean_session ) ); printf("clean session = %d", clean_session);

M2MB_MQTTSN_GET_LAST_WILL 

To retrieve Last will and testament settings used by MQTT-SN core
M2MB_MQTTSN_WILL_T* client_will = NULL; m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_GET_LAST_WILL, &client_will ) ); printf("last will = %d\r\n", client_will->will); printf("will qos = %d\r\n", client_will->qos); printf("will retain = %d\r\n", client_will->retain); printf("will topic = %s\r\n", client_will->topic); printf("will message = %s\r\n", client_will->message);

M2MB_MQTTSN_GET_PDP_CONTEXT 

To retrieve pdp conetxt to be used for the MQTT-SN client.
UINT8 pdp; m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_GET_PDP_CONTEXT, &pdp ) ); printf("pdp = %d", pdp);

◆ M2MB_MQTTSN_CODE_E

RETURN CODE values received in various MQTT-SN response (Acknowledgement) packets.

Enumerator
M2MB_MQTTSN_CODE_ACCEPTED 

Connection/Message is accepted

M2MB_MQTTSN_CODE_CONGESTION 

Operation not success due to congestion

M2MB_MQTTSN_CODE_INVTOPICNAME 

Invalid topic name

M2MB_MQTTSN_CODE_NOTSUPPORTED 

Value not supported

◆ M2MB_MQTTSN_IND_E

MQTT-SN Indications enum.

Enumerator
M2MB_MQTTSN_INDICATION_DISCONNECT 

This event is received when MQTT-SN Gateway triggers the disconnect asynchronously or when MQTT-SN ping fails.

M2MB_MQTTSN_INDICATION_MESSAGE_RCV 

This event is received when client receives a publish message on a subscribed topic.

◆ M2MB_MQTTSN_QOS_E

MQTT-SN QoS Enum.

Enumerator
M2MB_MQTTSN_QOS_0 

At most once delivery

M2MB_MQTTSN_QOS_1 

At least once delivery

M2MB_MQTTSN_QOS_2 

Exactly once delivery

M2MB_MQTTSN_QOS_3 

Publish with QoS -1

◆ M2MB_MQTTSN_RESPONSE_E

MQTT-SN APIs response enum.

Enumerator
M2MB_MQTTSN_SUCCESS 

Response is success

M2MB_MQTTSN_ERROR_BAD_ARG 

Bad argument was passed by the user

M2MB_MQTTSN_ERROR_OUT_OF_BUFFER 

Out of buffer

M2MB_MQTTSN_ERROR_MALFORMED_DATA 

Malformed Data

M2MB_MQTTSN_ERROR_PACKET_TYPE 

Wrong packet type

M2MB_MQTTSN_ERROR_PACKET_ID 

Wrong packet Id

M2MB_MQTTSN_ERROR_TIMEOUT 

Timeout occurred

M2MB_MQTTSN_ERROR_NETWORK 

Error in Network

M2MB_MQTTSN_ERROR_MEMORY 

Out of Memory

M2MB_MQTTSN_ERROR_STAT 

Error in Stats

M2MB_MQTTSN_ERROR_CALLBACK 

Callback Error

M2MB_MQTTSN_ERROR_SEM 

Error in connection semaphore

M2MB_MQTTSN_ERROR_ASYNC_THREAD 

Error in Async thread

M2MB_MQTTSN_ERROR 

Generic error

M2MB_MQTTSN_CONTINUE 

MQTT-SN Continue

◆ M2MB_MQTTSN_RX_STATUS_E

MQTT-SN Receive Data Status Enum.

Enumerator
M2MB_MQTTSN_RX_FINISHED 

Entire data is received

M2MB_MQTTSN_RX_MORE_DATA 

Partial data is pending

◆ M2MB_MQTTSN_STATUS_E

mqtt-sn client status enum

Enumerator
M2MB_MQTTSN_NOT_CONNECTED 

Client is initialized but not connected.

M2MB_MQTTSN_SOCKET_CONNECTED 

Socket initializations are done but MQTT-SN connection is not established with the Gateway yet

M2MB_MQTTSN_CLIENT_CONNECTED 

Client performed MQTT-SN authentication with the Gateway and is in 'Active' state.

M2MB_MQTTSN_CONN_RESET_BY_PEER 

Connection closed or reset by the Gateway

M2MB_MQTTSN_PINGREQ_TIMEOUT_FAIL 

The answer to the ping request packet was not received

M2MB_MQTTSN_CONNECT_TIMEOUT 

Not in use currently

M2MB_MQTTSN_CLIENT_SLEEP 

Client is in 'Asleep' state

M2MB_MQTTSN_CLIENT_AWAKE 

Client is in 'Awake' state

M2MB_MQTTSN_FATAL_ERROR 

Failure in the m2mb APIs

M2MB_MQTTSN_NETWORK_ERROR 

Socket timeout or read error

M2MB_MQTTSN_STATUS_UNKNOWN 

Unknown state or client not initialized

◆ M2MB_MQTTSN_TOPIC_ID_E

MQTT-SN Topic ID types.

Enumerator
M2MB_MQTTSN_TOPIC_ID_NORMAL 

Normal topic/topicID type

M2MB_MQTTSN_TOPIC_ID_PREDEF 

Predefined topic

M2MB_MQTTSN_TOPIC_ID_SHORT 

Short topic (max size two octects)

Function Documentation

◆ m2mb_mqttsn_awake()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_awake ( M2MB_MQTTSN_HANDLE  handle)

m2mb_mqttsn_awake is called to enter "awake" state

m2mb_mqttsn_awake is called to send Ping request to the Gateway. Gateway will send all the messages buffered for the client in that duration one ping request is triggered. After Ping Completetion, client will again enter "asleep" state.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
To exit "asleep" state i.e. to enter "active" state, m2mb_mqttsn_connect API has to be called.

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf, message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
result = m2mb_mqttsn_enter_sleep( p_mqttsn , 300 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_enter_sleep succeeded");
}
result = m2mb_mqttsn_awake( p_mqttsn );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_awake succeeded");
}
}

◆ m2mb_mqttsn_clean_socket()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_clean_socket ( M2MB_MQTTSN_HANDLE  handle)

m2mb_mqttsn_clean_socket is called to perform socket related cleanup

m2mb_mqttsn_clean_socket performs the socket cleanup.

Parameters
[in]handlehandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
default :
printf("default case");
break;
}
}
void main(void)
{
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
//... Use MQTTSN APIs ....
result = m2mb_mqttsn_clean_socket( p_mqttsn );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_clean_socket succeeded");
}
result = m2mb_mqttsn_deinit( p_mqttsn );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_deinit succeeded");
}
}

◆ m2mb_mqttsn_conf()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_conf ( M2MB_MQTTSN_HANDLE  handle,
UINT8  nCmds,
  ... 
)

m2mb_mqttsn_conf sets/gets some MQTTSN parameters and configurations.

m2mb_mqttsn_conf sets/gets MQTTSN parameters listed in the M2MB_MQTTSN_ACTION_E enum. These are to be performed before m2mb_mqttsn_socket.

Parameters
[in]handlehandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]nCmdsdetermines the number of parameters that follows
[in]action(among the ones listed in M2MB_MQTTSN_ACTION_E), while the parameters that follow depend on the action (see following note for further details)
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Action: M2MB_MQTTSN_SET_CLIENT_ID refer m2mb_mqttsn_conf_ to avoid specifiying number of arguments or without using CMDS

Description: set the Unique clinet ID in order to connect to the MQTTSN Gateway.

Params(in): h(M2MB_MQTTSN_HANDLE), action(M2MB_MQTTSN_ACTION_E), format(UINT8*)

  • example: set the CId 2

m2mb_mqttsn_conf( h, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
default :
printf("default case");
break;
}
}
void main(void)
{
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
//... Use MQTTSN APIs ....
}

◆ m2mb_mqttsn_connect()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_connect ( M2MB_MQTTSN_HANDLE  handle,
UINT8 *  return_code 
)

m2mb_mqttsn_connect is called to connect to the specified MQTTSN Gateway.

m2mb_mqttsn_connect performs MQTTSN connection to the URL specified during socket initialization. Once client is connected, it is said to be in "active" state. CLient goes to "asleep" state if m2mn_mqttsn_enter_sleep API is called. To exit "asleep" state i.e. to enter "active" state, m2mb_mqttsn_connect API has to be called.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[out]return_codeReturn code received in Acknowledgement message. See @M2MB_MQTTSN_CODE_E.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Socket initializations should be performed using m2mb_mqttsn_socket API before calling this function. Example
void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
printf("Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
printf("MQTT-SN Message: Topic %s, Len %d\r\n", buf, msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
printf("Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
printf("More data to be received");
}
break;
default :
printf("default case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
//... Use MQTT-SN APIs ....

◆ m2mb_mqttsn_deinit()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_deinit ( M2MB_MQTTSN_HANDLE  handle)

m2mb_mqttsn_deinit deinitializes MQTT-SN service for specified MQTT-SN client.

m2mb_mqttsn_deinit deinitializes MQTT-SN service for specified MQTT-SN client releasing the resources associated with the handle as first parameter. Calling the m2mb_mqttsn_deinit is needed after having completed the usage of MQTT-SN service to release reserved memory

Parameters
[in]handlehandle to the MQTT-SN client service, that will be deinitialized by the function.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
default :
printf("default case");
break;
}
}
void main(void)
{
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//... Use MQTT-SN APIs ....
result = m2mb_mqttsn_deinit( p_mqttsn );
if ( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_deinit succeeded");
}
}

◆ m2mb_mqttsn_disconnect()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_disconnect ( M2MB_MQTTSN_HANDLE  handle)

m2mb_mqttsn_disconnect is called to disconnect from the MQTTSN Gateway.

m2mb_mqttsn_disconnect disconnects the specified MQTTSN client from the Gateway.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
printf("Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
printf("MQTT-SN Message: Topic %s, Len %d\r\n", buf, msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
printf("Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
printf("More data to be received");
}
break;
default :
printf("default case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
//... Use MQTT-SN APIs ....
result = m2mb_mqttsn_disconnect( p_mqttsn );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_disconnect succeeded");
}
result = m2mb_mqttsn_clean_socket( p_mqttsn );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_clean_socket succeeded");
}
result = m2mb_mqttsn_deinit( p_mqttsn );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_deinit succeeded");
}
}

◆ m2mb_mqttsn_enter_sleep()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_enter_sleep ( M2MB_MQTTSN_HANDLE  handle,
UINT16  duration 
)

m2mn_mqttsn_enter_sleep is called to enable sleeping client functionality

m2mn_mqttsn_enter_sleep is called to enter MQTT-SN client to "asleep" state During the asleep state, all messages that need to be sent to the client are buffered at the server/gateway. Ping request is sent periodically to the server whose period is specified by parameter duration. When Ping request is triggered by the client, Gateway sends all the messages buffered for the client in that duration.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]durationPeriodic interval for sending Ping Request for sleeping client.in seconds.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
a client cannot send any packet to the Gateway while in "asleep" state.

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf, message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
result = m2mn_mqttsn_enter_sleep( p_mqttsn , 300 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mn_mqttsn_enter_sleep succeeded");
}
}

◆ m2mb_mqttsn_get_client_status()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_get_client_status ( M2MB_MQTTSN_HANDLE  handle,
M2MB_MQTTSN_STATUS_E status 
)

m2mb_mqttsn_get_client_status gets MQTTSN client current status

This function allows to retrieve current status of the specified client.

Parameters
[in]handlehandle of the mqttsn client
[out]statuspointer to the variable that will be filled with current client status (refer to M2MB_MQTTSN_STATUS_E enum)
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
default :
printf("default case");
break;
}
}
void main(void)
{
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
m2mb_mqttsn_getClientStatus( p_mqttsn, &status );
{
printf("Client is initialized but not connected");
}
//... Use MQTTSN APIs ....
}

◆ m2mb_mqttsn_init()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_init ( M2MB_MQTTSN_HANDLE pHandle,
m2mb_mqttsn_ind_callback  callback,
void *  userdata 
)

m2mb_mqttsn_init is called to initialize MQTT-SN context.

m2mb_mqttsn_init initializes MQTT-SN client context returning the handle that must be passed as first parameter for all MQTT-SN actions. Calling the m2mb_mqttsn_init is mandatory before using the MQTT-SN client service. It should be called once for each MQTT-SN client.

Parameters
[out]pHandlepointer to MQTT-SN context handle that is initialized by the function. This has to be used in subsequent MQTT-SN APIs.
[in]callbackcallback that will be called if client receives an event. (ex: server disconnect the client and disconnect event is triggered)
[in]userdataa pointer to generic user data that will be returned as it is in the callback.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
default :
printf("default case");
break;
}
}
void main(void)
{
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//... Use MQTT-SN APIs ....
}

◆ m2mb_mqttsn_ping()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_ping ( M2MB_MQTTSN_HANDLE  handle)

m2mb_mqttsn_ping is called to ping

m2mb_mqttsn_ping is called to ping the remote MQTTSN Gateway

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf, message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
result = m2mb_mqttsn_ping( p_mqttsn );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_ping succeeded");
}
//... Use MQTTSN APIs ....
}

◆ m2mb_mqttsn_publish()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_publish ( M2MB_MQTTSN_HANDLE  handle,
M2MB_MQTTSN_PUBLISH_T  publish,
UINT8 *  return_code 
)

m2mb_mqttsn_publish is called to send Publish packet to the Gateway.

m2mb_mqttsn_publish sends the MQTT-SN Publish packet and waits for the Publish response (if QoS > 0). If QoS level is 1 then will wait for Publish Acknowledgment message. If QoS level = 2 then it will wait for Publish receive then send Publish release and wait for Publish complete.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]publishStructure specifying data to be filled in Publish packet
[out]return_codeReturn code received in Acknowledgement message. See @M2MB_MQTTSN_CODE_E.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Client should be in "active" state i.e. M2MB_MQTTSN_CLIENT_CONNECTED state to perform this operation. To send QoS -1 publish packet, client should be in M2MB_MQTTSN_SOCKET_CONNECTED state. , Example
void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf,
message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
UINT16 topic_id = 0;
M2MB_MQTTSN_PUBLISH_T publish = {0};
char data_buffer[] = "test_data_buffer";
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
result = m2mb_mqttsn_register( p_mqttsn, "test_register_topic", &topic_id, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_register succeeded, topic id = %d", topic_id);
}
publish.retain = 1;
publish.data = data_buffer;
publish.data_len = strlen(publish.data);
publish.topic = topic_id;
result = m2mb_mqttsn_publish( p_mqttsn, publish, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_publish succeeded");
}
publish. = 1;
result = m2mb_mqttsn_publish( p_mqttsn, publish, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_publish succeeded");
}
publish.short_topic = "ab";
result = m2mb_mqttsn_publish( p_mqttsn, publish, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_publish succeeded");
}
//... Use MQTT-SN APIs ....

◆ m2mb_mqttsn_register()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_register ( M2MB_MQTTSN_HANDLE  handle,
const CHAR *  topic,
UINT16 *  topic_id,
UINT8 *  return_code 
)

m2mb_mqttsn_register is called to send Register packet to the Gateway.

m2mb_mqttsn_register sends the MQTT-SN Register packet and waits for the Register Acknowledge packet. The Register packet is sent by a client to a GW for requesting a topic id value for the specified topic name.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]topicTopic Name for which topic id is required.
[out]topic_idTopic id recieved in Register Acknowledgement packet will be filled in pointer provided by the user.
[out]return_codeReturn code received in Acknowledgement message. See @M2MB_MQTTSN_CODE_E.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Client should be in "active" state to perform this operation. Example
void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE Handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
printf("Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
printf("MQTT-SN Message: Topic %s, Len %d\r\n", buf, msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
printf("Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
printf("More data to be received");
}
break;
default :
printf("default case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
UINT16 topic_id = 0;
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
result = m2mb_mqttsn_register( p_mqttsn, "test_register_topic", &topic_id, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_register succeeded, topic id = %d", topic_id);
}
//... Use MQTT-SN APIs ....

◆ m2mb_mqttsn_socket()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_socket ( M2MB_MQTTSN_HANDLE  handle,
const CHAR *  host,
UINT32  port 
)

m2mb_mqttsn_socket is called to initialize the socket

m2mb_mqttsn_socket performs DNS query for the URL specified in host.and performs socket initializations.

Parameters
[in]handlehandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]hostURL of the remote MQTTSN Gateway that MQTTSN client needs to connect.(Ex: "api-dev.devicewise.com")
[in]portPort number of the remote MQTTSN Gateway that MQTTSN client needs to connect.(Ex: 1883)
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata );
{
(void)handle;
switch(event)
{
printf("Disconnect Callback: event = %d", event);
break;
default :
printf("default case");
break;
}
}
void main(void)
{
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
//... Use MQTTSN APIs ....

◆ m2mb_mqttsn_subscribe()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_subscribe ( M2MB_MQTTSN_HANDLE  handle,
M2MB_MQTTSN_SUBSCRIBE_T  subscribe,
UINT16 *  topic_id,
UINT8 *  return_code 
)

m2mb_mqttsn_subscribe is called to send Subscribe to the specified topic/topic name.

m2mb_mqttsn_subscribe sends the MQTT-SN Subscribe packet and Subscribe packet and waits for the Subscribe Acknowledgment packet containing the assigned topic ID.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]subscribeStructure specifying data to be filled in subscribe packet
[out]topic_idIf subscribing to a normal topic, this pointer fetches the topic id obtained for the same.
[out]return_codeReturn code received in Acknowledgement message. See @M2MB_MQTTSN_CODE_E.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Client should be in "active" state to perform this operation.

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf, message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
UINT16 topic_id = 0;
M2MB_MQTTSN_SUBSCRIBE_T subscribe = {0};
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
subscribe.qos = M2MB_MQTTSN_QOS_1;
subscribe.topic = "subscribe_test_topic";
result = m2mb_mqttsn_subscribe( p_mqttsn, subscribe, &topic_id, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_subscribe succeeded, topic id = %d", topic_id );
}
subscribe.qos = M2MB_MQTTSN_QOS_0;
subscribe.topic = NULL;
subscribe.topic = "ab";
result = m2mb_mqttsn_subscribe( p_mqttsn, subscribe, NULL, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_subscribe succeeded" );
}
subscribe.qos = M2MB_MQTTSN_QOS_1;
subscribe.topic = 2;
result = m2mb_mqttsn_subscribe( p_mqttsn, subscribe, NULL, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_subscribe succeeded" );
}
//... Use MQTT-SN APIs ....

◆ m2mb_mqttsn_unsubscribe()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_unsubscribe ( M2MB_MQTTSN_HANDLE  handle,
M2MB_MQTTSN_TOPIC_ID_E  topic_type,
const CHAR *  topic,
UINT16  topic_id 
)

m2mb_mqttsn_unsubscribe is called to send Unsubscribe to the specified topic/topic name.

m2mb_mqttsn_unsubscribe sends the MQTT-SN Unsubscribe packet and waits for the Unsubscribe Acknowledgment packet.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]topic_typeTopic type of the topic to be unsubscribed.
[in]topicIf unsubscribing to a normal topic name(longer than 2 octets), topic name is to be provided.
[in]topic_idIf unsubscribing to short topic./pre-defined topic id, this is to be filled
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Client should be in "active" state to perform this operation.

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf, message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
UINT16 topic_id = 0;
M2MB_MQTTSN_SUBSCRIBE_T subscribe = {0};
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
subscribe.qos = M2MB_MQTTSN_QOS_1;
subscribe.topic = "subscribe_test_topic";
result = m2mb_mqttsn_subscribe( p_mqttsn, subscribe, &topic_id, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_subscribe succeeded, topic id = %d", topic_id );
}
subscribe.qos = M2MB_MQTTSN_QOS_0;
subscribe.topic_id = NULL;
subscribe.topic = "ab";
result = m2mb_mqttsn_subscribe( p_mqttsn, subscribe, NULL, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_subscribe succeeded" );
}
subscribe.qos = M2MB_MQTTSN_QOS_1;
subscribe.topic_id = 2;
result = m2mb_mqttsn_subscribe( p_mqttsn, subscribe, NULL, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_subscribe succeeded" );
}
//... Use MQTT-SN APIs ....
result = m2mb_mqttsn_unsubscribe( p_mqttsn, M2MB_MQTTSN_TOPIC_ID_NORMAL, "subscribe_test_topic", NULL );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_unsubscribe succeeded" );
}
result = m2mb_mqttsn_unsubscribe( p_mqttsn, M2MB_MQTTSN_TOPIC_ID_SHORT, "ab", 0 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_unsubscribe succeeded" );
}
result = m2mb_mqttsn_unsubscribe( p_mqttsn, M2MB_MQTTSN_TOPIC_ID_PREDEF, NULL, 2 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_unsubscribe succeeded" );
}
//... Use MQTT-SN APIs ....

◆ m2mb_mqttsn_will_message_update()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_will_message_update ( M2MB_MQTTSN_HANDLE  handle,
CHAR *  will_msg,
UINT16  will_msg_len,
UINT8 *  return_code 
)

m2mb_mqttsn_will_message_update is called to send Will Message Update packet to the Gateway.

m2mb_mqttsn_will_message_update sends the MQTT-SN Will Message Update packet.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]will_msgWill Message to be updated
[in]will_msg_lenLength of updated message
[out]return_codeReturn code received in Acknowledgement message. See @M2MB_MQTTSN_CODE_E.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Client should be in "active" state i.e. M2MB_MQTTSN_CLIENT_CONNECTED state to perform this operation.

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf, message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
M2MB_MQTTSN_WILL_T client_will = {0};
CHAR will_topic[] = "last_will_topic";
CHAR will_msg[] = "client disconnected";
CHAR willMsgUpdated[] = "client disconnected abruptly";
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
//Set Last Will
client_will.will=1;
client_will.qos = 1;
client_will.retain=1;
client_will.will_topic = will_topic;
client_will.will_msg = will_msg;
client_willwillMsgLen = strlen( will_msg );
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_LAST_WILL, client_will );
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
//Update Last Will Message
result = m2mb_mqttsn_will_message_update( p_mqttsn, willMsgUpdated, strlen( willMsgUpdated ),
&return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_will_message_update succeeded");
}
//... Use MQTT-SN APIs ....
}

◆ m2mb_mqttsn_will_topic_update()

M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_will_topic_update ( M2MB_MQTTSN_HANDLE  handle,
M2MB_MQTTSN_WILL_T will,
UINT8 *  return_code 
)

m2mb_mqttsn_will_topic_update is called to send Topic Update packet to the Gateway.

m2mb_mqttsn_will_topic_update sends the MQTT-SN Will Topic Update packet. Setting will to zero in M2MB_MQTTSN_WILL_T structure indicates that the client wishes to delete the Will topic and the Will message stored in the server.

Parameters
[in]handleHandle to the MQTTSN client service, previously initialized by the m2mb_mqttsn_init function.
[in]willStructure to be passed by the user specifying will topic, qos, retain to be updated
[out]return_codeReturn code received in Acknowledgement message. See @M2MB_MQTTSN_CODE_E.
Returns
M2MB_MQTTSN_RESPONSE_E values.
Note
Client should be in "active" state i.e. M2MB_MQTTSN_CLIENT_CONNECTED state to perform this operation.

Example

void m2mb_mqttsn_ind_cb( M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_IND_E event, UINT16 resp_size,
void *resp, void *userdata )
{
UINT8 buf[1024];
(void)handle;
switch(event)
{
VAL_PRINT("\r\nDisconnect Callback: event = %d", event);
break;
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"Message Receive Callback: event = %d", event);
message_ctx = ( M2MB_MQTTSN_MESSAGE_CTX_T * )resp;
memcpy(buf, message_ctx->topic, message_ctx->topic_length);
buf[message_ctx->topic_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"MQTT-SN Message: Topic %s, Len %d\r\n", buf, message_ctx->msg_length);
memcpy(buf, message_ctx->msg, message_ctx->msg_length);
buf[message_ctx->msg_length] = '\0'; // Make sure its null terminated
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG, "Message: %s", buf);
if(message_ctx->status == M2MB_MQTTSN_RX_MORE_DATA)
{
m2mb_trace_file_line_printf( __MODULE__, __LINE__, M2MB_TC_GENERIC, M2MB_TL_LOG,
"More data to be received");
}
break;
default :
VAL_PRINT("\r\ndefault case");
break;
}
}
void main(void)
{
INT8 return_code = 0;
M2MB_MQTTSN_WILL_T client_will = {0};
CHAR will_topic[] = "last_will_topic";
CHAR will_msg[] = "client disconnected";
CHAR willTopicUpdated[] = "new_last_will_topic";
result = m2mb_mqttsn_init( &p_mqttsn, m2mb_mqttsn_ind_cb, NULL );
if(result != M2MB_MQTTSN_SUCCESS)
{
return;
}
else
{
printf("m2mb_mqttsn_init succeeded");
}
//Set Client ID
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_CLIENT_ID, "MQTTSN_demo" ) );
//Set Timeout in milliseconds
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_TIMEOUT_MS, 10*1000 ) );
//Set Keepalive in seconds
//Set Last Will
client_will.will=1;
client_will.qos = 1;
client_will.retain=1;
client_will.will_topic = will_topic;
client_will.will_msg = will_msg;
client_willwillMsgLen = strlen( will_msg );
m2mb_mqttsn_conf( p_mqttsn, CMDS( M2MB_MQTTSN_SET_LAST_WILL, client_will );
result = m2mb_mqttsn_socket( p_mqttsn, "185.86.42.211", 11000 );
if( result == M2MB_MQTTSN_SUCCESS )
{
printf( "m2mb_mqttsn_socket succeeded");
}
result = m2mb_mqttsn_connect( p_mqttsn, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS ) && ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_connect succeeded");
}
//Update Last Will
client_will.will=1;
client_will.qos = 2;
client_will.retain=0;
client_will.will_topic = willTopicUpdated;
result = m2mb_mqttsn_will_topic_update( p_mqttsn, &client_will, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_will_topic_update succeeded");
}
//Delete Last Will
client_will.will=0;
result = m2mb_mqttsn_will_topic_update( p_mqttsn, NULL, &return_code );
if( ( result == M2MB_MQTTSN_SUCCESS )&& ( return_code == (INT8)M2MB_MQTTSN_CODE_ACCEPTED ) )
{
printf( "m2mb_mqttsn_will_topic_update succeeded, will deleted");
}
//... Use MQTT-SN APIs ....
}
M2MB_MQTTSN_CODE_ACCEPTED
Definition: m2mb_mqttsn.h:245
m2mb_mqttsn_disconnect
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_disconnect(M2MB_MQTTSN_HANDLE handle)
m2mb_mqttsn_disconnect is called to disconnect from the MQTTSN Gateway.
M2MB_MQTTSN_QOS_0
Definition: m2mb_mqttsn.h:212
M2MB_MQTTSN_PUBLISH::topic_type
M2MB_MQTTSN_TOPIC_ID_E topic_type
Definition: m2mb_mqttsn.h:273
M2MB_MQTTSN_PUBLISH::topic
UINT16 topic
Definition: m2mb_mqttsn.h:274
m2mb_mqttsn_unsubscribe
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_unsubscribe(M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_TOPIC_ID_E topic_type, const CHAR *topic, UINT16 topic_id)
m2mb_mqttsn_unsubscribe is called to send Unsubscribe to the specified topic/topic name.
m2mb_mqttsn_init
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_init(M2MB_MQTTSN_HANDLE *pHandle, m2mb_mqttsn_ind_callback callback, void *userdata)
m2mb_mqttsn_init is called to initialize MQTT-SN context.
M2MB_MQTTSN_IND_E
M2MB_MQTTSN_IND_E
MQTT-SN Indications enum.
Definition: m2mb_mqttsn.h:60
M2MB_MQTTSN_PUBLISH::retain
UINT8 retain
Definition: m2mb_mqttsn.h:272
M2MB_MQTTSN_SET_CLIENT_ID
Definition: m2mb_mqttsn.h:125
M2MB_MQTTSN_STATUS_E
M2MB_MQTTSN_STATUS_E
mqtt-sn client status enum
Definition: m2mb_mqttsn.h:98
M2MB_MQTTSN_WILL::will_msg
CHAR * will_msg
Definition: m2mb_mqttsn.h:262
M2MB_MQTTSN_WILL::retain
UINT8 retain
Definition: m2mb_mqttsn.h:260
M2MB_MQTTSN_SUBSCRIBE::topic_id
UINT16 topic_id
Definition: m2mb_mqttsn.h:290
M2MB_MQTTSN_MESSAGE_CTX::msg
const CHAR * msg
Definition: m2mb_mqttsn.h:301
m2mb_mqttsn_conf
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_conf(M2MB_MQTTSN_HANDLE handle, UINT8 nCmds,...)
m2mb_mqttsn_conf sets/gets some MQTTSN parameters and configurations.
m2mb_mqttsn_deinit
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_deinit(M2MB_MQTTSN_HANDLE handle)
m2mb_mqttsn_deinit deinitializes MQTT-SN service for specified MQTT-SN client.
M2MB_MQTTSN_MESSAGE_CTX::topic_length
UINT16 topic_length
Definition: m2mb_mqttsn.h:300
M2MB_MQTTSN_PUBLISH::data_len
UINT32 data_len
Definition: m2mb_mqttsn.h:277
M2MB_MQTTSN_WILL::will
UINT8 will
Definition: m2mb_mqttsn.h:258
M2MB_MQTTSN_MESSAGE_CTX::status
M2MB_MQTTSN_RX_STATUS_E status
Definition: m2mb_mqttsn.h:303
M2MB_MQTTSN_INDICATION_MESSAGE_RCV
Definition: m2mb_mqttsn.h:65
m2mb_mqttsn_clean_socket
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_clean_socket(M2MB_MQTTSN_HANDLE handle)
m2mb_mqttsn_clean_socket is called to perform socket related cleanup
M2MB_MQTTSN_HANDLE
HANDLE M2MB_MQTTSN_HANDLE
MQTT-SN context handle. This is obtained from m2mb_mqttsn_init API and then used in subsequent MQTT-S...
Definition: m2mb_mqttsn.h:55
M2MB_MQTTSN_MESSAGE_CTX::topic
const CHAR * topic
Definition: m2mb_mqttsn.h:299
m2mb_mqttsn_awake
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_awake(M2MB_MQTTSN_HANDLE handle)
m2mb_mqttsn_awake is called to enter "awake" state
m2mb_mqttsn_subscribe
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_subscribe(M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_SUBSCRIBE_T subscribe, UINT16 *topic_id, UINT8 *return_code)
m2mb_mqttsn_subscribe is called to send Subscribe to the specified topic/topic name.
m2mb_mqttsn_publish
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_publish(M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_PUBLISH_T publish, UINT8 *return_code)
m2mb_mqttsn_publish is called to send Publish packet to the Gateway.
M2MB_MQTTSN_RX_MORE_DATA
Definition: m2mb_mqttsn.h:236
m2mb_mqttsn_socket
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_socket(M2MB_MQTTSN_HANDLE handle, const CHAR *host, UINT32 port)
m2mb_mqttsn_socket is called to initialize the socket
m2mb_mqttsn_connect
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_connect(M2MB_MQTTSN_HANDLE handle, UINT8 *return_code)
m2mb_mqttsn_connect is called to connect to the specified MQTTSN Gateway.
M2MB_MQTTSN_TOPIC_ID_NORMAL
Definition: m2mb_mqttsn.h:224
M2MB_MQTTSN_WILL::will_topic
const CHAR * will_topic
Definition: m2mb_mqttsn.h:261
m2mb_mqttsn_register
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_register(M2MB_MQTTSN_HANDLE handle, const CHAR *topic, UINT16 *topic_id, UINT8 *return_code)
m2mb_mqttsn_register is called to send Register packet to the Gateway.
M2MB_MQTTSN_PUBLISH
MQTT-SN Publish structure. This is used to Publish data to the Gateway.
Definition: m2mb_mqttsn.h:269
M2MB_MQTTSN_PUBLISH::data
const CHAR * data
Definition: m2mb_mqttsn.h:276
M2MB_MQTTSN_SET_KEEPALIVE_SEC
Definition: m2mb_mqttsn.h:136
m2mb_mqttsn_enter_sleep
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_enter_sleep(M2MB_MQTTSN_HANDLE handle, UINT16 duration)
m2mn_mqttsn_enter_sleep is called to enable sleeping client functionality
M2MB_MQTTSN_INDICATION_DISCONNECT
Definition: m2mb_mqttsn.h:62
M2MB_MQTTSN_WILL
MQTT-SN will structure. Used while setting will and will topic update.
Definition: m2mb_mqttsn.h:256
M2MB_MQTTSN_MESSAGE_CTX
MQTT-SN Subscribe structure. This is used while subscribing to a topic/topic Id.
Definition: m2mb_mqttsn.h:296
M2MB_MQTTSN_SUBSCRIBE
MQTT-SN Subscribe structure. This is used while subscribing to a topic/topic Id.
Definition: m2mb_mqttsn.h:283
M2MB_MQTTSN_PUBLISH::qos
M2MB_MQTTSN_QOS_E qos
Definition: m2mb_mqttsn.h:271
M2MB_MQTTSN_NOT_CONNECTED
Definition: m2mb_mqttsn.h:101
M2MB_MQTTSN_QOS_1
Definition: m2mb_mqttsn.h:213
M2MB_MQTTSN_MESSAGE_CTX::msg_length
UINT32 msg_length
Definition: m2mb_mqttsn.h:302
M2MB_MQTTSN_WILL::qos
M2MB_MQTTSN_QOS_E qos
Definition: m2mb_mqttsn.h:259
m2mb_mqttsn_ping
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_ping(M2MB_MQTTSN_HANDLE handle)
m2mb_mqttsn_ping is called to ping
M2MB_MQTTSN_PUBLISH::short_topic
const CHAR * short_topic
Definition: m2mb_mqttsn.h:275
M2MB_MQTTSN_TOPIC_ID_SHORT
Definition: m2mb_mqttsn.h:226
M2MB_MQTTSN_SET_LAST_WILL
Definition: m2mb_mqttsn.h:146
m2mb_mqttsn_will_topic_update
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_will_topic_update(M2MB_MQTTSN_HANDLE handle, M2MB_MQTTSN_WILL_T *will, UINT8 *return_code)
m2mb_mqttsn_will_topic_update is called to send Topic Update packet to the Gateway.
M2MB_MQTTSN_TOPIC_ID_PREDEF
Definition: m2mb_mqttsn.h:225
M2MB_MQTTSN_SUBSCRIBE::topic
const CHAR * topic
Definition: m2mb_mqttsn.h:288
M2MB_MQTTSN_SET_TIMEOUT_MS
Definition: m2mb_mqttsn.h:129
M2MB_MQTTSN_SUBSCRIBE::topic_type
M2MB_MQTTSN_TOPIC_ID_E topic_type
Definition: m2mb_mqttsn.h:287
M2MB_MQTTSN_SUCCESS
Definition: m2mb_mqttsn.h:75
m2mb_mqttsn_will_message_update
M2MB_MQTTSN_RESPONSE_E m2mb_mqttsn_will_message_update(M2MB_MQTTSN_HANDLE handle, CHAR *will_msg, UINT16 will_msg_len, UINT8 *return_code)
m2mb_mqttsn_will_message_update is called to send Will Message Update packet to the Gateway.
m2mb_trace_file_line_printf
M2MB_RESULT_E m2mb_trace_file_line_printf(const char *file, int line, M2MB_TRACE_CLASS _class, M2MB_TRACE_LEVEL level, char *fmt,...)
Base trace printf with file and line info.
M2MB_MQTTSN_RESPONSE_E
M2MB_MQTTSN_RESPONSE_E
MQTT-SN APIs response enum.
Definition: m2mb_mqttsn.h:73
M2MB_MQTTSN_SUBSCRIBE::qos
M2MB_MQTTSN_QOS_E qos
Definition: m2mb_mqttsn.h:285