From 6b7b8027061ad262302049b07a3a8a3e0d98990b Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 28 Sep 2015 16:04:34 +0300 Subject: [PATCH 1/2] Fix a crash due to abort() called from TCP error callback (#428) --- .../ESP8266WiFi/src/include/ClientContext.h | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index aedd30327..f4dfae09d 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -1,9 +1,9 @@ -/* +/* ClientContext.h - TCP connection handling on top of lwIP Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. This file is part of the esp8266 core for Arduino environment. - + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either @@ -39,7 +39,7 @@ class ClientContext { tcp_sent(pcb, &_s_sent); tcp_err(pcb, &_s_error); } - + err_t abort(){ if(_pcb) { DEBUGV(":abort\r\n"); @@ -52,7 +52,7 @@ class ClientContext { } return ERR_ABRT; } - + err_t close(){ err_t err = ERR_OK; if(_pcb) { @@ -71,7 +71,7 @@ class ClientContext { } return err; } - + ~ClientContext() { } @@ -101,18 +101,18 @@ class ClientContext { } } } - + void setNoDelay(bool nodelay){ if(!_pcb) return; if(nodelay) tcp_nagle_disable(_pcb); else tcp_nagle_enable(_pcb); } - + bool getNoDelay(){ if(!_pcb) return false; return tcp_nagle_disabled(_pcb); } - + uint32_t getRemoteAddress() { if(!_pcb) return 0; @@ -277,16 +277,11 @@ class ClientContext { void _error(err_t err) { DEBUGV(":er %d %d %d\r\n", err, _size_sent, _send_waiting); - if (err != ERR_ABRT) { - abort(); - } - else { - tcp_arg(_pcb, NULL); - tcp_sent(_pcb, NULL); - tcp_recv(_pcb, NULL); - tcp_err(_pcb, NULL); - _pcb = NULL; - } + tcp_arg(_pcb, NULL); + tcp_sent(_pcb, NULL); + tcp_recv(_pcb, NULL); + tcp_err(_pcb, NULL); + _pcb = NULL; if(_size_sent && _send_waiting) { esp_schedule(); } From bb85cdaa0b7c752b4390992b7c93210d5e383795 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 28 Sep 2015 16:50:01 +0300 Subject: [PATCH 2/2] Add SoftwareSerial library when building boards manager package. --- doc/reference.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/reference.md b/doc/reference.md index c4da343fa..b88ccbf07 100644 --- a/doc/reference.md +++ b/doc/reference.md @@ -31,6 +31,7 @@ title: Reference * [EEPROM](#eeprom) * [I2C (Wire library)](#i2c-wire-library) * [SPI](#spi) + * [SoftwareSerial](#softwareserial) * [ESP-specific APIs](#esp-specific-apis) * [OneWire (from https://www.pjrc.com/teensy/td_libs_OneWire.html)](#onewire-from-httpswwwpjrccomteensytd_libs_onewirehtml) * [mDNS and DNS-SD responder (ESP8266mDNS library)](#mdns-and-dns-sd-responder-esp8266mdns-library) @@ -398,6 +399,10 @@ else they default to pins 4(SDA) and 5(SCL). SPI library supports the entire Arduino SPI API including transactions, including setting phase (CPHA). Setting the Clock polarity (CPOL) is not supported, yet (SPI_MODE2 and SPI_MODE3 not working). +## SoftwareSerial + +An ESP8266 port of SoftwareSerial library done by Peter Lerup (@plerup) supports baud rate up to 115200 and multiples SoftwareSerial instances. See the https://github.com/plerup/espsoftwareserial if you want to suggest an improvement or open an issue related to SoftwareSerial. + ## ESP-specific APIs APIs related to deep sleep and watchdog timer are available in the `ESP` object, only available in Alpha version.