diff --git a/Adafruit_MQTT.cpp b/Adafruit_MQTT.cpp index 5a9c5f2..261e464 100644 --- a/Adafruit_MQTT.cpp +++ b/Adafruit_MQTT.cpp @@ -26,7 +26,7 @@ void printBuffer(uint8_t *buffer, uint8_t len) { for (uint8_t i=0; i 0) { len = readPacket(buffer, 4, PUBLISH_TIMEOUT_MS); @@ -262,11 +243,11 @@ bool Adafruit_MQTT::ping(uint8_t times) { uint8_t len = pingPacket(buffer); if (!sendPacket(buffer, len)) return false; - + // Process ping reply. len = readPacket(buffer, 2, PING_TIMEOUT_MS); if (buffer[0] == (MQTT_CTRL_PINGRESP << 4)) - return true; + return true; } return false; } @@ -287,7 +268,10 @@ uint8_t Adafruit_MQTT::connectPacket(uint8_t *packet) { p+=2; // fill in packet[1] last - p = stringprint_P(p, PSTR("MQIsdp")); + if(MQTT_PROTOCOL_LEVEL == 3) + p = stringprint_P(p, PSTR("MQIsdp")); + else + p = stringprint_P(p, PSTR("MQTT")); p[0] = MQTT_PROTOCOL_LEVEL; p++; @@ -305,7 +289,13 @@ uint8_t Adafruit_MQTT::connectPacket(uint8_t *packet) { p[0] = MQTT_CONN_KEEPALIVE & 0xFF; p++; - p = stringprint_P(p, clientid, 23); // Limit client ID to first 23 characters. + if(MQTT_PROTOCOL_LEVEL == 3) { + p = stringprint_P(p, clientid, 23); // Limit client ID to first 23 characters. + } else { + if (pgm_read_byte(clientid) != 0) { + p = stringprint_P(p, clientid); + } + } if (pgm_read_byte(username) != 0) { p = stringprint_P(p, username);