diff --git a/PubSubClient/PubSubClient.cpp b/PubSubClient/PubSubClient.cpp index c4da0c5..cb9ca68 100755 --- a/PubSubClient/PubSubClient.cpp +++ b/PubSubClient/PubSubClient.cpp @@ -5,7 +5,6 @@ */ #include "PubSubClient.h" -#include PubSubClient::PubSubClient() { this->_client = NULL; @@ -13,31 +12,73 @@ PubSubClient::PubSubClient() { setCallback(NULL); } -PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, void (*callback)(char*,uint8_t*,unsigned int), Client& client) { +PubSubClient::PubSubClient(IPAddress addr, uint16_t port, Client& client) { + setServer(addr, port); setClient(client); - setCallback(callback); - setServer(ip, port); this->stream = NULL; } - -PubSubClient::PubSubClient(char* domain, uint16_t port, void (*callback)(char*,uint8_t*,unsigned int), Client& client) { +PubSubClient::PubSubClient(IPAddress addr, uint16_t port, Client& client, Stream& stream) { + setServer(addr,port); setClient(client); + setStream(stream); +} +PubSubClient::PubSubClient(IPAddress addr, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) { + setServer(addr, port); setCallback(callback); - setServer(domain,port); + setClient(client); this->stream = NULL; } - -PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, void (*callback)(char*,uint8_t*,unsigned int), Client& client, Stream& stream) { - setClient(client); +PubSubClient::PubSubClient(IPAddress addr, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) { + setServer(addr,port); setCallback(callback); - setServer(ip,port); + setClient(client); setStream(stream); } -PubSubClient::PubSubClient(char* domain, uint16_t port, void (*callback)(char*,uint8_t*,unsigned int), Client& client, Stream& stream) { + +PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, Client& client) { + setServer(ip, port); setClient(client); + this->stream = NULL; +} +PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, Client& client, Stream& stream) { + setServer(ip,port); + setClient(client); + setStream(stream); +} +PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) { + setServer(ip, port); setCallback(callback); + setClient(client); + this->stream = NULL; +} +PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) { + setServer(ip,port); + setCallback(callback); + setClient(client); + setStream(stream); +} + +PubSubClient::PubSubClient(char* domain, uint16_t port, Client& client) { setServer(domain,port); + setClient(client); + this->stream = NULL; +} +PubSubClient::PubSubClient(char* domain, uint16_t port, Client& client, Stream& stream) { + setServer(domain,port); + setClient(client); + setStream(stream); +} +PubSubClient::PubSubClient(char* domain, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) { + setServer(domain,port); + setCallback(callback); + setClient(client); + this->stream = NULL; +} +PubSubClient::PubSubClient(char* domain, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) { + setServer(domain,port); + setCallback(callback); + setClient(client); setStream(stream); } @@ -49,8 +90,7 @@ boolean PubSubClient::connect(char *id, char *user, char *pass) { return connect(id,user,pass,0,0,0,0); } -boolean PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t willRetain, char* willMessage) -{ +boolean PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t willRetain, char* willMessage) { return connect(id,NULL,NULL,willTopic,willQos,willRetain,willMessage); } @@ -63,7 +103,6 @@ boolean PubSubClient::connect(char *id, char *user, char *pass, char* willTopic, } else { result = _client->connect(this->ip, this->port); } - if (result) { nextMsgId = 1; // Leave room in the buffer for header and variable length field @@ -429,6 +468,11 @@ boolean PubSubClient::connected() { } void PubSubClient::setServer(uint8_t * ip, uint16_t port) { + IPAddress addr(ip[0],ip[1],ip[2],ip[3]); + setServer(addr,port); +} + +void PubSubClient::setServer(IPAddress ip, uint16_t port) { this->ip = ip; this->port = port; } diff --git a/PubSubClient/PubSubClient.h b/PubSubClient/PubSubClient.h index 3e5dbdd..f472774 100755 --- a/PubSubClient/PubSubClient.h +++ b/PubSubClient/PubSubClient.h @@ -8,6 +8,7 @@ #define PubSubClient_h #include +#include "IPAddress.h" #include "Client.h" #include "Stream.h" @@ -43,6 +44,8 @@ #define MQTTQOS1 (1 << 1) #define MQTTQOS2 (2 << 1) +#define MQTT_CALLBACK_SIGNATURE void (*callback)(char*,uint8_t*,unsigned int) + class PubSubClient { private: Client* _client; @@ -51,25 +54,34 @@ private: unsigned long lastOutActivity; unsigned long lastInActivity; bool pingOutstanding; - void (*callback)(char*,uint8_t*,unsigned int); + MQTT_CALLBACK_SIGNATURE; uint16_t readPacket(uint8_t*); uint8_t readByte(); boolean write(uint8_t header, uint8_t* buf, uint16_t length); uint16_t writeString(char* string, uint8_t* buf, uint16_t pos); - uint8_t *ip; + IPAddress ip; char* domain; uint16_t port; Stream* stream; public: PubSubClient(); - PubSubClient(uint8_t *, uint16_t, void(*)(char*,uint8_t*,unsigned int),Client& client); - PubSubClient(uint8_t *, uint16_t, void(*)(char*,uint8_t*,unsigned int),Client& client, Stream&); - PubSubClient(char*, uint16_t, void(*)(char*,uint8_t*,unsigned int),Client& client); - PubSubClient(char*, uint16_t, void(*)(char*,uint8_t*,unsigned int),Client& client, Stream&); + PubSubClient(IPAddress, uint16_t, Client& client); + PubSubClient(IPAddress, uint16_t, Client& client, Stream&); + PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client); + PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&); + PubSubClient(uint8_t *, uint16_t, Client& client); + PubSubClient(uint8_t *, uint16_t, Client& client, Stream&); + PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client); + PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&); + PubSubClient(char*, uint16_t, Client& client); + PubSubClient(char*, uint16_t, Client& client, Stream&); + PubSubClient(char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client); + PubSubClient(char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&); + void setServer(IPAddress ip, uint16_t port); void setServer(uint8_t * ip, uint16_t port); void setServer(char * domain, uint16_t port); - void setCallback(void(*callback)(char*,uint8_t*,unsigned int)); + void setCallback(MQTT_CALLBACK_SIGNATURE); void setClient(Client& client); void setStream(Stream& stream); diff --git a/PubSubClient/examples/mqtt_auth/mqtt_auth.ino b/PubSubClient/examples/mqtt_auth/mqtt_auth.ino index c8a519a..f4c38f3 100755 --- a/PubSubClient/examples/mqtt_auth/mqtt_auth.ino +++ b/PubSubClient/examples/mqtt_auth/mqtt_auth.ino @@ -1,6 +1,6 @@ /* Basic MQTT example with Authentication - + - connects to an MQTT server, providing username and password - publishes "hello world" to the topic "outTopic" @@ -13,8 +13,8 @@ // Update these with values suitable for your network. byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -byte server[] = { 172, 16, 0, 2 }; -byte ip[] = { 172, 16, 0, 100 }; +IPAddress ip(172, 16, 0, 100); +IPAddress server(172, 16, 0, 2); void callback(char* topic, byte* payload, unsigned int length) { // handle message arrived @@ -36,4 +36,3 @@ void loop() { client.loop(); } - diff --git a/PubSubClient/examples/mqtt_basic/mqtt_basic.ino b/PubSubClient/examples/mqtt_basic/mqtt_basic.ino index 72276cd..88e77de 100755 --- a/PubSubClient/examples/mqtt_basic/mqtt_basic.ino +++ b/PubSubClient/examples/mqtt_basic/mqtt_basic.ino @@ -1,6 +1,6 @@ /* - Basic MQTT example - + Basic MQTT example + - connects to an MQTT server - publishes "hello world" to the topic "outTopic" - subscribes to the topic "inTopic" @@ -12,8 +12,8 @@ // Update these with values suitable for your network. byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -byte server[] = { 172, 16, 0, 2 }; -byte ip[] = { 172, 16, 0, 100 }; +IPAddress ip(172, 16, 0, 100); +IPAddress server(172, 16, 0, 2); void callback(char* topic, byte* payload, unsigned int length) { // handle message arrived @@ -35,4 +35,3 @@ void loop() { client.loop(); } - diff --git a/PubSubClient/examples/mqtt_publish_in_callback/mqtt_publish_in_callback.ino b/PubSubClient/examples/mqtt_publish_in_callback/mqtt_publish_in_callback.ino index ece5c2e..42afb2a 100644 --- a/PubSubClient/examples/mqtt_publish_in_callback/mqtt_publish_in_callback.ino +++ b/PubSubClient/examples/mqtt_publish_in_callback/mqtt_publish_in_callback.ino @@ -1,17 +1,17 @@ /* - Publishing in the callback - + Publishing in the callback + - connects to an MQTT server - subscribes to the topic "inTopic" - when a message is received, republishes it to "outTopic" - + This example shows how to publish messages within the callback function. The callback function header needs to - be declared before the PubSubClient constructor and the + be declared before the PubSubClient constructor and the actual callback defined afterwards. This ensures the client reference in the callback function is valid. - + */ #include @@ -20,8 +20,8 @@ // Update these with values suitable for your network. byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -byte server[] = { 172, 16, 0, 2 }; -byte ip[] = { 172, 16, 0, 100 }; +IPAddress ip(172, 16, 0, 100); +IPAddress server(172, 16, 0, 2); // Callback function header void callback(char* topic, byte* payload, unsigned int length); @@ -34,7 +34,7 @@ void callback(char* topic, byte* payload, unsigned int length) { // In order to republish this payload, a copy must be made // as the orignal payload buffer will be overwritten whilst // constructing the PUBLISH packet. - + // Allocate the correct amount of memory for the payload copy byte* p = (byte*)malloc(length); // Copy the payload to the new buffer @@ -46,7 +46,7 @@ void callback(char* topic, byte* payload, unsigned int length) { void setup() { - + Ethernet.begin(mac, ip); if (client.connect("arduinoClient")) { client.publish("outTopic","hello world"); @@ -58,4 +58,3 @@ void loop() { client.loop(); } - diff --git a/PubSubClient/examples/mqtt_stream/mqtt_stream.ino b/PubSubClient/examples/mqtt_stream/mqtt_stream.ino index a416ee2..67c2287 100644 --- a/PubSubClient/examples/mqtt_stream/mqtt_stream.ino +++ b/PubSubClient/examples/mqtt_stream/mqtt_stream.ino @@ -16,8 +16,8 @@ // Update these with values suitable for your network. byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -byte server[] = { 172, 16, 0, 2 }; -byte ip[] = { 172, 16, 0, 100 }; +IPAddress ip(172, 16, 0, 100); +IPAddress server(172, 16, 0, 2); SRAM sram(4, SRAM_1024); @@ -29,7 +29,7 @@ void callback(char* topic, byte* payload, unsigned int length) { Serial.write(sram.read()); } Serial.println(); - + // Reset position for the next message to be stored sram.seek(1); } @@ -47,7 +47,7 @@ void setup() sram.begin(); sram.seek(1); - + Serial.begin(9600); } @@ -55,4 +55,3 @@ void loop() { client.loop(); } -