From 46c096ba2305f0db3e75fe3e81cf7e1832ab8b08 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Tue, 26 Jan 2016 17:25:40 +0100 Subject: [PATCH 1/3] update version in platform.txt --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 52c5eac5e..5ad132ac0 100644 --- a/platform.txt +++ b/platform.txt @@ -6,7 +6,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=ESP8266 Modules -version=2.0.0 +version=2.1.0 runtime.tools.xtensa-lx106-elf-gcc.path={runtime.platform.path}/tools/xtensa-lx106-elf runtime.tools.esptool.path={runtime.platform.path}/tools/esptool From fa38ce4079873852008643046f17d018512c6533 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Tue, 26 Jan 2016 17:40:01 +0100 Subject: [PATCH 2/3] allow cbuf as chain --- cores/esp8266/cbuf.cpp | 2 +- cores/esp8266/cbuf.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cores/esp8266/cbuf.cpp b/cores/esp8266/cbuf.cpp index cf539e6b0..b50c47742 100644 --- a/cores/esp8266/cbuf.cpp +++ b/cores/esp8266/cbuf.cpp @@ -22,7 +22,7 @@ #include "c_types.h" cbuf::cbuf(size_t size) : - _size(size), _buf(new char[size]), _bufend(_buf + size), _begin(_buf), _end(_begin) { + next(NULL), _size(size), _buf(new char[size]), _bufend(_buf + size), _begin(_buf), _end(_begin) { } cbuf::~cbuf() { diff --git a/cores/esp8266/cbuf.h b/cores/esp8266/cbuf.h index bc6372819..08e1b2266 100644 --- a/cores/esp8266/cbuf.h +++ b/cores/esp8266/cbuf.h @@ -56,6 +56,8 @@ class cbuf { void flush(); size_t remove(size_t size); + cbuf *next; + private: inline char* wrap_if_bufend(char* ptr) const { return (ptr == _bufend) ? _buf : ptr; @@ -66,6 +68,7 @@ class cbuf { const char* _bufend; char* _begin; char* _end; + }; #endif//__cbuf_h From 531d748936e549f4c034ddf19b6af6739f2efa22 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Tue, 26 Jan 2016 18:13:33 +0100 Subject: [PATCH 3/3] rename cbuf::getSize to cbuf::available (return available Bytes in cbuf) add cbuf::size (return size of cbuf) --- cores/esp8266/HardwareSerial.cpp | 6 +++--- cores/esp8266/cbuf.cpp | 24 ++++++++++++++---------- cores/esp8266/cbuf.h | 3 ++- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/cores/esp8266/HardwareSerial.cpp b/cores/esp8266/HardwareSerial.cpp index 1f846454e..c1b81487b 100644 --- a/cores/esp8266/HardwareSerial.cpp +++ b/cores/esp8266/HardwareSerial.cpp @@ -643,7 +643,7 @@ int HardwareSerial::available(void) { if (_uart != NULL && _uart->rxEnabled) { InterruptLock il; - result = static_cast(_rx_buffer->getSize()); + result = static_cast(_rx_buffer->available()); } if (!result) { @@ -696,7 +696,7 @@ void HardwareSerial::flush() { while(true) { { InterruptLock il; - if(_tx_buffer->getSize() == 0 && + if(_tx_buffer->available() == 0 && UART_GET_TX_FIFO_ROOM(uart_nr) >= UART_TX_FIFO_SIZE) { break; } else if(il.savedInterruptLevel() > 0) { @@ -750,7 +750,7 @@ void ICACHE_RAM_ATTR HardwareSerial::_rx_complete_irq(char c) { void ICACHE_RAM_ATTR HardwareSerial::_tx_empty_irq(void) { const int uart_nr = _uart->uart_nr; - size_t queued = _tx_buffer->getSize(); + size_t queued = _tx_buffer->available(); if(!queued) { UART_DISARM_TX_INTERRUPT(uart_nr); return; diff --git a/cores/esp8266/cbuf.cpp b/cores/esp8266/cbuf.cpp index b50c47742..ca5977df4 100644 --- a/cores/esp8266/cbuf.cpp +++ b/cores/esp8266/cbuf.cpp @@ -35,11 +35,11 @@ size_t cbuf::resizeAdd(size_t addSize) { size_t cbuf::resize(size_t newSize) { - size_t available = getSize(); + size_t bytes_available = available(); // not lose any data // if data can be lost use remove or flush before resize - if((newSize < available) || (newSize == _size)) { + if((newSize < bytes_available) || (newSize == _size)) { return _size; } @@ -51,12 +51,12 @@ size_t cbuf::resize(size_t newSize) { } if(_buf) { - read(newbuf, available); - memset((newbuf + available), 0x00, (newSize - available)); + read(newbuf, bytes_available); + memset((newbuf + bytes_available), 0x00, (newSize - bytes_available)); } _begin = newbuf; - _end = newbuf + available; + _end = newbuf + bytes_available; _bufend = newbuf + newSize; _size = newSize; @@ -66,13 +66,17 @@ size_t cbuf::resize(size_t newSize) { return _size; } -size_t ICACHE_RAM_ATTR cbuf::getSize() const { +size_t ICACHE_RAM_ATTR cbuf::available() const { if(_end >= _begin) { return _end - _begin; } return _size - (_begin - _end); } +size_t cbuf::size() { + return _size; +} + size_t cbuf::room() const { if(_end >= _begin) { return _size - (_end - _begin) - 1; @@ -88,7 +92,7 @@ int cbuf::peek() { } size_t cbuf::peek(char *dst, size_t size) { - size_t bytes_available = getSize(); + size_t bytes_available = available(); size_t size_to_read = (size < bytes_available) ? size : bytes_available; size_t size_read = size_to_read; char * begin = _begin; @@ -113,7 +117,7 @@ int ICACHE_RAM_ATTR cbuf::read() { } size_t cbuf::read(char* dst, size_t size) { - size_t bytes_available = getSize(); + size_t bytes_available = available(); size_t size_to_read = (size < bytes_available) ? size : bytes_available; size_t size_read = size_to_read; if(_end < _begin && size_to_read > (size_t) (_bufend - _begin)) { @@ -159,7 +163,7 @@ void cbuf::flush() { } size_t cbuf::remove(size_t size) { - size_t bytes_available = getSize(); + size_t bytes_available = available(); if(size >= bytes_available) { flush(); return 0; @@ -171,5 +175,5 @@ size_t cbuf::remove(size_t size) { size_to_remove -= top_size; } _begin = wrap_if_bufend(_begin + size_to_remove); - return getSize(); + return available(); } diff --git a/cores/esp8266/cbuf.h b/cores/esp8266/cbuf.h index 08e1b2266..9c358a70e 100644 --- a/cores/esp8266/cbuf.h +++ b/cores/esp8266/cbuf.h @@ -32,7 +32,8 @@ class cbuf { size_t resizeAdd(size_t addSize); size_t resize(size_t newSize); - size_t getSize() const; + size_t available() const; + size_t size(); size_t room() const;