nothing

Dependencies:   C12832 EthernetInterface MQTT mbed-rtos mbed

Fork of HelloMQTT by MQTT

Revision:
20:82721643145a
Parent:
19:7f7aba7a4a8b
--- a/main.cpp	Thu Jul 30 13:49:18 2015 +0000
+++ b/main.cpp	Fri Nov 20 05:47:25 2015 +0000
@@ -1,118 +1,147 @@
-/*******************************************************************************
- * Copyright (c) 2014, 2015 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- *    http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- *   http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *    Ian Craggs - initial API and implementation and/or initial documentation
- *    Ian Craggs - make sure QoS2 processing works, and add device headers
- *******************************************************************************/
- 
- /**
-  This is a sample program to illustrate the use of the MQTT Client library
-  on the mbed platform.  The Client class requires two classes which mediate
-  access to system interfaces for networking and timing.  As long as these two
-  classes provide the required public programming interfaces, it does not matter
-  what facilities they use underneath. In this program, they use the mbed
-  system libraries.
- 
- */
- 
- // change this to 0 to output messages to serial instead of LCD
-#define USE_LCD 1
-
-#if USE_LCD
-#include "C12832.h"
-
-#if defined(TARGET_UBLOX_C027)
-#warning "Compiling for mbed C027"
-#include "C027.h"
-#elif defined(TARGET_LPC1768)
-#warning "Compiling for mbed LPC1768"
-#include "LPC1768.h"
-#elif defined(TARGET_K64F)
-#warning "Compiling for mbed K64F"
-#include "K64F.h"
-#endif
-
-#define printf lcd.cls();lcd.printf
-
-#endif
+// Do not remove the include below
+#include "mbed.h"
+#include "MQTTEthernet.h"
+#include "MQTTClient.h"
+#include "pb_decode.h"
+#include "sitewhere.h"
+#include "sitewhere.pb.h"
 
 #define MQTTCLIENT_QOS2 1
+int arrivedcount = 0;
+bool registered = false;
 
-#include "MQTTEthernet.h"
-#include "MQTTClient.h"
-
-int arrivedcount = 0;
-
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
 
 void messageArrived(MQTT::MessageData& md)
 {
+    uint8_t buffer[512];
     MQTT::Message &message = md.message;
     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;
+/*
+    buffer = message.payload;
+    Device_Header header;
+    pb_istream_t stream = pb_istream_from_buffer(buffer, message.payloadlen);
+
+    // Read header to find what type of command follows.
+      if (pb_decode_delimited(&stream, Device_Header_fields, &header)) {
+        // Handle a registration acknowledgement.
+        if (header.command == Device_Command_REGISTER_ACK) {
+          Device_RegistrationAck ack;
+          if (pb_decode_delimited(&stream, Device_RegistrationAck_fields, &ack)) {
+            if (ack.state == Device_RegistrationAckState_NEW_REGISTRATION) {
+              printf("Registered new device.");
+              registered = true;
+            } else if (ack.state == Device_RegistrationAckState_ALREADY_REGISTERED) {
+              printf("Device was already registered.");
+              registered = true;
+            } else if (ack.state == Device_RegistrationAckState_REGISTRATION_ERROR) {
+              printf("Error registering device.");
+            }
+          }
+        }
+      } else {
+        printf("Unable to decode system command.");
+      }
+    */
 }
 
 
 int main(int argc, char* argv[])
-{   
+{
     MQTTEthernet ipstack = MQTTEthernet();
     float version = 0.5;
-    char* topic = "mbed-sample";
-    
+    char* topic = "SiteWhere/input/protobuf";
+    char* hardwareId = "enno-device-mbed-id-2";
+    char* specificationToken = "9556b504-52cc-4194-89c0-f301a782b286";
+    char* system = "SiteWhere/system/mbed-test-A";
+    char* hostname = "139.217.10.99";//sitewhere.chinacloudapp.cn:1883
+    int port = 1883;
+
+    led1=1;led2=1;led3=1;led4=1;
+    wait(0.5);
+    led1=!led1;led2=!led2;led3=!led3;led4=!led4;
+    wait(0.5);
+    led1=!led1;led2=!led2;led3=!led3;led4=!led4;
+
     printf("HelloMQTT: version is %f\n", version);
-              
     MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
-    
-    char* hostname = "m2m.eclipse.org";
-    int port = 1883;
     printf("Connecting to %s:%d\n", hostname, port);
     int rc = ipstack.connect(hostname, port);
-    if (rc != 0)
+
+    if (rc != 0){                           //tcp connect error!
         printf("rc from TCP connect is %d\n", rc);
- 
-    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
-    data.MQTTVersion = 3;
-    data.clientID.cstring = "mbed-sample";
-    data.username.cstring = "testuser";
-    data.password.cstring = "testpassword";
-    if ((rc = client.connect(data)) != 0)
-        printf("rc from MQTT connect is %d\n", rc);
-    
-    if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
-        printf("rc from MQTT subscribe is %d\n", rc);
+       }
+    if (rc == 0){                            //tcp connected!
+        led1=!led1;wait(1);led1=!led1;wait(1);led1=!led1;
 
-    MQTT::Message message;
+         MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+         data.MQTTVersion = 3;
+         data.clientID.cstring = "mbed-sample";
+         data.username.cstring = NULL;
+         data.password.cstring = NULL;
+         if ((rc = client.connect(data)) != 0)
+             printf("rc from MQTT connect is %d\n", rc);
+         if (rc == 0){                      //MQTT Client connected!
+             led2=!led2;wait(1);led2=!led2;wait(1);led2=!led2;
+
+             if ((rc = client.subscribe(system, MQTT::QOS2, messageArrived)) != 0)
+                 printf("rc from MQTT subscribe is %d\n", rc);
+             if(rc == 0){                       //subscribe successed!
+                 led3=!led3;wait(1);led3=!led3;wait(1);led3=!led3;
+
+                 MQTT::Message message;
 
-    // QoS 0
-    char buf[100];
-    sprintf(buf, "Hello World!  QoS 0 message from app version %f\n", version);
-    message.qos = MQTT::QOS0;
-    message.retained = false;
-    message.dup = false;
-    message.payload = (void*)buf;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, message);
-    while (arrivedcount < 1)
-        client.yield(100);
-        
-    // QoS 1
-    sprintf(buf, "Hello World!  QoS 1 message from app version %f\n", version);
-    message.qos = MQTT::QOS1;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, message);
-    while (arrivedcount < 2)
-        client.yield(100);
-        
+             // QoS 0
+                 char buf[100];
+                 //unsigned char buffer[512];
+                 uint8_t buffer[512];                                // Caution: unsigned char cause an error!!!
+                 unsigned int len = 0;
+                 sprintf(buf, "Hello World!  QoS 0 message from app version %f\n", version);
+                 message.qos = MQTT::QOS0;
+                 message.retained = false;
+                 message.dup = false;
+                // message.payload = (void*)buf;
+                // message.payloadlen = strlen(buf)+1;                //??
+                 /*********** serialization ************/
+                 len = sw_register(hardwareId, specificationToken, buffer, 512,NULL);
+                 message.payload = buffer;
+                 message.payloadlen = len;
+                 /*************************************/
+                 rc = client.publish(topic, message);
+        //       while (arrivedcount < 1)
+        //           client.yield(100);
+
+
+
+ // QoS 1
+                 /*********** serialization ************/
+                // len = sw_alert(hardwareId, "enno.info","mbed is alive", NULL, buffer, 512, NULL);
+                 len = sw_location(hardwareId, 27.59, 86.55, 8844.43, 0,buffer, 512, NULL);
+                 message.payload = buffer;
+                 message.payloadlen = len;
+                 sprintf(buf, "Hello World!  QoS 1 message from app version %f\n", version);
+                 message.qos = MQTT::QOS1;
+
+                 while (0 == rc) {
+                         client.yield(1000);
+                         //sleep();
+                         //wait(0.5);
+                         client.publish(topic, message);
+                         printf("Location updated.\n");
+                         led4=!led4;
+
+                     }
+                 return 0;
+             }
+         }
+    }
+}
+/*
     // QoS 2
     sprintf(buf, "Hello World!  QoS 2 message from app version %f\n", version);
     message.qos = MQTT::QOS2;
@@ -120,16 +149,19 @@
     rc = client.publish(topic, message);
     while (arrivedcount < 3)
         client.yield(100);
-            
-    if ((rc = client.unsubscribe(topic)) != 0)
-        printf("rc from unsubscribe was %d\n", rc);
-    
-    if ((rc = client.disconnect()) != 0)
-        printf("rc from disconnect was %d\n", rc);
-    
-    ipstack.disconnect();
-    
-    printf("Version %.2f: finish %d msgs\n", version, arrivedcount);
-    
-    return 0;
-}
+*/
+/*
+ if ((rc = client.unsubscribe(topic)) != 0)
+         printf("rc from unsubscribe was %d\n", rc);
+
+     if ((rc = client.disconnect()) != 0)
+         printf("rc from disconnect was %d\n", rc);
+
+     ipstack.disconnect();
+
+     printf("Version %.2f: finish %d msgs\n", version, arrivedcount); */
+
+
+
+//  Auto Added by "SMeshLink SMeshStudio"
+