Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832 EthernetInterface LM75B MMA7660 MQTT mbed-rtos mbed
Fork of IBMIoTClientEthernetExample by
Diff: main.cpp
- Revision:
- 14:1f961d19f3cf
- Parent:
- 13:85801e3b83d3
- Child:
- 15:09458079f4bb
diff -r 85801e3b83d3 -r 1f961d19f3cf main.cpp
--- a/main.cpp Wed Jul 22 13:51:22 2015 +0000
+++ b/main.cpp Fri Jul 24 15:40:33 2015 +0000
@@ -28,8 +28,6 @@
#include "C12832.h"
#include "Arial12x12.h"
#include "rtos.h"
-#include <string>
-#include <iostream>
// Update this to the next number *before* a commit
#define __APP_SW_REVISION__ "11"
@@ -57,6 +55,7 @@
#include "K64F.h"
#endif
+
bool quickstartMode = true;
char org[11] = ORG;
char type[30] = TYPE;
@@ -64,12 +63,42 @@
char auth_token[30] = AUTH_TOKEN; // Auth_token is only used in non-quickstart mode
bool connected = false;
+bool mqttConnecting = false;
+bool netConnected = false;
+bool netConnecting = false;
+bool ethernetInitialising = true;
+int retryAttempt = 0;
+int menuItem = 0;
+
char* joystickPos = "CENTRE";
int blink_interval = 0;
char* ip_addr = "";
char* gateway_addr = "";
-bool netConnected = false;
+char* host_addr = "";
+int connectTimeout = 1000;
+
+// If we wanted to manually set the MAC address,
+// this is how to do it. In this example, we take
+// the original Mbed Set MAC address and combine it
+// with a prefix of our choosing.
+ /*
+extern "C" void $Super$$mbed_mac_address(char *s);
+extern "C" void $Sub$$mbed_mac_address(char *s)
+{
+ char otherMac[6] = "";
+ $Super$$mbed_mac_address(otherMac);
+
+ char mac[6];
+ mac[0] = 0x00;
+ mac[1] = 0x08;
+ mac[2] = 0xdc;
+ mac[3] = otherMac[3];
+ mac[4] = otherMac[4];
+ mac[5] = otherMac[5];
+ memcpy(s, mac, 6);
+}
+*/
void off()
@@ -149,39 +178,57 @@
case 3:
lcd.printf("MQTT Status:");
lcd.locate(0,16);
- lcd.printf(connected ? "Connected" : "Disconnected");
+ if(mqttConnecting){
+ lcd.printf("Connecting... %d/5", retryAttempt);
+ } else {
+ lcd.printf(connected ? "Connected" : "Disconnected");
+ }
break;
case 4:
+ lcd.printf("Ethernet State:");
+ lcd.locate(0,16);
+ lcd.printf(ethernetInitialising ? "Initialising..." : "Initialised");
+ break;
+ case 5:
lcd.printf("Socket State:");
lcd.locate(0,16);
- lcd.printf(netConnected ? "Connected" : "Disconnected");
+ if(netConnecting){
+ lcd.printf("Connecting... %d/5", retryAttempt);
+ } else {
+ lcd.printf(netConnected ? "Connected" : "Disconnected");
+ }
break;
- case 5:
+ case 6:
lcd.printf("IP Address:");
lcd.locate(0,16);
lcd.printf("%s", ip_addr);
break;
- case 6:
+ case 7:
lcd.printf("Gateway:");
lcd.locate(0,16);
lcd.printf("%s",gateway_addr);
break;
- case 7:
+ case 8:
lcd.printf("App version:");
lcd.locate(0,16);
lcd.printf("%s",__APP_SW_REVISION__);
break;
+ case 9:
+ lcd.printf("Current Timeout:");
+ lcd.locate(0,16);
+ lcd.printf("%d ms",connectTimeout);
+ break;
}
}
void setMenu()
{
- static int menuItem = 0;
+
if (Down)
{
joystickPos = "DOWN";
- if (menuItem >= 0 && menuItem < 7)
+ if (menuItem >= 0 && menuItem < 9)
printMenu(++menuItem);
}
else if (Left)
@@ -191,7 +238,7 @@
else if (Up)
{
joystickPos = "UP";
- if (menuItem <= 7 && menuItem > 0)
+ if (menuItem <= 9 && menuItem > 0)
printMenu(--menuItem);
}
else if (Right)
@@ -202,10 +249,16 @@
void menu_loop(void const *args)
{
+ int count = 0;
while(true){
setMenu();
- Thread::wait(100);
+ if(++count % 10 == 0)
+ {
+ printMenu(menuItem);
+ }
+ Thread::wait(100);
}
+
}
@@ -228,25 +281,37 @@
char hostname[strlen(org) + strlen(iot_ibm) + 1];
sprintf(hostname, "%s%s", org, iot_ibm);
- DEBUG("hostname is %s\n", hostname);
EthernetInterface& eth = ipstack->getEth();
ip_addr = eth.getIPAddress();
gateway_addr = eth.getGateway();
- int rc = ipstack->connect(hostname, IBM_IOT_PORT);
+
+ // Construct clientId - d:org:type:id
+ char clientId[strlen(org) + strlen(type) + strlen(id) + 5];
+ sprintf(clientId, "d:%s:%s:%s", org, type, id);
+
+ /* Network debug statements */
+ LOG("=====================================\n");
+ LOG("Connecting Ethernet.\n");
+ LOG("IP ADDRESS: %s\n", eth.getIPAddress());
+ LOG("MAC ADDRESS: %s\n", eth.getMACAddress());
+ LOG("Gateway: %s\n", eth.getGateway());
+ LOG("Network Mask: %s\n", eth.getNetworkMask());
+ LOG("Server Hostname: %s\n", hostname);
+ LOG("Client ID: %s\n", clientId);
+ LOG("=====================================\n");
+
+ netConnecting = true;
+ int rc = ipstack->connect(hostname, IBM_IOT_PORT, connectTimeout);
if (rc != 0){
WARN("IP Stack returned: %d\n", rc);
return rc;
}
netConnected = true;
+ netConnecting = false;
-
-
- // Construct clientId - d:org:type:id
- char clientId[strlen(org) + strlen(type) + strlen(id) + 5];
- sprintf(clientId, "d:%s:%s:%s", org, type, id);
- DEBUG("clientid is %s\n", clientId);
-
+
// MQTT Connect
+ mqttConnecting = true;
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.MQTTVersion = 3;
data.clientID.cstring = clientId;
@@ -266,6 +331,7 @@
displayMessage("Scroll with joystick");
}
+ mqttConnecting = false;
return rc;
}
@@ -279,7 +345,7 @@
void attemptConnect(MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTEthernet* ipstack)
{
- int retryAttempt = 0;
+
connected = false;
// make sure a cable is connected before starting to connect
@@ -386,19 +452,18 @@
Thread yellow_thread(flashing_yellow);
Thread menu_thread(menu_loop);
- printf("connecting...");
+ LOG("***** IBM IoT Client Ethernet Example *****\n");
MQTTEthernet ipstack;
-
+ ethernetInitialising = false;
MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack);
+ LOG("Ethernet Initialised.\n");
if (quickstartMode)
{
getMac(ipstack.getEth(), id, sizeof(id));
}
-
attemptConnect(&client, &ipstack);
-
if (!quickstartMode)
{
int rc = 0;
@@ -421,8 +486,6 @@
led2 = LED2_OFF;
else if (count % blink_interval == 0)
led2 = !led2;
- //if (count % 20 == 0)
- // setMenu();
client.yield(10); // allow the MQTT client to receive messages
}
}
