ThingPlug GMMP library for mbed
Dependents: ThingPlug_WiFi_Example
Diff: Network/TCPclient/Client.cpp
- Revision:
- 0:32c20cfb2b30
diff -r 000000000000 -r 32c20cfb2b30 Network/TCPclient/Client.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Network/TCPclient/Client.cpp Thu Jul 23 00:55:15 2015 +0000 @@ -0,0 +1,63 @@ +#include "Client.h" +#include "mbed.h" + +#include <stdint.h> + +Client::Client() : _len(0), _sock() { +} + +Client::~Client() { +} + +int Client::connect(const char *host, uint16_t port) { + return _sock.connect(host, port) == 0; +} + +size_t Client::write(uint8_t b) { + //return write(&b, 1); + return write((char*)&b, 1); //lesmin +} + +//size_t Client::write(const uint8_t *buf, size_t size) { +size_t Client::write(char *buf, size_t size) { + _sock.set_blocking(false, 15000); + // NOTE: we know it's dangerous to cast from (const uint8_t *) to (char *), + // but we are trying to maintain a stable interface between the Arduino + // one and the mbed one. What's more, while TCPSocketConnection has no + // intention of modifying the data here, it requires us to send a (char *) + // typed data. So we belive it's safe to do the cast here. + //return _sock.send_all(const_cast<char*>((const char*) buf), size); + return _sock.send_all(buf, size); +} + +int Client::available() { + if (_len > 0) { return 1; } + int ret = read(_buf, 1); + if (ret <= 0) { return 0; } + _len = ret; + return 1; +} + +int Client::read() { + if (_len > 0) { + _len = 0; + return _buf[0]; + } + return -1; +} + +int Client::read(uint8_t *buf, size_t size) { + return _sock.receive_all((char*) buf, size); +} + +void Client::flush() { + // does nothing, TCP stack takes care of this +} + +void Client::stop() { + _sock.close(); +} + +uint8_t Client::connected() { + return _sock.is_connected(); +}