Using MQTT on Dragonfly

Dependencies:   MQTT mbed mtsas

Committer:
miaotwilio
Date:
Thu Sep 14 08:14:18 2017 +0000
Revision:
8:f8a346582627
Parent:
2:d4dcf1ebaa99
more LEDs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miaotwilio 2:d4dcf1ebaa99 1 #ifndef TLS_MQTT_CLIENT_HPTT
miaotwilio 2:d4dcf1ebaa99 2 #define TLS_MQTT_CLIENT_HPTT
miaotwilio 2:d4dcf1ebaa99 3
miaotwilio 0:b32fa0c757d7 4 #include <ssl.h>
miaotwilio 0:b32fa0c757d7 5 #include <mbed.h>
miaotwilio 0:b32fa0c757d7 6 #include <mtsas.h>
miaotwilio 0:b32fa0c757d7 7 #include <TCPSocketConnection.h>
miaotwilio 0:b32fa0c757d7 8 #include <MQTTClient.h>
miaotwilio 0:b32fa0c757d7 9 #include <MQTTmbed.h>
miaotwilio 0:b32fa0c757d7 10
miaotwilio 0:b32fa0c757d7 11 class TlsMQTTClient {
miaotwilio 0:b32fa0c757d7 12 public:
miaotwilio 0:b32fa0c757d7 13 TlsMQTTClient();
miaotwilio 0:b32fa0c757d7 14 ~TlsMQTTClient();
miaotwilio 0:b32fa0c757d7 15
miaotwilio 0:b32fa0c757d7 16 private:
miaotwilio 1:5a896191c3c4 17 typedef MQTT::Client<TlsMQTTClient, Countdown, 1000 /* MAX_MQTT_PACKET_SIZE */> MQTTClient;
miaotwilio 0:b32fa0c757d7 18
miaotwilio 0:b32fa0c757d7 19 // MQTT Operations
miaotwilio 0:b32fa0c757d7 20 public:
miaotwilio 0:b32fa0c757d7 21 /** MQTT Connect - send an MQTT connect packet down the network and wait for a Connack
miaotwilio 0:b32fa0c757d7 22 * The nework object must be connected to the network endpoint before calling this
miaotwilio 0:b32fa0c757d7 23 * @param host - host of the mqtt server
miaotwilio 0:b32fa0c757d7 24 * @param port - port of the mqtt server
miaotwilio 0:b32fa0c757d7 25 * @param certificates - CA certs to be verified, can be NULL to bypass CA checking(not recommended)
miaotwilio 0:b32fa0c757d7 26 * @param options - connect options
miaotwilio 0:b32fa0c757d7 27 * @return success code -
miaotwilio 0:b32fa0c757d7 28 */
miaotwilio 0:b32fa0c757d7 29 int connect(const char* host, const int port,
miaotwilio 0:b32fa0c757d7 30 const char* certificates,
miaotwilio 0:b32fa0c757d7 31 MQTTPacket_connectData& options);
miaotwilio 0:b32fa0c757d7 32
miaotwilio 0:b32fa0c757d7 33 /** MQTT Publish - send an MQTT publish packet and wait for all acks to complete for all QoSs
miaotwilio 0:b32fa0c757d7 34 * @param topic - the topic to publish to
miaotwilio 0:b32fa0c757d7 35 * @param message - the message to send
miaotwilio 0:b32fa0c757d7 36 * @return success code -
miaotwilio 0:b32fa0c757d7 37 */
miaotwilio 0:b32fa0c757d7 38 int publish(const char* topicName, MQTT::Message& message);
miaotwilio 0:b32fa0c757d7 39
miaotwilio 0:b32fa0c757d7 40 /** MQTT Publish - send an MQTT publish packet and wait for all acks to complete for all QoSs
miaotwilio 0:b32fa0c757d7 41 * @param topic - the topic to publish to
miaotwilio 0:b32fa0c757d7 42 * @param payload - the data to send
miaotwilio 0:b32fa0c757d7 43 * @param payloadlen - the length of the data
miaotwilio 0:b32fa0c757d7 44 * @param qos - the QoS to send the publish at
miaotwilio 0:b32fa0c757d7 45 * @param retained - whether the message should be retained
miaotwilio 0:b32fa0c757d7 46 * @return success code -
miaotwilio 0:b32fa0c757d7 47 */
miaotwilio 0:b32fa0c757d7 48 int publish(const char* topicName, void* payload, size_t payloadlen, enum MQTT::QoS qos = MQTT::QOS0, bool retained = false);
miaotwilio 0:b32fa0c757d7 49
miaotwilio 0:b32fa0c757d7 50 /** MQTT Publish - send an MQTT publish packet and wait for all acks to complete for all QoSs
miaotwilio 0:b32fa0c757d7 51 * @param topic - the topic to publish to
miaotwilio 0:b32fa0c757d7 52 * @param payload - the data to send
miaotwilio 0:b32fa0c757d7 53 * @param payloadlen - the length of the data
miaotwilio 0:b32fa0c757d7 54 * @param id - the packet id used - returned
miaotwilio 0:b32fa0c757d7 55 * @param qos - the QoS to send the publish at
miaotwilio 0:b32fa0c757d7 56 * @param retained - whether the message should be retained
miaotwilio 0:b32fa0c757d7 57 * @return success code -
miaotwilio 0:b32fa0c757d7 58 */
miaotwilio 0:b32fa0c757d7 59 int publish(const char* topicName, void* payload, size_t payloadlen, unsigned short& id, enum MQTT::QoS qos = MQTT::QOS1, bool retained = false);
miaotwilio 0:b32fa0c757d7 60
miaotwilio 0:b32fa0c757d7 61 typedef void (*MessageHandler)(MQTT::MessageData&);
miaotwilio 0:b32fa0c757d7 62
miaotwilio 0:b32fa0c757d7 63 /** MQTT Subscribe - send an MQTT subscribe packet and wait for the suback
miaotwilio 0:b32fa0c757d7 64 * @param topicFilter - a topic pattern which can include wildcards
miaotwilio 0:b32fa0c757d7 65 * @param qos - the MQTT QoS to subscribe at
miaotwilio 0:b32fa0c757d7 66 * @param mh - the callback function to be invoked when a message is received for this subscription
miaotwilio 0:b32fa0c757d7 67 * @return success code -
miaotwilio 0:b32fa0c757d7 68 */
miaotwilio 0:b32fa0c757d7 69 int subscribe(const char* topicFilter, enum MQTT::QoS qos, MessageHandler mh);
miaotwilio 0:b32fa0c757d7 70
miaotwilio 0:b32fa0c757d7 71 /** MQTT Unsubscribe - send an MQTT unsubscribe packet and wait for the unsuback
miaotwilio 0:b32fa0c757d7 72 * @param topicFilter - a topic pattern which can include wildcards
miaotwilio 0:b32fa0c757d7 73 * @return success code -
miaotwilio 0:b32fa0c757d7 74 */
miaotwilio 0:b32fa0c757d7 75 int unsubscribe(const char* topicFilter);
miaotwilio 0:b32fa0c757d7 76
miaotwilio 0:b32fa0c757d7 77 /** MQTT Disconnect - send an MQTT disconnect packet, and clean up any state
miaotwilio 0:b32fa0c757d7 78 * @return success code -
miaotwilio 0:b32fa0c757d7 79 */
miaotwilio 0:b32fa0c757d7 80 int disconnect();
miaotwilio 0:b32fa0c757d7 81
miaotwilio 0:b32fa0c757d7 82 /** A call to this API must be made within the keepAlive interval to keep the MQTT connection alive
miaotwilio 0:b32fa0c757d7 83 * yield can be called if no other MQTT operation is needed. This will also allow messages to be
miaotwilio 0:b32fa0c757d7 84 * received.
miaotwilio 0:b32fa0c757d7 85 * @param timeout_ms the time to wait, in milliseconds
miaotwilio 0:b32fa0c757d7 86 * @return success code - on failure, this means the client has disconnected
miaotwilio 0:b32fa0c757d7 87 */
miaotwilio 0:b32fa0c757d7 88 int yield(unsigned long timeout_ms = 1000L);
miaotwilio 0:b32fa0c757d7 89
miaotwilio 0:b32fa0c757d7 90 /** Is the client connected?
miaotwilio 0:b32fa0c757d7 91 * @return flag - is the client connected or not?
miaotwilio 0:b32fa0c757d7 92 */
miaotwilio 0:b32fa0c757d7 93 bool isConnected();
miaotwilio 0:b32fa0c757d7 94
miaotwilio 0:b32fa0c757d7 95 // Network interface for MQTT::Client
miaotwilio 0:b32fa0c757d7 96 public:
miaotwilio 0:b32fa0c757d7 97 int read(unsigned char* data, int max, int timeout = -1);
miaotwilio 0:b32fa0c757d7 98 int write(const unsigned char* data, int length, int timeout = -1);
miaotwilio 0:b32fa0c757d7 99
miaotwilio 0:b32fa0c757d7 100 private:
miaotwilio 0:b32fa0c757d7 101 void cleanupTransport();
miaotwilio 0:b32fa0c757d7 102 static int ioRecv(CYASSL* ssl, char *buf, int sz, void *ctx);
miaotwilio 0:b32fa0c757d7 103 static int ioSend(CYASSL* ssl, char *buf, int sz, void *ctx);
miaotwilio 0:b32fa0c757d7 104
miaotwilio 0:b32fa0c757d7 105 private:
miaotwilio 0:b32fa0c757d7 106 TCPSocketConnection* tcp;
miaotwilio 0:b32fa0c757d7 107 CYASSL_CTX* ctx;
miaotwilio 0:b32fa0c757d7 108 CYASSL *ssl;
miaotwilio 1:5a896191c3c4 109 MQTTClient* mqttClient;
miaotwilio 0:b32fa0c757d7 110 };
miaotwilio 2:d4dcf1ebaa99 111
miaotwilio 2:d4dcf1ebaa99 112 #endif