Initial commit

Dependencies:   MQTT

Fork of PGO6_VoteController_template by Jens de hoog

Revision:
1:e7a311bd038e
Parent:
0:fd29cd85e75e
Child:
2:f283e5274a0f
--- a/main.cpp	Thu Oct 26 07:33:07 2017 +0000
+++ b/main.cpp	Thu Oct 26 14:16:10 2017 +0000
@@ -1,15 +1,22 @@
 #define APP_VERSION     0.6f
 #define MQTT_VERSION    3
-#define BROKER_NAME     "broker.hivemq.com"
+#define BROKER_NAME     "143.129.39.151"
 #define BROKER_PORT     1883
-
+#define CLIENTID    "Reinout"
+#define TOPIC   "clubIOT/feedback"
 #include "debounce_button.h"
 #include "EthernetInterface.h"
 #include "MQTTNetwork.h"
 #include "MQTTmbed.h"
 #include "MQTTClient.h"
 
-char* topic;
+DigitalOut info(LED2);
+DigitalOut connected(LED3);
+EthernetInterface interface;
+Timer timer;
+MQTTNetwork network(&interface);
+MQTT::Client<MQTTNetwork, Countdown> client(network);
+MQTT::Message message;
 
 /**
     TODO
@@ -40,9 +47,76 @@
     -   To have a uniform message sending procedure, use the following function usage:
             sendMessage(&client, topic, buf, qos, retained, duplicate)
 */
+void connect(char* name){
+    interface.connect();
+    while(interface.get_ip_address()== NULL){
+    }
+    
+    network.connect(BROKER_NAME, BROKER_PORT);
+    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+    data.MQTTVersion = 3;
+    data.clientID.cstring = name;
+    data.username.cstring = "smartcity";
+    data.password.cstring = "smartcity";
+    client.connect(data);
+    connected=1;
+}
+
+void send(char* feedback){
+    char buf[100];
+    sprintf(buf, feedback);
+    sprintf(buf+ strlen(buf), CLIENTID);
+     // QoS 0
+    message.qos = MQTT::QOS0;
+    message.retained = false;
+    message.dup = false;
+    message.payload = (void*)buf;
+    message.payloadlen = strlen(buf)+1;
+    client.publish(TOPIC, message);
+}
+
+void disconnect(void){
+    client.unsubscribe(TOPIC);
+    client.disconnect();
+    network.disconnect();
+    connected=0;
+}
+
+void messageArrived(MQTT::MessageData& md)
+{
+    MQTT::Message &message = md.message;
+    info=1;
+    char buf[100];
+    sprintf(buf,"Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
+    send(buf);
+    sprintf(buf,"Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
+    send(buf);
+}
+
+void subscribe(char* topic){
+  client.subscribe(topic, MQTT::QOS2, messageArrived);
+}
 
 int main(int argc, char* argv[])
 {
-
+    connect("Jef");
+    subscribe("clubIOT/songmeta");
+    InterruptIn button(USER_BUTTON);
+    
+    button.fall(callback(&button1_onpressed_cb));
+    float x=0;
+    while(connected){
+        if(!button1_busy && multiclick_state!=0){
+            if(multiclick_state==1)
+                send("like-");
+            else if(multiclick_state==2)
+                send("dislike-");
+            else if(multiclick_state==4)
+              //  if(connected==1)
+                disconnect();
+            //    else connect("Jef");
+            multiclick_state=0;
+        }
+    }
     return 0;
 }