
123
Dependencies: MQTTSN
Client-main.cpp@13:8f1f478c300a, 2018-12-10 (annotated)
- Committer:
- m_ahsan
- Date:
- Mon Dec 10 08:03:46 2018 +0000
- Revision:
- 13:8f1f478c300a
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
m_ahsan | 13:8f1f478c300a | 1 | /* SpwfInterface NetworkSocketAPI Example Program |
m_ahsan | 13:8f1f478c300a | 2 | * Copyright (c) 2015 ARM Limited |
m_ahsan | 13:8f1f478c300a | 3 | * |
m_ahsan | 13:8f1f478c300a | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
m_ahsan | 13:8f1f478c300a | 5 | * you may not use this file except in compliance with the License. |
m_ahsan | 13:8f1f478c300a | 6 | * You may obtain a copy of the License at |
m_ahsan | 13:8f1f478c300a | 7 | * |
m_ahsan | 13:8f1f478c300a | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
m_ahsan | 13:8f1f478c300a | 9 | * |
m_ahsan | 13:8f1f478c300a | 10 | * Unless required by applicable law or agreed to in writing, software |
m_ahsan | 13:8f1f478c300a | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
m_ahsan | 13:8f1f478c300a | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
m_ahsan | 13:8f1f478c300a | 13 | * See the License for the specific language governing permissions and |
m_ahsan | 13:8f1f478c300a | 14 | * limitations under the License. |
m_ahsan | 13:8f1f478c300a | 15 | */ |
m_ahsan | 13:8f1f478c300a | 16 | |
m_ahsan | 13:8f1f478c300a | 17 | #include "mbed.h" |
m_ahsan | 13:8f1f478c300a | 18 | #define MQTTSNCLIENT_QOS2 1 |
m_ahsan | 13:8f1f478c300a | 19 | //#include "TCPSocket.h" |
m_ahsan | 13:8f1f478c300a | 20 | //#include "UDPSocket.h" |
m_ahsan | 13:8f1f478c300a | 21 | #include "MQTTSNUDP.h" |
m_ahsan | 13:8f1f478c300a | 22 | #include "MQTTSNClient.h" |
m_ahsan | 13:8f1f478c300a | 23 | |
m_ahsan | 13:8f1f478c300a | 24 | // |
m_ahsan | 13:8f1f478c300a | 25 | |
m_ahsan | 13:8f1f478c300a | 26 | //------------------------------------ |
m_ahsan | 13:8f1f478c300a | 27 | // Hyperterminal configuration |
m_ahsan | 13:8f1f478c300a | 28 | // 9600 bauds, 8-bit data, no parity |
m_ahsan | 13:8f1f478c300a | 29 | //------------------------------------ |
m_ahsan | 13:8f1f478c300a | 30 | |
m_ahsan | 13:8f1f478c300a | 31 | Serial pc(USBTX, USBRX); |
m_ahsan | 13:8f1f478c300a | 32 | DigitalOut myled(LED1); |
m_ahsan | 13:8f1f478c300a | 33 | |
m_ahsan | 13:8f1f478c300a | 34 | int arrivedcount = 0; |
m_ahsan | 13:8f1f478c300a | 35 | |
m_ahsan | 13:8f1f478c300a | 36 | void messageArrived(MQTTSN::MessageData& md) |
m_ahsan | 13:8f1f478c300a | 37 | { |
m_ahsan | 13:8f1f478c300a | 38 | MQTTSN::Message &message = md.message; |
m_ahsan | 13:8f1f478c300a | 39 | printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n, Number: %d", message.qos, message.retained, message.dup, message.id, arrivedcount); |
m_ahsan | 13:8f1f478c300a | 40 | printf("Payload %.*s\n", message.payloadlen, (char*)message.payload); |
m_ahsan | 13:8f1f478c300a | 41 | ++arrivedcount; |
m_ahsan | 13:8f1f478c300a | 42 | puts((char*)message.payload); |
m_ahsan | 13:8f1f478c300a | 43 | } |
m_ahsan | 13:8f1f478c300a | 44 | |
m_ahsan | 13:8f1f478c300a | 45 | int main() { |
m_ahsan | 13:8f1f478c300a | 46 | |
m_ahsan | 13:8f1f478c300a | 47 | float version = 0.47; |
m_ahsan | 13:8f1f478c300a | 48 | char* topic = "mbed-sample"; |
m_ahsan | 13:8f1f478c300a | 49 | |
m_ahsan | 13:8f1f478c300a | 50 | MQTTSNUDP ipstack = MQTTSNUDP(); |
m_ahsan | 13:8f1f478c300a | 51 | |
m_ahsan | 13:8f1f478c300a | 52 | char * ssid = "KICS-IOT-DHCP"; |
m_ahsan | 13:8f1f478c300a | 53 | char * seckey = "AAAFFFBBBC"; |
m_ahsan | 13:8f1f478c300a | 54 | |
m_ahsan | 13:8f1f478c300a | 55 | printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n"); |
m_ahsan | 13:8f1f478c300a | 56 | printf("\r\nconnecting to AP\r\n"); |
m_ahsan | 13:8f1f478c300a | 57 | |
m_ahsan | 13:8f1f478c300a | 58 | if(spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA2)) { |
m_ahsan | 13:8f1f478c300a | 59 | printf("\r\nnow connected\r\n"); |
m_ahsan | 13:8f1f478c300a | 60 | } else { |
m_ahsan | 13:8f1f478c300a | 61 | printf("\r\nerror connecting to AP.\r\n"); |
m_ahsan | 13:8f1f478c300a | 62 | return -1; |
m_ahsan | 13:8f1f478c300a | 63 | } |
m_ahsan | 13:8f1f478c300a | 64 | const char* Local_IP = spwf.get_ip_address(); |
m_ahsan | 13:8f1f478c300a | 65 | printf("IP Address of Device is: %s\n", Local_IP); |
m_ahsan | 13:8f1f478c300a | 66 | |
m_ahsan | 13:8f1f478c300a | 67 | const char* Local_MAC = spwf.get_mac_address(); |
m_ahsan | 13:8f1f478c300a | 68 | printf("MAC Address of Device is: %s\n", Local_MAC); |
m_ahsan | 13:8f1f478c300a | 69 | |
m_ahsan | 13:8f1f478c300a | 70 | MQTTSN::Client<MQTTSNUDP, Countdown> client = MQTTSN::Client<MQTTSNUDP, Countdown>(ipstack); |
m_ahsan | 13:8f1f478c300a | 71 | char* hostname = "192.168.0.114"; |
m_ahsan | 13:8f1f478c300a | 72 | int port = 10000; |
m_ahsan | 13:8f1f478c300a | 73 | printf("Connecting to %s:%d\n", hostname, port); |
m_ahsan | 13:8f1f478c300a | 74 | int rc = ipstack.connect(hostname, port); |
m_ahsan | 13:8f1f478c300a | 75 | if (rc != 0) |
m_ahsan | 13:8f1f478c300a | 76 | printf("rc from UDP connect is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 77 | else |
m_ahsan | 13:8f1f478c300a | 78 | printf("UDP connected\n"); |
m_ahsan | 13:8f1f478c300a | 79 | |
m_ahsan | 13:8f1f478c300a | 80 | MQTTSNPacket_connectData data = MQTTSNPacket_connectData_initializer; |
m_ahsan | 13:8f1f478c300a | 81 | data.clientID.cstring = "mbed-sample"; |
m_ahsan | 13:8f1f478c300a | 82 | data.duration = 60; |
m_ahsan | 13:8f1f478c300a | 83 | if ((rc = client.connect(data)) != 0) |
m_ahsan | 13:8f1f478c300a | 84 | printf("rc from MQTT connect is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 85 | else |
m_ahsan | 13:8f1f478c300a | 86 | printf("MQTT Connected\n"); |
m_ahsan | 13:8f1f478c300a | 87 | |
m_ahsan | 13:8f1f478c300a | 88 | MQTTSN_topicid topicid; |
m_ahsan | 13:8f1f478c300a | 89 | topicid.type = MQTTSN_TOPIC_TYPE_NORMAL; |
m_ahsan | 13:8f1f478c300a | 90 | topicid.data.long_.name = topic; |
m_ahsan | 13:8f1f478c300a | 91 | topicid.data.long_.len = strlen(topic); |
m_ahsan | 13:8f1f478c300a | 92 | MQTTSN::QoS grantedQoS; |
m_ahsan | 13:8f1f478c300a | 93 | if ((rc = client.subscribe(topicid, MQTTSN::QOS1, grantedQoS, messageArrived)) != 0) |
m_ahsan | 13:8f1f478c300a | 94 | printf("rc from MQTT subscribe is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 95 | else |
m_ahsan | 13:8f1f478c300a | 96 | printf("Subscribed to Topic %s\n", topic); |
m_ahsan | 13:8f1f478c300a | 97 | |
m_ahsan | 13:8f1f478c300a | 98 | MQTTSN::Message message; |
m_ahsan | 13:8f1f478c300a | 99 | |
m_ahsan | 13:8f1f478c300a | 100 | char buf[100]; |
m_ahsan | 13:8f1f478c300a | 101 | int i; |
m_ahsan | 13:8f1f478c300a | 102 | // QoS 0 |
m_ahsan | 13:8f1f478c300a | 103 | for(i = 0 ; i<= 10; i++){ |
m_ahsan | 13:8f1f478c300a | 104 | sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version); |
m_ahsan | 13:8f1f478c300a | 105 | message.qos = MQTTSN::QOS0; |
m_ahsan | 13:8f1f478c300a | 106 | message.retained = false; |
m_ahsan | 13:8f1f478c300a | 107 | message.dup = false; |
m_ahsan | 13:8f1f478c300a | 108 | message.payload = (void*)buf; |
m_ahsan | 13:8f1f478c300a | 109 | message.payloadlen = strlen(buf)+1; |
m_ahsan | 13:8f1f478c300a | 110 | |
m_ahsan | 13:8f1f478c300a | 111 | if ((rc = client.publish(topicid, message)) != 0) |
m_ahsan | 13:8f1f478c300a | 112 | printf("rc from MQTT Publish is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 113 | else |
m_ahsan | 13:8f1f478c300a | 114 | printf("Published Buffer %s to Topic %s\n",buf, topic); |
m_ahsan | 13:8f1f478c300a | 115 | printf("arrivedcount %d, i = %d\n",arrivedcount, i); |
m_ahsan | 13:8f1f478c300a | 116 | //while (arrivedcount < i) |
m_ahsan | 13:8f1f478c300a | 117 | client.yield(100); |
m_ahsan | 13:8f1f478c300a | 118 | } |
m_ahsan | 13:8f1f478c300a | 119 | wait(1); |
m_ahsan | 13:8f1f478c300a | 120 | // QoS 1 |
m_ahsan | 13:8f1f478c300a | 121 | |
m_ahsan | 13:8f1f478c300a | 122 | sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version); |
m_ahsan | 13:8f1f478c300a | 123 | message.qos = MQTTSN::QOS1; |
m_ahsan | 13:8f1f478c300a | 124 | message.payloadlen = strlen(buf)+1; |
m_ahsan | 13:8f1f478c300a | 125 | if ((rc = client.publish(topicid, message)) != 0) |
m_ahsan | 13:8f1f478c300a | 126 | printf("rc from MQTT Publish is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 127 | else |
m_ahsan | 13:8f1f478c300a | 128 | printf("Published Buffer %s to Topic %s\n",buf, topic); |
m_ahsan | 13:8f1f478c300a | 129 | i++; |
m_ahsan | 13:8f1f478c300a | 130 | //while (arrivedcount < i) |
m_ahsan | 13:8f1f478c300a | 131 | client.yield(100); |
m_ahsan | 13:8f1f478c300a | 132 | wait(1); |
m_ahsan | 13:8f1f478c300a | 133 | // QoS 1 |
m_ahsan | 13:8f1f478c300a | 134 | |
m_ahsan | 13:8f1f478c300a | 135 | sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version); |
m_ahsan | 13:8f1f478c300a | 136 | message.qos = MQTTSN::QOS2; |
m_ahsan | 13:8f1f478c300a | 137 | message.payloadlen = strlen(buf)+1; |
m_ahsan | 13:8f1f478c300a | 138 | if ((rc = client.publish(topicid, message)) != 0) |
m_ahsan | 13:8f1f478c300a | 139 | printf("rc from MQTT Publish is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 140 | else |
m_ahsan | 13:8f1f478c300a | 141 | printf("Published Buffer %s to Topic %s\n",buf, topic); |
m_ahsan | 13:8f1f478c300a | 142 | i++; |
m_ahsan | 13:8f1f478c300a | 143 | //while (arrivedcount < i) |
m_ahsan | 13:8f1f478c300a | 144 | client.yield(100); |
m_ahsan | 13:8f1f478c300a | 145 | wait(1); |
m_ahsan | 13:8f1f478c300a | 146 | /* |
m_ahsan | 13:8f1f478c300a | 147 | // QoS 2 |
m_ahsan | 13:8f1f478c300a | 148 | sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version); |
m_ahsan | 13:8f1f478c300a | 149 | message.qos = MQTTSN::QOS2; |
m_ahsan | 13:8f1f478c300a | 150 | message.payloadlen = strlen(buf)+1; |
m_ahsan | 13:8f1f478c300a | 151 | if ((rc = client.publish(topicid, message)) != 0) |
m_ahsan | 13:8f1f478c300a | 152 | printf("rc from MQTT Publish is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 153 | else |
m_ahsan | 13:8f1f478c300a | 154 | printf("Published Buffer %s to Topic %s\n",buf, topic); |
m_ahsan | 13:8f1f478c300a | 155 | i++; |
m_ahsan | 13:8f1f478c300a | 156 | printf("arrivedcount %d, i = %d\n",arrivedcount, i); |
m_ahsan | 13:8f1f478c300a | 157 | //while (arrivedcount < i) |
m_ahsan | 13:8f1f478c300a | 158 | client.yield(100); |
m_ahsan | 13:8f1f478c300a | 159 | wait(3); */ |
m_ahsan | 13:8f1f478c300a | 160 | /* |
m_ahsan | 13:8f1f478c300a | 161 | // n * QoS 2 |
m_ahsan | 13:8f1f478c300a | 162 | for (int a = 1; a <= 10; a++) |
m_ahsan | 13:8f1f478c300a | 163 | { |
m_ahsan | 13:8f1f478c300a | 164 | sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\n", i, version); |
m_ahsan | 13:8f1f478c300a | 165 | message.qos = MQTTSN::QOS2; |
m_ahsan | 13:8f1f478c300a | 166 | message.payloadlen = strlen(buf)+1; |
m_ahsan | 13:8f1f478c300a | 167 | if ((rc = client.publish(topicid, message)) != 0) |
m_ahsan | 13:8f1f478c300a | 168 | printf("rc from MQTT Publish is %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 169 | else |
m_ahsan | 13:8f1f478c300a | 170 | printf("Published Buffer %s to Topic %s\n",buf, topic); |
m_ahsan | 13:8f1f478c300a | 171 | i++; |
m_ahsan | 13:8f1f478c300a | 172 | printf("arrivedcount %d, i = %d\n",arrivedcount, i); |
m_ahsan | 13:8f1f478c300a | 173 | while (arrivedcount < i) |
m_ahsan | 13:8f1f478c300a | 174 | client.yield(100); |
m_ahsan | 13:8f1f478c300a | 175 | } |
m_ahsan | 13:8f1f478c300a | 176 | */ |
m_ahsan | 13:8f1f478c300a | 177 | if ((rc = client.unsubscribe(topicid)) != 0) |
m_ahsan | 13:8f1f478c300a | 178 | printf("rc from unsubscribe was %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 179 | |
m_ahsan | 13:8f1f478c300a | 180 | if ((rc = client.disconnect()) != 0) |
m_ahsan | 13:8f1f478c300a | 181 | printf("rc from disconnect was %d\n", rc); |
m_ahsan | 13:8f1f478c300a | 182 | |
m_ahsan | 13:8f1f478c300a | 183 | ipstack.disconnect(); |
m_ahsan | 13:8f1f478c300a | 184 | |
m_ahsan | 13:8f1f478c300a | 185 | printf("Version %.2f: finish %d msgs\n", version, arrivedcount); |
m_ahsan | 13:8f1f478c300a | 186 | printf("Finishing with %d messages received\n", arrivedcount); |
m_ahsan | 13:8f1f478c300a | 187 | |
m_ahsan | 13:8f1f478c300a | 188 | return 0; |
m_ahsan | 13:8f1f478c300a | 189 | |
m_ahsan | 13:8f1f478c300a | 190 | } |