diff --git a/PubSubClient/PubSubClient.cpp b/PubSubClient/PubSubClient.cpp index 2b8c196..16c16d0 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) { @@ -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