An API for using MQTT over multiple transports

Dependencies:   FP MQTTPacket

Dependents:   Cellular_HelloMQTT IoTStarterKit GSwifiInterface_HelloMQTT IBMIoTClientEthernetExample ... more

This library is part of the EclipseTM Paho project; specifically the embedded client.

The goals of this API are:

  1. to be independent of any system library: hence templates parameters for networking, timer and threading classes
  2. not to rely on heap storage, only automatic (I think this is a good thing)
  3. to limit memory use, for instance by defining the size of the buffers and arrays used at object creation time

Files at this revision

API Documentation at this revision

Comitter:
icraggs
Date:
Sun May 11 18:51:08 2014 +0000
Parent:
27:8e27b74cfdc9
Parent:
25:d13a6c558164
Child:
30:a4e3a97dabe3
Commit message:
Merge branches

Changed in this revision

MQTTClient.h Show annotated file Show diff for this revision Revisions of this file
MQTTPacket.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IPStack/EthernetInterfaceIPStack.h	Sun May 11 18:51:08 2014 +0000
@@ -0,0 +1,90 @@
+
+#ifndef ETHERNETINTERFACEIPSTACK_H
+#define ETHERNETINTERFACEIPSTACK_H
+
+#include "EthernetInterface.h"
+
+class IPStack 
+{
+public:    
+    IPStack()
+    {
+        eth.init();                          // Use DHCP
+        eth.connect();
+        mysock.set_blocking(false, 1000);    // 1 second Timeout 
+    }
+    
+    int connect(char* hostname, int port)
+    {
+        return mysock.connect(hostname, port);
+    }
+
+    int read(char* buffer, int len, int timeout)
+    {
+        mysock.set_blocking(false, timeout);  
+        return mysock.receive(buffer, len);
+    }
+    
+    int write(char* buffer, int len, int timeout)
+    {
+        mysock.set_blocking(false, timeout);  
+        return mysock.send(buffer, len);
+    }
+    
+    int disconnect()
+    {
+        return mysock.close();
+    }
+    
+private:
+
+    EthernetInterface eth;
+    TCPSocketConnection mysock; 
+    
+};
+
+
+class Countdown
+{
+public:
+    Countdown()
+    {
+        t = Timer();   
+    }
+    
+    Countdown(int ms)
+    {
+        t = Timer();
+        countdown_ms(ms);   
+    }
+    
+    
+    bool expired()
+    {
+        return t.read_ms() >= interval_end_ms;
+    }
+    
+    void countdown_ms(int ms)  
+    {
+        t.stop();
+        interval_end_ms = ms;
+        t.reset();
+        t.start();
+    }
+    
+    void countdown(int seconds)
+    {
+        countdown_ms(seconds * 1000);
+    }
+    
+    int left_ms()
+    {
+        return interval_end_ms - t.read_ms();
+    }
+    
+private:
+    Timer t;
+    int interval_end_ms; 
+};
+
+#endif
--- a/MQTTClient.h	Sun May 11 18:28:46 2014 +0000
+++ b/MQTTClient.h	Sun May 11 18:51:08 2014 +0000
@@ -20,6 +20,8 @@
  
  ensure publish packets are retried on reconnect
  
+ updating usage of FP. Try to remove inclusion of FP.cpp in main. sg-
+ 
  */
 
 #if !defined(MQTTCLIENT_H)
@@ -171,16 +173,18 @@
     
     PacketId packetid;
     
-    typedef FP<void, Message*> messageHandlerFP;
+    // typedef FP<void, Message*> messageHandlerFP;
     struct MessageHandlers
     {
         const char* topicFilter;
-        messageHandlerFP fp;
+        //messageHandlerFP fp; typedefs not liked?
+        FP<void, Message*> fp;
     } messageHandlers[MAX_MESSAGE_HANDLERS];      // Message handlers are indexed by subscription topic
     
-    messageHandlerFP defaultMessageHandler;
-    
+    FP<void, Message*> defaultMessageHandler;
+     
     bool isconnected;
+
 };
 
 }
@@ -378,6 +382,7 @@
     
     int len = 0,
         rc = SUCCESS;
+
     switch (packet_type)
     {
         case CONNACK:
--- a/MQTTPacket.lib	Sun May 11 18:28:46 2014 +0000
+++ b/MQTTPacket.lib	Sun May 11 18:51:08 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/mqtt/code/MQTTPacket/#b97b9873af52
+http://mbed.org/teams/mqtt/code/MQTTPacket/#3893bc7343f4
\ No newline at end of file