123

Dependencies:   MQTTSN

Committer:
m_ahsan
Date:
Mon Dec 10 08:03:46 2018 +0000
Revision:
13:8f1f478c300a
test

Who changed what in which revision?

UserRevisionLine numberNew 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 }