diff --git a/hardware/cores/arduino/HardwareSerial.h b/hardware/cores/arduino/HardwareSerial.h index 55abf07b4..8610f5a35 100755 --- a/hardware/cores/arduino/HardwareSerial.h +++ b/hardware/cores/arduino/HardwareSerial.h @@ -50,6 +50,7 @@ class HardwareSerial : public Print int read(void); void flush(void); virtual void write(uint8_t); + using Print::write; // pull in write(str) and write(buf, size) from Print }; extern HardwareSerial Serial; diff --git a/hardware/cores/arduino/Print.cpp b/hardware/cores/arduino/Print.cpp index d4833da7c..74d0e5b43 100755 --- a/hardware/cores/arduino/Print.cpp +++ b/hardware/cores/arduino/Print.cpp @@ -21,7 +21,6 @@ #include #include -#include #include #include "wiring.h" @@ -29,6 +28,20 @@ // Public Methods ////////////////////////////////////////////////////////////// +/* default implementation: may be overridden */ +void Print::write(const char *str) +{ + while (*str) + write(*str++); +} + +/* default implementation: may be overridden */ +void Print::write(const uint8_t *buffer, size_t size) +{ + while (size--) + write(*buffer++); +} + void Print::print(uint8_t b) { this->write(b); @@ -39,10 +52,9 @@ void Print::print(char c) print((byte) c); } -void Print::print(const char c[]) +void Print::print(const char str[]) { - while (*c) - print(*c++); + write(str); } void Print::print(int n) diff --git a/hardware/cores/arduino/Print.h b/hardware/cores/arduino/Print.h index c95a0dc09..a69e85d99 100755 --- a/hardware/cores/arduino/Print.h +++ b/hardware/cores/arduino/Print.h @@ -21,6 +21,7 @@ #define Print_h #include +#include // for size_t #define DEC 10 #define HEX 16 @@ -34,7 +35,9 @@ class Print void printNumber(unsigned long, uint8_t); void printFloat(double, uint8_t); public: - virtual void write(uint8_t); + virtual void write(uint8_t) = 0; + virtual void write(const char *str); + virtual void write(const uint8_t *buffer, size_t size); void print(char); void print(const char[]); void print(uint8_t); diff --git a/hardware/libraries/Ethernet/Client.cpp b/hardware/libraries/Ethernet/Client.cpp index c62e26c00..51096dbec 100644 --- a/hardware/libraries/Ethernet/Client.cpp +++ b/hardware/libraries/Ethernet/Client.cpp @@ -2,6 +2,7 @@ extern "C" { #include "types.h" #include "w5100.h" #include "socket.h" + #include "string.h" } #include "Ethernet.h" @@ -50,6 +51,14 @@ void Client::write(uint8_t b) { send(_sock, &b, 1); } +void Client::write(const char *str) { + send(_sock, (const uint8_t *)str, strlen(str)); +} + +void Client::write(const uint8_t *buf, size_t size) { + send(_sock, buf, size); +} + int Client::available() { return getSn_RX_RSR(_sock); } diff --git a/hardware/libraries/Ethernet/Client.h b/hardware/libraries/Ethernet/Client.h index f269e9b93..7c0ccdf95 100644 --- a/hardware/libraries/Ethernet/Client.h +++ b/hardware/libraries/Ethernet/Client.h @@ -15,6 +15,8 @@ public: uint8_t status(); uint8_t connect(); virtual void write(uint8_t); + virtual void write(const char *str); + virtual void write(const uint8_t *buf, size_t size); int available(); int read(); void flush(); diff --git a/hardware/libraries/Ethernet/Server.cpp b/hardware/libraries/Ethernet/Server.cpp index 351f83874..d17a5d3cb 100644 --- a/hardware/libraries/Ethernet/Server.cpp +++ b/hardware/libraries/Ethernet/Server.cpp @@ -2,6 +2,7 @@ extern "C" { #include "types.h" #include "w5100.h" #include "socket.h" + #include "string.h" } #include "Ethernet.h" @@ -66,6 +67,16 @@ Client Server::available() } void Server::write(uint8_t b) +{ + write(&b, 1); +} + +void Server::write(const char *str) +{ + write((const uint8_t *)str, strlen(str)); +} + +void Server::write(const uint8_t *buffer, size_t size) { accept(); @@ -74,7 +85,7 @@ void Server::write(uint8_t b) if (EthernetClass::_server_port[sock] == _port && client.status() == SOCK_ESTABLISHED) { - client.write(b); + client.write(buffer, size); } } -} \ No newline at end of file +} diff --git a/hardware/libraries/Ethernet/Server.h b/hardware/libraries/Ethernet/Server.h index d35e691bd..73d6a5e98 100644 --- a/hardware/libraries/Ethernet/Server.h +++ b/hardware/libraries/Ethernet/Server.h @@ -18,6 +18,8 @@ public: Client available(); void begin(); virtual void write(uint8_t); + virtual void write(const char *str); + virtual void write(const uint8_t *buf, size_t size); }; #endif