MQTT test for AbitUSBModem see: https://developer.mbed.org/users/phsfan/notebook/abitusbmodem/

Dependencies:   AbitUSBModem MQTT USBHost mbed

Committer:
phsfan
Date:
Mon Feb 23 12:55:41 2015 +0000
Revision:
0:94dd0d864d76
mqtt 1st build

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phsfan 0:94dd0d864d76 1 // https://developer.mbed.org/teams/mqtt/code/HelloMQTT
phsfan 0:94dd0d864d76 2 #include "mbed.h"
phsfan 0:94dd0d864d76 3 #include "AbitUSBModem.h"
phsfan 0:94dd0d864d76 4
phsfan 0:94dd0d864d76 5 Serial pc(USBTX, USBRX);
phsfan 0:94dd0d864d76 6 DigitalOut myled(LED1);
phsfan 0:94dd0d864d76 7
phsfan 0:94dd0d864d76 8 #include "MQTTAbitUSBModem.h"
phsfan 0:94dd0d864d76 9 #include "MQTTClient.h"
phsfan 0:94dd0d864d76 10
phsfan 0:94dd0d864d76 11 int arrivedcount = 0;
phsfan 0:94dd0d864d76 12
phsfan 0:94dd0d864d76 13 void messageArrived(MQTT::MessageData& md)
phsfan 0:94dd0d864d76 14 {
phsfan 0:94dd0d864d76 15 MQTT::Message &message = md.message;
phsfan 0:94dd0d864d76 16 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
phsfan 0:94dd0d864d76 17 printf("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
phsfan 0:94dd0d864d76 18 ++arrivedcount;
phsfan 0:94dd0d864d76 19 // printf((char*)message.payload);
phsfan 0:94dd0d864d76 20 }
phsfan 0:94dd0d864d76 21
phsfan 0:94dd0d864d76 22 void test(void const*)
phsfan 0:94dd0d864d76 23 {
phsfan 0:94dd0d864d76 24 MQTTAbitUSBModem ipstack = MQTTAbitUSBModem();
phsfan 0:94dd0d864d76 25 float version = 0.47;
phsfan 0:94dd0d864d76 26 char* topic = "mbed-sample";
phsfan 0:94dd0d864d76 27
phsfan 0:94dd0d864d76 28 AbitUSBModem &modem = ipstack.getModem();
phsfan 0:94dd0d864d76 29 printf("IP Address %s\r\n", modem.getIPAddress());
phsfan 0:94dd0d864d76 30
phsfan 0:94dd0d864d76 31 printf("Version is %f\r\n", version);
phsfan 0:94dd0d864d76 32
phsfan 0:94dd0d864d76 33 MQTT::Client<MQTTAbitUSBModem, Countdown> client = MQTT::Client<MQTTAbitUSBModem, Countdown>(ipstack);
phsfan 0:94dd0d864d76 34
phsfan 0:94dd0d864d76 35 char* hostname = "m2m.eclipse.org";
phsfan 0:94dd0d864d76 36 int port = 1883;
phsfan 0:94dd0d864d76 37 printf("Connecting to %s:%d\r\n", hostname, port);
phsfan 0:94dd0d864d76 38 int rc = ipstack.connect(hostname, port);
phsfan 0:94dd0d864d76 39 if (rc != 0)
phsfan 0:94dd0d864d76 40 printf("rc from TCP connect is %d\r\n", rc);
phsfan 0:94dd0d864d76 41
phsfan 0:94dd0d864d76 42 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
phsfan 0:94dd0d864d76 43 data.MQTTVersion = 3;
phsfan 0:94dd0d864d76 44 data.clientID.cstring = "mbed-sample";
phsfan 0:94dd0d864d76 45 data.username.cstring = "testuser";
phsfan 0:94dd0d864d76 46 data.password.cstring = "testpassword";
phsfan 0:94dd0d864d76 47 if ((rc = client.connect(data)) != 0)
phsfan 0:94dd0d864d76 48 printf("rc from MQTT connect is %d\r\n", rc);
phsfan 0:94dd0d864d76 49
phsfan 0:94dd0d864d76 50 if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0)
phsfan 0:94dd0d864d76 51 printf("rc from MQTT subscribe is %d\r\n", rc);
phsfan 0:94dd0d864d76 52
phsfan 0:94dd0d864d76 53 MQTT::Message message;
phsfan 0:94dd0d864d76 54
phsfan 0:94dd0d864d76 55 // QoS 0
phsfan 0:94dd0d864d76 56 char buf[100];
phsfan 0:94dd0d864d76 57 sprintf(buf, "Hello World! QoS 0 message from app version %f\r\n", version);
phsfan 0:94dd0d864d76 58 message.qos = MQTT::QOS0;
phsfan 0:94dd0d864d76 59 message.retained = false;
phsfan 0:94dd0d864d76 60 message.dup = false;
phsfan 0:94dd0d864d76 61 message.payload = (void*)buf;
phsfan 0:94dd0d864d76 62 message.payloadlen = strlen(buf)+1;
phsfan 0:94dd0d864d76 63 rc = client.publish(topic, message);
phsfan 0:94dd0d864d76 64 while (arrivedcount < 1)
phsfan 0:94dd0d864d76 65 client.yield(100);
phsfan 0:94dd0d864d76 66
phsfan 0:94dd0d864d76 67 // QoS 1
phsfan 0:94dd0d864d76 68 sprintf(buf, "Hello World! QoS 1 message from app version %f\r\n", version);
phsfan 0:94dd0d864d76 69 message.qos = MQTT::QOS1;
phsfan 0:94dd0d864d76 70 message.payloadlen = strlen(buf)+1;
phsfan 0:94dd0d864d76 71 rc = client.publish(topic, message);
phsfan 0:94dd0d864d76 72 while (arrivedcount < 2)
phsfan 0:94dd0d864d76 73 client.yield(100);
phsfan 0:94dd0d864d76 74
phsfan 0:94dd0d864d76 75 #if MQTTCLIENT_QOS2
phsfan 0:94dd0d864d76 76 // QoS 2
phsfan 0:94dd0d864d76 77 sprintf(buf, "Hello World! QoS 2 message from app version %f\r\n", version);
phsfan 0:94dd0d864d76 78 message.qos = MQTT::QOS2;
phsfan 0:94dd0d864d76 79 message.payloadlen = strlen(buf)+1;
phsfan 0:94dd0d864d76 80 rc = client.publish(topic, message);
phsfan 0:94dd0d864d76 81 while (arrivedcount < 3)
phsfan 0:94dd0d864d76 82 client.yield(100);
phsfan 0:94dd0d864d76 83
phsfan 0:94dd0d864d76 84 // n * QoS 2
phsfan 0:94dd0d864d76 85 for (int i = 1; i <= 10; ++i)
phsfan 0:94dd0d864d76 86 {
phsfan 0:94dd0d864d76 87 sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\r\n", i, version);
phsfan 0:94dd0d864d76 88 message.qos = MQTT::QOS2;
phsfan 0:94dd0d864d76 89 message.payloadlen = strlen(buf)+1;
phsfan 0:94dd0d864d76 90 rc = client.publish(topic, message);
phsfan 0:94dd0d864d76 91 while (arrivedcount < i + 3)
phsfan 0:94dd0d864d76 92 client.yield(100);
phsfan 0:94dd0d864d76 93 }
phsfan 0:94dd0d864d76 94 #endif
phsfan 0:94dd0d864d76 95
phsfan 0:94dd0d864d76 96 if ((rc = client.unsubscribe(topic)) != 0)
phsfan 0:94dd0d864d76 97 printf("rc from unsubscribe was %d\r\n", rc);
phsfan 0:94dd0d864d76 98
phsfan 0:94dd0d864d76 99 if ((rc = client.disconnect()) != 0)
phsfan 0:94dd0d864d76 100 printf("rc from disconnect was %d\r\n", rc);
phsfan 0:94dd0d864d76 101
phsfan 0:94dd0d864d76 102 ipstack.disconnect();
phsfan 0:94dd0d864d76 103
phsfan 0:94dd0d864d76 104 Thread::wait(1000);
phsfan 0:94dd0d864d76 105 printf("exit\r\n");
phsfan 0:94dd0d864d76 106 modem.disconnect();
phsfan 0:94dd0d864d76 107 }
phsfan 0:94dd0d864d76 108
phsfan 0:94dd0d864d76 109 int main()
phsfan 0:94dd0d864d76 110 {
phsfan 0:94dd0d864d76 111 pc.baud(115200);
phsfan 0:94dd0d864d76 112 printf("** PHS MQTT\r\n");
phsfan 0:94dd0d864d76 113
phsfan 0:94dd0d864d76 114 Thread testTask(test, NULL, osPriorityNormal, 1024 * 4);
phsfan 0:94dd0d864d76 115 while(1) {
phsfan 0:94dd0d864d76 116 myled = !myled;
phsfan 0:94dd0d864d76 117 Thread::wait(1000);
phsfan 0:94dd0d864d76 118 }
phsfan 0:94dd0d864d76 119 }