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
Diff: MQTTTransport.cpp
- Revision:
- 6:34c07e145caa
- Parent:
- 5:4ad5ec5802a2
- Child:
- 7:f570eb3f38cd
diff -r 4ad5ec5802a2 -r 34c07e145caa MQTTTransport.cpp
--- 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];