![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
MQTT version for enno SDK
Dependencies: EthernetInterface MQTT mbed-rtos mbed serialzation_lib
Fork of HelloMQTT by
protocol/CplusplusToC.cpp@21:c5f6350a292d, 2015-12-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |