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 6:34c07e145caa, committed 2014-02-26
- Comitter:
- ansond
- Date:
- Wed Feb 26 07:22:34 2014 +0000
- Parent:
- 5:4ad5ec5802a2
- Child:
- 7:f570eb3f38cd
- Commit message:
- updates
Changed in this revision
--- a/MBEDEndpoint.cpp Wed Feb 26 05:45:49 2014 +0000
+++ b/MBEDEndpoint.cpp Wed Feb 26 07:22:34 2014 +0000
@@ -90,7 +90,7 @@
ResourceFactory *MBEDEndpoint::initResourceFactory() { return new EmulatedResourceFactory(this->logger()); }
// get our endpoint name (first light name)
- char *MBEDEndpoint::getEndpointName() { return "light-4"; } // return this->m_lights[0]->getName(); }
+ char *MBEDEndpoint::getEndpointName() { return this->m_lights[0]->getName(); }
// initialize a specific transport
bool MBEDEndpoint::initializeTransport(int index,char *key,Transport *transport) {
@@ -98,6 +98,7 @@
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 {
--- a/MQTTTransport.cpp Wed Feb 26 05:45:49 2014 +0000
+++ b/MQTTTransport.cpp Wed Feb 26 07:22:34 2014 +0000
@@ -29,7 +29,7 @@
// MQTT callback to handle received messages
void _mqtt_message_handler(char *topic,char *payload,unsigned int length) {
- if (instance != NULL) instance->processMessage((char *)payload,length);
+ if (instance != NULL) instance->processMessage(instance->getEndpointNameFromTopic(topic),payload,length);
}
// our MQTT client endpoint
@@ -48,44 +48,54 @@
if (this->m_mqtt != NULL) delete this->m_mqtt;
}
+ // pull the endpoint name from the MQTT topic
+ char *MQTTTransport::getEndpointNameFromTopic(char *topic) {
+ memset(this->m_endpoint_name,0,LIGHT_NAME_LEN+1);
+
+ // XXX until we get the splitter working, lets just default this name
+ char *tmp = ((MBEDEndpoint *)this->getEndpoint())->getEndpointName();
+ strncpy(this->m_endpoint_name,tmp,strlen(tmp));
+
+ // DEBUG
+ if (tmp == NULL) this->logger()->log("ERROR! endpointName is NULL");
+ else this->logger()->log("TMP: %s length=%d",tmp,strlen(tmp));
+
+ return this->m_endpoint_name;
+ }
+
// process a MQTT Message
- void MQTTTransport::processMessage(char *payload, unsigned int len) {
+ void MQTTTransport::processMessage(char *message_name,char *payload, unsigned int len) {
char *message_type = NULL;
- char *message_name = NULL;
char *message_verb = NULL;
char *message_value = NULL;
char *message_opt = NULL;
char *endpoint_name = NULL;
+
+ // get our endpoint
MBEDEndpoint *endpoint = (MBEDEndpoint *)this->getEndpoint();
+ char buffer[129];
+ memset(buffer,0,129);
+ memcpy(buffer,payload,len);
+
// DEBUG
- this->logger()->pause("MQTT Message: %s length=%d",payload,len);
+ 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(payload,':',this->logger());
+ 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");
-
- // format of the MQTT message: message_type:name:verb|Parameter_X:value|keyword:optional_data
- /*
- if (count > 0) message_type = data[0];
- if (count > 1) message_name = data[1];
- if (count > 2) message_verb = data[2];
- if (count > 3) message_value = data[3];
- if (count > 4) message_opt = data[4];
- */
-
+
// get our endpoint name
this->logger()->pause("DOUG5");
endpoint_name = endpoint->getEndpointName();
- // XXX FIXUP until MQTT messages have endpoint_names in them
+ // format of the MQTT message: message_type:verb|Parameter_X:value|keyword:optional_data
if (count > 0) message_type = data[0];
- message_name = endpoint->getEndpointName(); // if (count > 1) message_name = (char *)data[1].c_str();
if (count > 1) message_verb = data[1];
if (count > 2) message_value = data[2];
if (count > 3) message_opt = data[3];
--- a/MQTTTransport.h Wed Feb 26 05:45:49 2014 +0000
+++ b/MQTTTransport.h Wed Feb 26 07:22:34 2014 +0000
@@ -32,17 +32,20 @@
private:
PubSubClient *m_mqtt;
MBEDToIOCResourceMap *m_map;
+ char m_endpoint_name[LIGHT_NAME_LEN+1];
public:
MQTTTransport(ErrorHandler *error_handler);
virtual ~MQTTTransport();
- void processMessage(char *payload, unsigned int len);
+ void processMessage(char *message_name,char *payload, unsigned int len);
virtual bool connect();
virtual bool disconnect();
virtual void checkAndProcess();
+
+ char *getEndpointNameFromTopic(char *topic);
private:
char *makeID(char *id_template, char *buffer);
--- a/endpoint_core.lib Wed Feb 26 05:45:49 2014 +0000 +++ b/endpoint_core.lib Wed Feb 26 07:22:34 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/ansond/code/endpoint_core/#bc165829bb88 +http://mbed.org/users/ansond/code/endpoint_core/#0e62467605e9