![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
MQTT version for enno SDK
Dependencies: EthernetInterface MQTT mbed-rtos mbed serialzation_lib
Fork of HelloMQTT by
Diff: protocol/enno_api_mqtt_wrapper.c
- Revision:
- 20:3858e42b0cd3
- Child:
- 21:c5f6350a292d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/protocol/enno_api_mqtt_wrapper.c Wed Nov 25 07:07:31 2015 +0000 @@ -0,0 +1,177 @@ +#include "mbed.h" +#include "MQTTEthernet.h" +#include "MQTTPacket.h" +#include "MQTTClient.h" +#include "pb_decode.h" +#include "sitewhere.h" +#include "sitewhere.pb.h" +#include "enno_api.h" + + +//static iot_disconnect_handler clientDisconnectHandler; //warning defined but not used + +/** + * @brief Communication Protocol Type + * + * Defining an MQTT version Type + * + */ +typedef enum { + MQTT_3_1 = 3, // MQTT 3.1 (protocol_lib message byte = 3) + MQTT_3_1_1 = 4 // MQTT 3.1.1 (protocol_lib message byte = 4) +} MQTT_Ver_t; + +/** + * @brief Quality of Service Type + * + * Defining a QoS type. + * @note QoS 2 is \b NOT supported by the Enno IoT Service at the time of this SDK release. //?wzy + * + */ +typedef enum { + QOS_0, // QoS 0 = at most once delivery + QOS_1, // QoS 1 = at least once delivery + QOS_2 // QoS 2 is NOT supported +} QoSLevel; + +/** + * @brief Last Will and Testament Definition + * + * Defining a type for LWT parameters. + * @note Retained messages are \b NOT supported by the Enno IoT Service at the time of this SDK release. //? + * + */ +typedef struct { + const char *pTopicName; // LWT Topic + const char *pMessage; // Message to be delivered as LWT + bool isRetained; // NOT supported + QoSLevel qos; // QoS of LWT message +} MQTTWillOptions; + +/** + * @brief MQTT Message Parameters + * + * Defines a type for properties of MQTT messages including topic, payload an QoS. + * + */ +typedef struct { + QoSLevel qos; // Message Quality of Service + bool isRetained; // Retained messages are \b NOT supported by the Enno IoT Service at the time of this SDK release. + bool isDuplicate; // Is this message a duplicate QoS > 0 message? Handled automatically by the MQTT client. + uint16_t id; // Message sequence identifier. Handled automatically by the MQTT client. + void *pPayload; // Pointer to MQTT message payload (bytes). + uint32_t PayloadLen; // Length of MQTT payload. +} MQTTMessageParams; + +typedef void (*iot_disconnect_handler)(void); + +typedef struct { + char *pClientID; // Pointer to a string defining the MQTT client ID (this needs to be unique \b per \b device ) + char *pUserName; // Not used in the Enno IoT Service + char *pPassword; // Not used in the Enno IoT Service + MQTT_Ver_t MQTTVersion; // Desired MQTT version used during connection + uint16_t KeepAliveInterval_Sec; // MQTT keep alive interval in seconds. Defines inactivity time allowed before determining the connection has been lost. + bool isCleansession; // MQTT clean session. True = this session is to be treated as clean. Previous server state is cleared and no stated is retained from this connection. + bool isWillMsgPresent; // Is there a LWT associated with this connection? + MQTTWillOptions will; // MQTT LWT parameters. + uint32_t mqttCommandTimeout_ms; // Timeout for MQTT blocking calls. In milliseconds. + iot_disconnect_handler disconnectHandler; // Callback to be invoked upon connection loss. +} ConnectParams; + +const MQTTWillOptions MQTTwillOptionsDefault = { + .pTopicName = NULL, + .pMessage = NULL, + .isRetained = false, + .qos = QOS_0 +}; +MQTTMessageParams MQTTMessageParamsDefault = { + .qos = QOS_0, + .isRetained=false, + .isDuplicate = false, + .id = 0, + .pPayload = NULL, + .PayloadLen = 0 +}; +ConnectParams ConnectParamsDefault = { + .pClientID = "mbed-sample", + .pUserName = NULL, + .pPassword = NULL, + .MQTTVersion = MQTT_3_1, + .KeepAliveInterval_Sec = 10, + .isCleansession = true, + .isWillMsgPresent = false, + .will={.pTopicName = NULL, .pMessage = NULL, .isRetained = false, .qos = QOS_0}, + .mqttCommandTimeout_ms = 2000, + .disconnectHandler = NULL +}; + + + + + + +static Error_t parseConnectParamsForError(char *hostURL) { + Error_t rc = NONE_ERROR; + if (NULL == hostURL) { + rc = NULL_VALUE_ERROR; + printf("ERROR: hostURL can not be empty!\n"); + } + return rc; +} + +static bool isPowerCycle = true; + +Error_t enno_connect(char *hostURL, uint16_t port, char *appKey){ + Error_t rc = NONE_ERROR; + + if + return rc; +} + +Error_t enno_subscribe(char *topic, void *callback){ + Error_t rc = NONE_ERROR; + if (trans_subscribe()){ + rc = SUBSCRIBE_ERROR; + } + return rc; +} +*/ +Error_t enno_publish(char *path, EnnoMessages *messages_enno){ + Error_t rc = NONE_ERROR; + if (0 != trans_publish()){ + rc = PUBLISH_ERROR; + } + return rc; +} + +Error_t enno_unsubscribe(char *pTopic) { + Error_t rc = NONE_ERROR; + if (0 != trans_unsubscribe(pTopic)) { + rc = UNSUBSCRIBE_ERROR; + } + return rc; + +} + +Error_t enno_disconnect() { + Error_t rc = NONE_ERROR; + if (0! =trans_disconnect()){ + rc = DISCONNECT_ERROR; + } + return rc; +} + +Error_t enno_loop(int timeout) { + Error_t rc = NONE_ERROR; + if (0 != trans_loop(timeout)){ + rc = YIELD_ERROR; + } + return rc; +} + + + + + + +