
MQTT version for enno SDK
Dependencies: EthernetInterface MQTT mbed-rtos mbed serialzation_lib
Fork of HelloMQTT by
Revision 17:0811bdbdd78a, committed 2015-07-27
- Comitter:
- icraggs
- Date:
- Mon Jul 27 09:16:08 2015 +0000
- Parent:
- 16:28d062c5522b
- Child:
- 18:07a79d8f01c3
- Commit message:
- Make sure QoS 2 works
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C027.h Mon Jul 27 09:16:08 2015 +0000 @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial implementation + *******************************************************************************/ + +#if !defined(K64F_H) +#define K64F_H + +C12832 lcd(D11, D13, D12, D7, D10); +PwmOut r(D5); +PwmOut g(D9); +PwmOut b(D8); +DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); +DigitalIn Up(A2); DigitalIn Down(A3); DigitalIn Left(A4); DigitalIn Right(A5); DigitalIn Click(D4); +AnalogIn ain1 (A0); AnalogIn ain2 (A1); + +#define LED2_OFF 0 +#define LED2_ON 1 + +#define DEFAULT_TYPE_NAME "iotsample-mbed-c027" + +#include "lpc_phy.h" +// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods +static uint32_t linkStatus(void) +{ + return (lpc_mii_read_data() & 1); +} + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/K64F.h Mon Jul 27 09:16:08 2015 +0000 @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial implementation + * Sam Grove - added method to check the status of the Ethernet cable + *******************************************************************************/ + +#if !defined(K64F_H) +#define K64F_H + +C12832 lcd(D11, D13, D12, D7, D10); +BusOut led2 (LED_BLUE); +BusOut r (D5); +BusOut g (D9); +BusOut b (D8); +DigitalIn Up(A2); DigitalIn Down(A3); DigitalIn Right(A4); DigitalIn Left(A5); DigitalIn Click(D4); +AnalogIn ain1(A0); AnalogIn ain2(A1); + +#define LED2_OFF 1 +#define LED2_ON 0 + +#define DEFAULT_TYPE_NAME "iotsample-mbed-k64f" + +//#include "lpc_phy.h" +// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods +static uint32_t linkStatus(void) +{ + return (1); +} + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC1768.h Mon Jul 27 09:16:08 2015 +0000 @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial implementation + * Sam Grove - added mehtod to check the status of the Ethernet cable + *******************************************************************************/ + +#if !defined(LPC1768_H) +#define LPC1768_H + +C12832 lcd(p5, p7, p6, p8, p11); +DigitalOut led2(LED2); +PwmOut r(p23); +PwmOut g(p24); +PwmOut b(p25); +DigitalIn Down(p12); +DigitalIn Left(p13); +DigitalIn Click(p14); +DigitalIn Up(p15); +DigitalIn Right(p16); +AnalogIn ain1(p19); +AnalogIn ain2(p20); + +#define LED2_OFF 0 +#define LED2_ON 1 + +#define DEFAULT_TYPE_NAME "iotsample-mbed-lpc1768" + +#include "lpc_phy.h" +// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods +static uint32_t linkStatus(void) +{ + return (lpc_mii_read_data() & 1); +} + +#endif \ No newline at end of file
--- a/main.cpp Mon Oct 06 11:42:25 2014 +0000 +++ b/main.cpp Mon Jul 27 09:16:08 2015 +0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014 IBM Corp. + * Copyright (c) 2014, 2015 IBM Corp. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -12,6 +12,7 @@ * * Contributors: * Ian Craggs - initial API and implementation and/or initial documentation + * Ian Craggs - make sure QoS2 processing works, and add device headers *******************************************************************************/ /** @@ -24,9 +25,20 @@ */ +#include "C12832.h" -#include "C12832.h" -C12832 lcd(p5, p7, p6, p8, p11); +#if defined(TARGET_UBLOX_C027) +#warning "Compiling for mbed C027" +#include "C027.h" +#elif defined(TARGET_LPC1768) +#warning "Compiling for mbed LPC1768" +#include "LPC1768.h" +#elif defined(TARGET_K64F) +#warning "Compiling for mbed K64F" +#include "K64F.h" +#endif + +#define MQTTCLIENT_QOS2 1 #include "MQTTEthernet.h" #include "MQTTClient.h" @@ -37,11 +49,10 @@ void messageArrived(MQTT::MessageData& md) { MQTT::Message &message = md.message; - lcd.cls(); - lcd.locate(0,3); 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; + lcd.cls(); lcd.puts((char*)message.payload); } @@ -49,20 +60,24 @@ int main(int argc, char* argv[]) { MQTTEthernet ipstack = MQTTEthernet(); - float version = 0.47; + float version = 0.5; char* topic = "mbed-sample"; - lcd.printf("Version is %f\n", version); - printf("Version is %f\n", version); + lcd.cls(); + lcd.printf("HelloMQTT: version is %f\n", version); MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); char* hostname = "m2m.eclipse.org"; int port = 1883; + lcd.cls(); lcd.printf("Connecting to %s:%d\n", hostname, port); int rc = ipstack.connect(hostname, port); if (rc != 0) + { + lcd.cls(); lcd.printf("rc from TCP connect is %d\n", rc); + } MQTTPacket_connectData data = MQTTPacket_connectData_initializer; data.MQTTVersion = 3; @@ -70,10 +85,16 @@ data.username.cstring = "testuser"; data.password.cstring = "testpassword"; if ((rc = client.connect(data)) != 0) + { + lcd.cls(); lcd.printf("rc from MQTT connect is %d\n", rc); + } if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0) + { + lcd.cls(); lcd.printf("rc from MQTT subscribe is %d\n", rc); + } MQTT::Message message; @@ -104,30 +125,23 @@ rc = client.publish(topic, message); while (arrivedcount < 3) client.yield(100); - - // n * QoS 2 - for (int i = 1; i <= 10; ++i) + + if ((rc = client.unsubscribe(topic)) != 0) { - sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\n", i, version); - message.qos = MQTT::QOS2; - message.payloadlen = strlen(buf)+1; - rc = client.publish(topic, message); - while (arrivedcount < i + 3) - client.yield(100); + lcd.cls(); + lcd.printf("rc from unsubscribe was %d\n", rc); } - if ((rc = client.unsubscribe(topic)) != 0) - printf("rc from unsubscribe was %d\n", rc); - if ((rc = client.disconnect()) != 0) - printf("rc from disconnect was %d\n", rc); + { + lcd.cls(); + lcd.printf("rc from disconnect was %d\n", rc); + } ipstack.disconnect(); lcd.cls(); - lcd.locate(0,3); lcd.printf("Version %.2f: finish %d msgs\n", version, arrivedcount); - printf("Finishing with %d messages received\n", arrivedcount); return 0; }