From 9607eefa0fbdda698efe538c5537340b58eb3812 Mon Sep 17 00:00:00 2001 From: Joby Taffey Date: Fri, 13 Jul 2012 16:41:31 +0100 Subject: [PATCH] Added publish_P, for publishing a message from PROGMEM. Message can be any size. --- PubSubClient/PubSubClient.cpp | 46 +++++++++++++++++++++++++++++++++++ PubSubClient/PubSubClient.h | 1 + 2 files changed, 47 insertions(+) diff --git a/PubSubClient/PubSubClient.cpp b/PubSubClient/PubSubClient.cpp index da13dc0..16c16d0 100755 --- a/PubSubClient/PubSubClient.cpp +++ b/PubSubClient/PubSubClient.cpp @@ -210,6 +210,52 @@ boolean PubSubClient::publish(char* topic, uint8_t* payload, unsigned int plengt return false; } +boolean PubSubClient::publish_P(char* topic, uint8_t* PROGMEM payload, unsigned int plength, boolean retained) { + uint8_t lenBuf[4]; + uint8_t llen = 0; + uint8_t digit; + int rc; + uint16_t tlen; + int pos = 0; + int i; + uint8_t header; + unsigned int len; + + if (!connected()) + return false; + + tlen = strlen(topic); + + header = MQTTPUBLISH; + if (retained) + header |= 1; + + len = plength + 2 + tlen; + do { + digit = len % 128; + len = len / 128; + if (len > 0) { + digit |= 0x80; + } + lenBuf[pos++] = digit; + llen++; + } while(len>0); + + rc += _client.write(&header, 1); + rc += _client.write(lenBuf, llen); + + lenBuf[0] = tlen >> 8; // MSB + lenBuf[1] = tlen & 0xFF; // LSB + + rc += _client.write(lenBuf, 2); + rc += _client.write((uint8_t *)topic, tlen); + + for (i=0;i