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_Support C12832 StatusReporter LM75B MQTT-ansond c027_radios endpoint_core endpoint_mqtt mbed-rtos mbed
Diff: MQTTTransport.cpp
- 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();
}