From 49eda71d177191ed5084a13ec3900ce29a02434c Mon Sep 17 00:00:00 2001 From: Todd Treece Date: Fri, 29 Jul 2016 15:06:54 -0400 Subject: [PATCH] fix io callback scope issue --- Adafruit_MQTT.cpp | 8 ++++++-- Adafruit_MQTT.h | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Adafruit_MQTT.cpp b/Adafruit_MQTT.cpp index 9c8113f..ef99b9a 100644 --- a/Adafruit_MQTT.cpp +++ b/Adafruit_MQTT.cpp @@ -480,7 +480,7 @@ void Adafruit_MQTT::processPackets(int16_t timeout) { else if (sub->callback_io != NULL) { // huh lets do the callback in io mode //serial.print("*** calling io instance callback with : "); serial.println(data); - sub->*callback_io((char *)sub->lastread, sub->datalen); + ((sub->io_feed)->*(sub->callback_io))((char *)sub->lastread, sub->datalen); } } @@ -867,6 +867,7 @@ Adafruit_MQTT_Subscribe::Adafruit_MQTT_Subscribe(Adafruit_MQTT *mqttserver, callback_buffer = 0; callback_double = 0; callback_io = 0; + io_feed = 0; } Adafruit_MQTT_Subscribe::Adafruit_MQTT_Subscribe(Adafruit_MQTT *mqttserver, @@ -878,6 +879,7 @@ Adafruit_MQTT_Subscribe::Adafruit_MQTT_Subscribe(Adafruit_MQTT *mqttserver, callback_uint32t = 0; callback_buffer = 0; callback_io = 0; + io_feed = 0; } void Adafruit_MQTT_Subscribe::setCallback(SubscribeCallbackUInt32Type cb) { @@ -892,8 +894,9 @@ void Adafruit_MQTT_Subscribe::setCallback(SubscribeCallbackBufferType cb) { callback_buffer = cb; } -void Adafruit_MQTT_Subscribe::setCallback(SubscribeCallbackIOType cb) { +void Adafruit_MQTT_Subscribe::setCallback(AdafruitIO_Feed *f, SubscribeCallbackIOType cb) { callback_io = cb; + io_feed = f; } void Adafruit_MQTT_Subscribe::removeCallback(void) { @@ -901,4 +904,5 @@ void Adafruit_MQTT_Subscribe::removeCallback(void) { callback_buffer = 0; callback_double = 0; callback_io = 0; + io_feed = 0; } diff --git a/Adafruit_MQTT.h b/Adafruit_MQTT.h index 169613b..9ede49c 100644 --- a/Adafruit_MQTT.h +++ b/Adafruit_MQTT.h @@ -288,7 +288,7 @@ class Adafruit_MQTT_Subscribe { void setCallback(SubscribeCallbackUInt32Type callb); void setCallback(SubscribeCallbackDoubleType callb); void setCallback(SubscribeCallbackBufferType callb); - void setCallback(SubscribeCallbackIOType callb); + void setCallback(AdafruitIO_Feed *io, SubscribeCallbackIOType callb); void removeCallback(void); const char *topic; @@ -304,6 +304,8 @@ class Adafruit_MQTT_Subscribe { SubscribeCallbackBufferType callback_buffer; SubscribeCallbackIOType callback_io; + AdafruitIO_Feed *io_feed; + private: Adafruit_MQTT *mqtt; };