MQTT version for enno SDK
Dependencies: EthernetInterface MQTT mbed-rtos mbed serialzation_lib
Fork of HelloMQTT by
Diff: protocol/CplusplusToC.cpp
- Revision:
- 21:c5f6350a292d
- Parent:
- 20:3858e42b0cd3
diff -r 3858e42b0cd3 -r c5f6350a292d protocol/CplusplusToC.cpp --- 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 +}