MBED_DEMOS / Mbed 2 deprecated mbed_mqtt_endpoint_ublox_cellular

Dependencies:   C027_Support C12832 StatusReporter LM75B MQTT-ansond c027_radios endpoint_core endpoint_mqtt mbed-rtos mbed

Revision:
136:ea8f3900bc13
Parent:
133:e69d03f4eb5c
Child:
148:b09187a0fa77
diff -r 662f96c35bfa -r ea8f3900bc13 MQTTTransport.cpp
--- a/MQTTTransport.cpp	Mon Mar 17 05:07:39 2014 +0000
+++ b/MQTTTransport.cpp	Mon Mar 17 17:05:49 2014 +0000
@@ -16,6 +16,9 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
  
+ #include "mbed.h"
+ #include "rtos.h"
+ 
  #include "MQTTTransport.h"
  
  // Endpoint Support
@@ -23,6 +26,9 @@
  
  // EmulatedResourceFactory support
  #include "EmulatedResourceFactory.h"
+ 
+ // Network mutex
+ extern Mutex *network_mutex;
   
  // our transmitt instance 
  MQTTTransport *_mqtt_instance =  NULL;
@@ -254,7 +260,9 @@
          memset(message,0,MAX_MQTT_MESSAGE_LENGTH+1);
          char *str_success = IOC_RESPONSE_OK; if (!success) str_success = IOC_RESPONSE_FAILED;
          sprintf(message,IOC_RESPONSE_TEMPLATE,IOC_RESPONSE_VERB,endpoint_name,resource_name,value,str_success);
+         if (network_mutex != NULL) network_mutex->lock();
          bool sent = this->m_mqtt->publish(this->getTopic(),message,strlen(message));
+         if (network_mutex != NULL) network_mutex->unlock();
          if (sent) {
              this->logger()->log("Result sent successfully");
              this->logger()->blinkTransportTxLED();
@@ -334,7 +342,9 @@
      
      // send the message over the ping/pong topic
      //this->logger()->log("Sending PING: counter=%d",this->m_ping_counter);
+     if (network_mutex != NULL) network_mutex->lock();
      sent = this->m_mqtt->publish(MQTT_PING_SEND_TOPIC,message,strlen(message));
+     if (network_mutex != NULL) network_mutex->unlock();
      if (sent) {
          // send succeeded
          //this->logger()->log("PING %d sent successfully",this->m_ping_counter);
@@ -359,6 +369,7 @@
  
  // connect up MQTT
  bool MQTTTransport::connect() {
+     if (network_mutex != NULL) network_mutex->lock();
      char mqtt_id[MQTT_ENDPOINT_IDLEN+1];
      memset(mqtt_id,0,(MQTT_ENDPOINT_IDLEN+1));
      if (this->m_connected == false) {
@@ -394,6 +405,7 @@
      else {
          this->logger()->log("MQTT already connected (OK)");
      }
+     if (network_mutex != NULL) network_mutex->unlock();
      return this->m_connected;
  }
  
@@ -401,7 +413,9 @@
  bool MQTTTransport::disconnect() {
      if (this->m_mqtt != NULL) {
          this->logger()->log("MQTT Unsubscribing from: %s...",this->getTopic());
+         if (network_mutex != NULL) network_mutex->lock();
          this->m_mqtt->unsubscribe(this->getTopic());
+         if (network_mutex != NULL) network_mutex->unlock();
          this->logger()->log("MQTT Disconnecting...");
          this->m_mqtt->disconnect();
      }
@@ -416,7 +430,9 @@
  void MQTTTransport::checkAndProcess() {
      // process any MQTT messages
      if (this->m_mqtt != NULL && this->m_connected == true) {
+         if (network_mutex != NULL) network_mutex->lock();
          bool connected = this->m_mqtt->loop();
+         if (network_mutex != NULL) network_mutex->unlock();
          if (connected) {
             this->logger()->blinkTransportRxLED();
          }