MQTT version for enno SDK

Dependencies:   EthernetInterface MQTT mbed-rtos mbed serialzation_lib

Fork of HelloMQTT by MQTT

Revision:
21:c5f6350a292d
Parent:
20:3858e42b0cd3
--- a/protocol/CplusplusToC.cpp	Wed Nov 25 07:07:31 2015 +0000
+++ b/protocol/CplusplusToC.cpp	Wed Dec 02 01:54:31 2015 +0000
@@ -1,13 +1,23 @@
+/*
+ * CplusplusToC.c
+ *
+ *  Created on: 2015年11月20日
+ *      Author: v-chawei
+ */
+#include "MQTTEthernet.h"
 #include "MQTTClient.h"
-#include "stdio.h"
+#include "string.h"
+#include "enno_api.h"
 
 static MQTTEthernet ipstack = MQTTEthernet();
 static MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
+int symbol=0;
+int arrivedcount=0;
 
 extern "C"{
-    int trans_connect(char *hostURL, uint16_t port, char *appKey);    
-    int trans_subscribe();
-    int trans_publish();
+    int trans_connect(char *hostURL, uint16_t port, char *appKey);
+    int trans_subscribe(char *topic, char *topicType);
+    int trans_publish(char *path, char *payload, int payloadlen);
     int trans_unsubscribe(char *pTopic);
     int trans_disconnect();
     int trans_loop(int timeout);
@@ -15,35 +25,90 @@
 
  int trans_connect(char *hostURL, uint16_t port, char *appKey){
      int i = 0;
-     
-     return i;
-}   
-int trans_subscribe(){
-     int i = 0;
+     if( symbol==0 ){
+         ipstack.start();
+         symbol=1;
+     }
+     i = ipstack.connect(hostURL, port);
+     if (i == 0 ){
+         MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+         data.MQTTVersion = 3;
+         data.clientID.cstring = "mbed-sample";
+         data.username.cstring = NULL;
+         data.password.cstring = NULL;
+         if ((i = client.connect(data)) != 0)
+             printf("Error: connect failed %d\n", i);
+     }
      return i;
 }
-int trans_publish(){
+
+
+ void systemMessageHandler(MQTT::MessageData& md)
+ {
+    uint8_t buffer[512];
+     MQTT::Message &message = md.message;
+     printf("system message received.\n");
+     printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
+     printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
+     ++arrivedcount;
+     ennoSystemMessageHandler(md.topicName.cstring, (char*)message.payload, message.payloadlen);
+ //    extern "C"{
+ //    callbackRef(md.topicName.cstring, message.payload, message.payloadlen);
+ //    }
+ }
+ void commandMessageHandler(MQTT::MessageData& md)
+  {
+    uint8_t buffer[512];
+      MQTT::Message &message = md.message;
+      printf("command message received.\n");
+      printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
+      printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
+      ++arrivedcount;
+  }
+int trans_subscribe(char *topic, char *topicType){
      int i = 0;
+     if((strcmp(topicType,"system")) == 0){
+         if ((i = client.subscribe(topic, MQTT::QOS2, systemMessageHandler)) != 0){
+             printf("Error: subscribe failed %d\n", i);
+         }
+     }else{
+         if ((i = client.subscribe(topic, MQTT::QOS2, commandMessageHandler)) != 0){
+                     printf("Error: subscribe failed %d\n", i);
+          }
+     }
+     return i;
+}
+int trans_publish(char *path, char *payload, int payloadlen){
+     int i = 0;
+     MQTT::Message message;
+     message.qos = MQTT::QOS0;
+     message.retained = false;
+     message.dup = false;
+     message.payload = payload;
+     message.payloadlen = payloadlen;
+     if ((i = client.publish(path, message)) != 0){
+        printf("Error: publish failed %d\n", i);
+     }
      return i;
 }
 int trans_unsubscribe(char *pTopic){
     int i = 0;
     if ((i = client.unsubscribe(pTopic))!= 0){
-        printf("Error: unsubscribe fail %d\n", i);
+        printf("Error: unsubscribe failed %d\n", i);
     }
-    return i; 
+    return i;
 }
 int trans_disconnect(){
     int i = 0;
     if ((i = client.disconnect()) != 0)
-         printf("Error: disconnect fail %d\n", i);
-    if(i ==0 ) {
+         printf("Error: disconnect failed %d\n", i);
+    if(i == 0 ) {
         ipstack.disconnect();
-    }    
+    }
     return i;
 }
 int trans_loop(int timeout){
     int i = 0;
     i = client.yield(timeout);
     return i;
-}
\ No newline at end of file
+}