From 17eefdf8add5d8a82bc495c831b295255a304ae2 Mon Sep 17 00:00:00 2001 From: Tobias Looker Date: Sat, 18 Nov 2017 14:32:03 +1300 Subject: [PATCH 1/2] Allowing for larger MQTT messages --- Adafruit_MQTT_Client.cpp | 12 ++++++++---- Adafruit_MQTT_Client.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Adafruit_MQTT_Client.cpp b/Adafruit_MQTT_Client.cpp index abcfdbd..9c6dc9f 100644 --- a/Adafruit_MQTT_Client.cpp +++ b/Adafruit_MQTT_Client.cpp @@ -76,16 +76,20 @@ uint16_t Adafruit_MQTT_Client::readPacket(uint8_t *buffer, uint16_t maxlen, bool Adafruit_MQTT_Client::sendPacket(uint8_t *buffer, uint16_t len) { uint16_t ret = 0; - + uint16_t bufferOffset = 0; + //Serial.print("Buffer recieved : "); DebugPrinter::println(len); while (len > 0) { if (client->connected()) { // send 250 bytes at most at a time, can adjust this later based on Client - uint16_t sendlen = min(len, 250); - //Serial.print("Sending: "); Serial.println(sendlen); - ret = client->write(buffer, sendlen); + uint16_t sendlen = min(len, MAX_SINGLE_PACKET_SIZE); + + ret = client->write(buffer + bufferOffset, sendlen); + client->flush(); + //DebugPrinter::println("Sent"); DEBUG_PRINT(F("Client sendPacket returned: ")); DEBUG_PRINTLN(ret); len -= ret; + bufferOffset += ret; if (ret != sendlen) { DEBUG_PRINTLN("Failed to send packet."); diff --git a/Adafruit_MQTT_Client.h b/Adafruit_MQTT_Client.h index 12fdac5..0a4fca1 100644 --- a/Adafruit_MQTT_Client.h +++ b/Adafruit_MQTT_Client.h @@ -28,6 +28,7 @@ // How long to delay waiting for new data to be available in readPacket. #define MQTT_CLIENT_READINTERVAL_MS 10 +#define MAX_SINGLE_PACKET_SIZE 1200 // MQTT client implementation for a generic Arduino Client interface. Can work From fa109473d00a43490d0e6533711cb94e1aca0448 Mon Sep 17 00:00:00 2001 From: Tobias Looker Date: Sat, 18 Nov 2017 14:34:16 +1300 Subject: [PATCH 2/2] Allowing for larger MQTT messages --- Adafruit_MQTT_Client.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Adafruit_MQTT_Client.cpp b/Adafruit_MQTT_Client.cpp index 9c6dc9f..aea43c5 100644 --- a/Adafruit_MQTT_Client.cpp +++ b/Adafruit_MQTT_Client.cpp @@ -77,7 +77,7 @@ uint16_t Adafruit_MQTT_Client::readPacket(uint8_t *buffer, uint16_t maxlen, bool Adafruit_MQTT_Client::sendPacket(uint8_t *buffer, uint16_t len) { uint16_t ret = 0; uint16_t bufferOffset = 0; - //Serial.print("Buffer recieved : "); DebugPrinter::println(len); + //Serial.print("Buffer recieved : "); while (len > 0) { if (client->connected()) { // send 250 bytes at most at a time, can adjust this later based on Client @@ -86,7 +86,6 @@ bool Adafruit_MQTT_Client::sendPacket(uint8_t *buffer, uint16_t len) { ret = client->write(buffer + bufferOffset, sendlen); client->flush(); - //DebugPrinter::println("Sent"); DEBUG_PRINT(F("Client sendPacket returned: ")); DEBUG_PRINTLN(ret); len -= ret; bufferOffset += ret;