MQTT version for enno SDK

Dependencies:   EthernetInterface MQTT mbed-rtos mbed serialzation_lib

Fork of HelloMQTT by MQTT

Committer:
weiarm2015
Date:
Wed Dec 02 01:54:31 2015 +0000
Revision:
21:c5f6350a292d
Parent:
20:3858e42b0cd3
This is a alpha version of enno SDK for mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
weiarm2015 21:c5f6350a292d 1 /*
weiarm2015 21:c5f6350a292d 2 * CplusplusToC.c
weiarm2015 21:c5f6350a292d 3 *
weiarm2015 21:c5f6350a292d 4 * Created on: 2015年11月20日
weiarm2015 21:c5f6350a292d 5 * Author: v-chawei
weiarm2015 21:c5f6350a292d 6 */
weiarm2015 21:c5f6350a292d 7 #include "MQTTEthernet.h"
weiarm2015 20:3858e42b0cd3 8 #include "MQTTClient.h"
weiarm2015 21:c5f6350a292d 9 #include "string.h"
weiarm2015 21:c5f6350a292d 10 #include "enno_api.h"
weiarm2015 20:3858e42b0cd3 11
weiarm2015 20:3858e42b0cd3 12 static MQTTEthernet ipstack = MQTTEthernet();
weiarm2015 20:3858e42b0cd3 13 static MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
weiarm2015 21:c5f6350a292d 14 int symbol=0;
weiarm2015 21:c5f6350a292d 15 int arrivedcount=0;
weiarm2015 20:3858e42b0cd3 16
weiarm2015 20:3858e42b0cd3 17 extern "C"{
weiarm2015 21:c5f6350a292d 18 int trans_connect(char *hostURL, uint16_t port, char *appKey);
weiarm2015 21:c5f6350a292d 19 int trans_subscribe(char *topic, char *topicType);
weiarm2015 21:c5f6350a292d 20 int trans_publish(char *path, char *payload, int payloadlen);
weiarm2015 20:3858e42b0cd3 21 int trans_unsubscribe(char *pTopic);
weiarm2015 20:3858e42b0cd3 22 int trans_disconnect();
weiarm2015 20:3858e42b0cd3 23 int trans_loop(int timeout);
weiarm2015 20:3858e42b0cd3 24 }
weiarm2015 20:3858e42b0cd3 25
weiarm2015 20:3858e42b0cd3 26 int trans_connect(char *hostURL, uint16_t port, char *appKey){
weiarm2015 20:3858e42b0cd3 27 int i = 0;
weiarm2015 21:c5f6350a292d 28 if( symbol==0 ){
weiarm2015 21:c5f6350a292d 29 ipstack.start();
weiarm2015 21:c5f6350a292d 30 symbol=1;
weiarm2015 21:c5f6350a292d 31 }
weiarm2015 21:c5f6350a292d 32 i = ipstack.connect(hostURL, port);
weiarm2015 21:c5f6350a292d 33 if (i == 0 ){
weiarm2015 21:c5f6350a292d 34 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
weiarm2015 21:c5f6350a292d 35 data.MQTTVersion = 3;
weiarm2015 21:c5f6350a292d 36 data.clientID.cstring = "mbed-sample";
weiarm2015 21:c5f6350a292d 37 data.username.cstring = NULL;
weiarm2015 21:c5f6350a292d 38 data.password.cstring = NULL;
weiarm2015 21:c5f6350a292d 39 if ((i = client.connect(data)) != 0)
weiarm2015 21:c5f6350a292d 40 printf("Error: connect failed %d\n", i);
weiarm2015 21:c5f6350a292d 41 }
weiarm2015 20:3858e42b0cd3 42 return i;
weiarm2015 20:3858e42b0cd3 43 }
weiarm2015 21:c5f6350a292d 44
weiarm2015 21:c5f6350a292d 45
weiarm2015 21:c5f6350a292d 46 void systemMessageHandler(MQTT::MessageData& md)
weiarm2015 21:c5f6350a292d 47 {
weiarm2015 21:c5f6350a292d 48 uint8_t buffer[512];
weiarm2015 21:c5f6350a292d 49 MQTT::Message &message = md.message;
weiarm2015 21:c5f6350a292d 50 printf("system message received.\n");
weiarm2015 21:c5f6350a292d 51 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
weiarm2015 21:c5f6350a292d 52 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
weiarm2015 21:c5f6350a292d 53 ++arrivedcount;
weiarm2015 21:c5f6350a292d 54 ennoSystemMessageHandler(md.topicName.cstring, (char*)message.payload, message.payloadlen);
weiarm2015 21:c5f6350a292d 55 // extern "C"{
weiarm2015 21:c5f6350a292d 56 // callbackRef(md.topicName.cstring, message.payload, message.payloadlen);
weiarm2015 21:c5f6350a292d 57 // }
weiarm2015 21:c5f6350a292d 58 }
weiarm2015 21:c5f6350a292d 59 void commandMessageHandler(MQTT::MessageData& md)
weiarm2015 21:c5f6350a292d 60 {
weiarm2015 21:c5f6350a292d 61 uint8_t buffer[512];
weiarm2015 21:c5f6350a292d 62 MQTT::Message &message = md.message;
weiarm2015 21:c5f6350a292d 63 printf("command message received.\n");
weiarm2015 21:c5f6350a292d 64 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
weiarm2015 21:c5f6350a292d 65 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
weiarm2015 21:c5f6350a292d 66 ++arrivedcount;
weiarm2015 21:c5f6350a292d 67 }
weiarm2015 21:c5f6350a292d 68 int trans_subscribe(char *topic, char *topicType){
weiarm2015 20:3858e42b0cd3 69 int i = 0;
weiarm2015 21:c5f6350a292d 70 if((strcmp(topicType,"system")) == 0){
weiarm2015 21:c5f6350a292d 71 if ((i = client.subscribe(topic, MQTT::QOS2, systemMessageHandler)) != 0){
weiarm2015 21:c5f6350a292d 72 printf("Error: subscribe failed %d\n", i);
weiarm2015 21:c5f6350a292d 73 }
weiarm2015 21:c5f6350a292d 74 }else{
weiarm2015 21:c5f6350a292d 75 if ((i = client.subscribe(topic, MQTT::QOS2, commandMessageHandler)) != 0){
weiarm2015 21:c5f6350a292d 76 printf("Error: subscribe failed %d\n", i);
weiarm2015 21:c5f6350a292d 77 }
weiarm2015 21:c5f6350a292d 78 }
weiarm2015 21:c5f6350a292d 79 return i;
weiarm2015 21:c5f6350a292d 80 }
weiarm2015 21:c5f6350a292d 81 int trans_publish(char *path, char *payload, int payloadlen){
weiarm2015 21:c5f6350a292d 82 int i = 0;
weiarm2015 21:c5f6350a292d 83 MQTT::Message message;
weiarm2015 21:c5f6350a292d 84 message.qos = MQTT::QOS0;
weiarm2015 21:c5f6350a292d 85 message.retained = false;
weiarm2015 21:c5f6350a292d 86 message.dup = false;
weiarm2015 21:c5f6350a292d 87 message.payload = payload;
weiarm2015 21:c5f6350a292d 88 message.payloadlen = payloadlen;
weiarm2015 21:c5f6350a292d 89 if ((i = client.publish(path, message)) != 0){
weiarm2015 21:c5f6350a292d 90 printf("Error: publish failed %d\n", i);
weiarm2015 21:c5f6350a292d 91 }
weiarm2015 20:3858e42b0cd3 92 return i;
weiarm2015 20:3858e42b0cd3 93 }
weiarm2015 20:3858e42b0cd3 94 int trans_unsubscribe(char *pTopic){
weiarm2015 20:3858e42b0cd3 95 int i = 0;
weiarm2015 20:3858e42b0cd3 96 if ((i = client.unsubscribe(pTopic))!= 0){
weiarm2015 21:c5f6350a292d 97 printf("Error: unsubscribe failed %d\n", i);
weiarm2015 20:3858e42b0cd3 98 }
weiarm2015 21:c5f6350a292d 99 return i;
weiarm2015 20:3858e42b0cd3 100 }
weiarm2015 20:3858e42b0cd3 101 int trans_disconnect(){
weiarm2015 20:3858e42b0cd3 102 int i = 0;
weiarm2015 20:3858e42b0cd3 103 if ((i = client.disconnect()) != 0)
weiarm2015 21:c5f6350a292d 104 printf("Error: disconnect failed %d\n", i);
weiarm2015 21:c5f6350a292d 105 if(i == 0 ) {
weiarm2015 20:3858e42b0cd3 106 ipstack.disconnect();
weiarm2015 21:c5f6350a292d 107 }
weiarm2015 20:3858e42b0cd3 108 return i;
weiarm2015 20:3858e42b0cd3 109 }
weiarm2015 20:3858e42b0cd3 110 int trans_loop(int timeout){
weiarm2015 20:3858e42b0cd3 111 int i = 0;
weiarm2015 20:3858e42b0cd3 112 i = client.yield(timeout);
weiarm2015 20:3858e42b0cd3 113 return i;
weiarm2015 21:c5f6350a292d 114 }