MBED_DEMOS / Mbed 2 deprecated mbed_mqtt_endpoint_ublox_ethernet

Dependencies:   C027 C12832 EthernetInterface StatusReporter LM75B MQTT-ansond endpoint_core endpoint_mqtt mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
ansond
Date:
Wed Feb 26 07:22:34 2014 +0000
Parent:
5:4ad5ec5802a2
Child:
7:f570eb3f38cd
Commit message:
updates

Changed in this revision

MBEDEndpoint.cpp Show annotated file Show diff for this revision Revisions of this file
MQTTTransport.cpp Show annotated file Show diff for this revision Revisions of this file
MQTTTransport.h Show annotated file Show diff for this revision Revisions of this file
endpoint_core.lib Show annotated file Show diff for this revision Revisions of this file
--- 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