From 62693d406cafa588705fefa136e2b2faab09e028 Mon Sep 17 00:00:00 2001 From: Joby Taffey Date: Fri, 13 Jul 2012 16:34:45 +0100 Subject: [PATCH 1/2] Allow setting of a will without also setting a username and password. --- PubSubClient/PubSubClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PubSubClient/PubSubClient.cpp b/PubSubClient/PubSubClient.cpp index 2b8c196..da13dc0 100755 --- a/PubSubClient/PubSubClient.cpp +++ b/PubSubClient/PubSubClient.cpp @@ -33,7 +33,7 @@ boolean PubSubClient::connect(char *id, char *user, char *pass) { boolean PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t willRetain, char* willMessage) { - return connect(id,NULL,NULL,0,0,0,0); + return connect(id,NULL,NULL,willTopic,willQos,willRetain,willMessage); } boolean PubSubClient::connect(char *id, char *user, char *pass, char* willTopic, uint8_t willQos, uint8_t willRetain, char* willMessage) { From 9607eefa0fbdda698efe538c5537340b58eb3812 Mon Sep 17 00:00:00 2001 From: Joby Taffey Date: Fri, 13 Jul 2012 16:41:31 +0100 Subject: [PATCH 2/2] 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