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: C027 C12832 EthernetInterface StatusReporter LM75B MQTT-ansond endpoint_core endpoint_mqtt mbed-rtos mbed
Revision 7:f570eb3f38cd, committed 2014-02-26
- Comitter:
- ansond
- Date:
- Wed Feb 26 18:59:08 2014 +0000
- Parent:
- 6:34c07e145caa
- Child:
- 8:45f9a920e82c
- Commit message:
- updates
Changed in this revision
--- a/HTTPTransport.cpp Wed Feb 26 07:22:34 2014 +0000
+++ b/HTTPTransport.cpp Wed Feb 26 18:59:08 2014 +0000
@@ -22,7 +22,7 @@
HTTPClient _http;
// default constructor
- HTTPTransport::HTTPTransport(ErrorHandler *error_handler) : Transport(error_handler) {
+ HTTPTransport::HTTPTransport(ErrorHandler *error_handler,void *endpoint) : Transport(error_handler,endpoint) {
this->m_http = &_http;
this->m_connected = true;
}
--- a/HTTPTransport.h Wed Feb 26 07:22:34 2014 +0000
+++ b/HTTPTransport.h Wed Feb 26 18:59:08 2014 +0000
@@ -30,7 +30,7 @@
HTTPClient *m_http;
public:
- HTTPTransport(ErrorHandler *error_handler);
+ HTTPTransport(ErrorHandler *error_handler,void *endpoint);
virtual ~HTTPTransport();
bool httpGet(char *url,char *result,int result_length);
--- a/MBEDEndpoint.cpp Wed Feb 26 07:22:34 2014 +0000
+++ b/MBEDEndpoint.cpp Wed Feb 26 18:59:08 2014 +0000
@@ -28,6 +28,9 @@
// Emulated Actions we can act on
#include "EmulatedLightDimmerAction.h"
#include "EmulatedLightSwitchAction.h"
+
+ // shutdown endpoint reference
+ extern void closedown(int code);
// default constructor
MBEDEndpoint::MBEDEndpoint(ErrorHandler *error_handler,EthernetInterface *ethernet) {
@@ -41,7 +44,7 @@
if (success) success = this->initializeTransports();
if (success) success = this->initializeLights();
if (success) this->logger()->turnLEDGreen();
- if (!success) this->logger()->turnLEDRed();
+ if (!success) closedown(2);
}
// default destructor
@@ -98,7 +101,6 @@
if (this->m_transports[index] == NULL) {
this->logger()->log("Initializing %s Transport...", key);
this->m_transports[index] = transport;
- transport->setEndpoint(this);
if (this->m_transports[index] != NULL) success = this->m_transports[index]->connect();
}
else {
@@ -114,12 +116,12 @@
if (success == true) {
// MQTT Initialization
- success = this->initializeTransport(MQTT_TRANSPORT,"MQTT",new MQTTTransport(this->m_error_handler));
+ success = this->initializeTransport(MQTT_TRANSPORT,"MQTT",new MQTTTransport(this->m_error_handler,this));
}
if (success == true) {
// HTTP Initialization
- success = this->initializeTransport(HTTP_TRANSPORT,"HTTP",new HTTPTransport(this->m_error_handler));
+ success = this->initializeTransport(HTTP_TRANSPORT,"HTTP",new HTTPTransport(this->m_error_handler,this));
}
return success;
}
--- a/MQTTTransport.cpp Wed Feb 26 07:22:34 2014 +0000
+++ b/MQTTTransport.cpp Wed Feb 26 18:59:08 2014 +0000
@@ -21,8 +21,8 @@
// Endpoint Support
#include "MBEDEndpoint.h"
- // string splitter support
- #include "Splitter.h"
+ // splitstring support
+ #include "splitstring.h"
// our transmitt instance
MQTTTransport *instance = NULL;
@@ -36,10 +36,10 @@
PubSubClient _mqtt(MQTT_HOSTNAME,MQTT_HOSTPORT,_mqtt_message_handler);
// default constructor
- MQTTTransport::MQTTTransport(ErrorHandler *error_handler) : Transport(error_handler) {
+ MQTTTransport::MQTTTransport(ErrorHandler *error_handler,void *endpoint) : Transport(error_handler,endpoint) {
this->m_mqtt = NULL;
instance = this;
- this->m_map = new MBEDToIOCResourceMap();
+ this->m_map = new MBEDToIOCResourceMap(error_handler);
}
// default destructor
@@ -65,49 +65,44 @@
// process a MQTT Message
void MQTTTransport::processMessage(char *message_name,char *payload, unsigned int len) {
- char *message_type = NULL;
- char *message_verb = NULL;
- char *message_value = NULL;
- char *message_opt = NULL;
- char *endpoint_name = NULL;
+ char *message_type = "";
+ char *message_verb = "";
+ char *message_value = "";
+ char *message_opt = "";
+
+ bool enable = true;
// get our endpoint
MBEDEndpoint *endpoint = (MBEDEndpoint *)this->getEndpoint();
-
- char buffer[129];
- memset(buffer,0,129);
- memcpy(buffer,payload,len);
+ char *endpoint_name = endpoint->getEndpointName();
// DEBUG
- this->logger()->pause("MQTT Message: %s length=%d endpoint_name=%s",buffer,len,message_name);
-
- // split the string by the delimiter
- this->logger()->pause("DOUG1");
- Splitter *splitter = new Splitter(buffer,':',this->logger());
- this->logger()->pause("DOUG2");
- char** data = splitter->split();
- this->logger()->pause("DOUG3");
- int count = splitter->size(data);
- this->logger()->pause("DOUG4");
-
- // get our endpoint name
- this->logger()->pause("DOUG5");
- endpoint_name = endpoint->getEndpointName();
-
- // format of the MQTT message: message_type:verb|Parameter_X:value|keyword:optional_data
- if (count > 0) message_type = data[0];
- if (count > 1) message_verb = data[1];
- if (count > 2) message_value = data[2];
- if (count > 3) message_opt = data[3];
-
- // DEBUG
- this->logger()->log("Type: %s Name: %s Verb: %s Value: %s",message_type,message_name,message_verb,message_value);
-
+ this->logger()->pause("MQTT Message: %s length=%d endpoint_name=%s",payload,len,message_name);
+
// only respond if its for our node
- if (false && strcmp(endpoint_name,message_name) == 0) {
+ if (enable && strcmp(endpoint_name,message_name) == 0) {
// DEBUG
this->logger()->log("Message: %s bound for %s... processing...",payload,endpoint_name);
-
+
+ // format of the MQTT message: message_type:verb|Parameter_X:value|keyword:optional_data
+ splitstring *tmp = new splitstring(payload);
+ this->logger()->pause("DOUG1");
+ vector<string> data = tmp->split(':');
+ this->logger()->pause("DOUG2");
+ if (data.size() > 0) message_type = (char *)data[0].c_str();
+ this->logger()->pause("DOUG3");
+ if (data.size() > 1) message_verb = (char *)data[1].c_str();
+ this->logger()->pause("DOUG4");
+ if (data.size() > 2) message_value = (char *)data[2].c_str();
+ this->logger()->pause("DOUG5");
+ if (data.size() > 3) message_opt = (char *)data[3].c_str();
+ this->logger()->pause("DOUG6");
+
+ // DEBUG
+ this->logger()->log("Type: %s Name: %s Verb: %s Value: %s",message_type,message_name,message_verb,message_value);
+
+ return;
+
// load endpoints
if (message_type != NULL && strcmp(message_type,"Endpoint") == 0) {
if (message_name != NULL && strcmp(message_name,"all") == 0) {
@@ -175,17 +170,17 @@
}
}
}
+
+ // clean up the array
+ //if (data != NULL) splitter->clear(data);
+
+ // clean up
+ //if (splitter != NULL) delete splitter;
}
else {
// message not bound for our node
this->logger()->log("MQTT Message: %s not for us: %s... ignoring...",payload,endpoint_name);
- }
-
- // clean up the array
- if (data != NULL) splitter->clear(data);
-
- // clean up
- if (splitter != NULL) delete splitter;
+ }
}
void MQTTTransport::sendResourceValue(char *endpoint_name,char *parameter_name,char *value) {
@@ -221,16 +216,19 @@
else {
this->logger()->log("MQTT Subscribe: Topic: %s FAILED",MQTT_IOC_TOPIC);
this->logger()->turnLEDRed();
+ this->m_connected = false;
}
}
else {
this->logger()->log("MQTT Connect: ID: %s FAILED",id);
this->logger()->turnLEDRed();
+ this->m_connected = false;
}
}
else {
this->logger()->log("MQTT Unable to allocate new instance");
this->logger()->turnLEDRed();
+ this->m_connected = false;
}
}
else {
--- a/MQTTTransport.h Wed Feb 26 07:22:34 2014 +0000
+++ b/MQTTTransport.h Wed Feb 26 18:59:08 2014 +0000
@@ -35,7 +35,7 @@
char m_endpoint_name[LIGHT_NAME_LEN+1];
public:
- MQTTTransport(ErrorHandler *error_handler);
+ MQTTTransport(ErrorHandler *error_handler,void *endpoint);
virtual ~MQTTTransport();
void processMessage(char *message_name,char *payload, unsigned int len);
--- a/endpoint_core.lib Wed Feb 26 07:22:34 2014 +0000 +++ b/endpoint_core.lib Wed Feb 26 18:59:08 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/ansond/code/endpoint_core/#0e62467605e9 +http://mbed.org/users/ansond/code/endpoint_core/#f2dbbd852e08
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/splitstring.lib Wed Feb 26 18:59:08 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/ansond/code/splitstring/#8b94fff26053