diff --git a/cores/esp8266/Updater.cpp b/cores/esp8266/Updater.cpp index edd72766b..c4ec4b00b 100644 --- a/cores/esp8266/Updater.cpp +++ b/cores/esp8266/Updater.cpp @@ -1,6 +1,8 @@ #include "Updater.h" #include "Arduino.h" #include "eboot_command.h" +#include "interrupts.h" + //#define DEBUG_UPDATER Serial extern "C" { diff --git a/cores/esp8266/Updater.h b/cores/esp8266/Updater.h index eac84f466..c8b4e81f1 100644 --- a/cores/esp8266/Updater.h +++ b/cores/esp8266/Updater.h @@ -11,6 +11,8 @@ #define UPDATE_ERROR_SIZE 4 #define UPDATE_ERROR_STREAM 5 +//#define DEBUG_UPDATER Serial1 + class UpdaterClass { public: UpdaterClass(); diff --git a/cores/esp8266/debug.h b/cores/esp8266/debug.h index 7bdc247bd..fe389bb2d 100644 --- a/cores/esp8266/debug.h +++ b/cores/esp8266/debug.h @@ -2,8 +2,11 @@ #define ARD_DEBUG_H #include -// #define DEBUGV(...) ets_printf(__VA_ARGS__) +//#define DEBUGV(...) ets_printf(__VA_ARGS__) + +#ifndef DEBUGV #define DEBUGV(...) +#endif #ifdef __cplusplus void hexdump(uint8_t *mem, uint32_t len, uint8_t cols = 16); diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 4c1aa192e..8165ba3ba 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -332,3 +332,16 @@ void WiFiClient::stopAll() } } } + + +void WiFiClient::stopAllExcept(WiFiClient * exC) { + for (WiFiClient* it = _s_first; it; it = it->_next) { + ClientContext* c = it->_client; + + if (c && c != exC->_client) { + c->abort(); + c->unref(); + it->_client = 0; + } + } +} diff --git a/libraries/ESP8266WiFi/src/WiFiClient.h b/libraries/ESP8266WiFi/src/WiFiClient.h index 241b80f09..77ba1a698 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.h +++ b/libraries/ESP8266WiFi/src/WiFiClient.h @@ -96,6 +96,7 @@ public: using Print::write; static void stopAll(); + static void stopAllExcept(WiFiClient * c); private: diff --git a/libraries/ESP8266WiFi/src/WiFiUdp.cpp b/libraries/ESP8266WiFi/src/WiFiUdp.cpp index 733ba3ff8..50734d1dd 100644 --- a/libraries/ESP8266WiFi/src/WiFiUdp.cpp +++ b/libraries/ESP8266WiFi/src/WiFiUdp.cpp @@ -290,3 +290,12 @@ void WiFiUDP::stopAll() it->stop(); } } + +void WiFiUDP::stopAllExcept(WiFiUDP * exC) { + for (WiFiUDP* it = _s_first; it; it = it->_next) { + if (it->_ctx != exC->_ctx) { + DEBUGV("%s %08x %08x\n", __func__, (uint32_t) it, (uint32_t) _s_first); + it->stop(); + } + } +} diff --git a/libraries/ESP8266WiFi/src/WiFiUdp.h b/libraries/ESP8266WiFi/src/WiFiUdp.h index 16aa0a3be..011de2e64 100644 --- a/libraries/ESP8266WiFi/src/WiFiUdp.h +++ b/libraries/ESP8266WiFi/src/WiFiUdp.h @@ -105,6 +105,7 @@ public: uint16_t localPort(); static void stopAll(); + static void stopAllExcept(WiFiUDP * exC); }; diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp index 8c42afffc..e4e062ff0 100644 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp @@ -128,10 +128,17 @@ t_httpUpdate_return ESP8266HTTPUpdate::update(const char * host, uint16_t port, ret = HTTP_UPDATE_FAILD; DEBUG_HTTP_UPDATE("[httpUpdate] FreeSketchSpace to low (%d) needed: %d\n", ESP.getFreeSketchSpace(), len); } else { - if(ESP.updateSketch(tcp, len)) { - // may never reached! + + WiFiUDP::stopAll(); + WiFiClient::stopAllExcept(&tcp); + + delay(100); + + if(ESP.updateSketch(tcp, len, false, false)) { ret = HTTP_UPDATE_OK; DEBUG_HTTP_UPDATE("[httpUpdate] Update ok\n"); + tcp.stop(); + ESP.restart(); } else { ret = HTTP_UPDATE_FAILD; DEBUG_HTTP_UPDATE("[httpUpdate] Update failed\n"); diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h index 911a6a565..a167f9fe4 100644 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h @@ -28,6 +28,8 @@ #include #include +#include +#include //#define DEBUG_HTTP_UPDATE(...) Serial1.printf( __VA_ARGS__ ) diff --git a/tools/sdk/include/osapi.h b/tools/sdk/include/osapi.h index 404efb855..1169e5406 100644 --- a/tools/sdk/include/osapi.h +++ b/tools/sdk/include/osapi.h @@ -46,7 +46,7 @@ #ifdef USE_OPTIMIZE_PRINTF #define os_printf(fmt, ...) do { \ - static const char flash_str[] ICACHE_RODATA_ATTR = fmt; \ + static const char flash_str[] ICACHE_RODATA_ATTR __attribute__((aligned(4))) = fmt; \ os_printf_plus(flash_str, ##__VA_ARGS__); \ } while(0) #else