From 671bbac0440a27ff9eac8c073885f8da958e37da Mon Sep 17 00:00:00 2001 From: david gauchard <gauchard@laas.fr> Date: Fri, 30 Nov 2018 02:20:26 +0100 Subject: [PATCH 01/18] weak hook early_setup() #2111 #2133 #2136 --- cores/esp8266/Arduino.h | 1 + cores/esp8266/core_esp8266_main.cpp | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/cores/esp8266/Arduino.h b/cores/esp8266/Arduino.h index 19d4b20853..feb4148e99 100644 --- a/cores/esp8266/Arduino.h +++ b/cores/esp8266/Arduino.h @@ -219,6 +219,7 @@ uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); void attachInterrupt(uint8_t pin, void (*)(void), int mode); void detachInterrupt(uint8_t pin); +void early_setup(void); void setup(void); void loop(void); diff --git a/cores/esp8266/core_esp8266_main.cpp b/cores/esp8266/core_esp8266_main.cpp index fbccac508f..8a2078b0c4 100644 --- a/cores/esp8266/core_esp8266_main.cpp +++ b/cores/esp8266/core_esp8266_main.cpp @@ -63,7 +63,7 @@ static uint32_t s_micros_at_task_start; extern "C" { extern const uint32_t __attribute__((section(".ver_number"))) core_version = ARDUINO_ESP8266_GIT_VER; -const char* core_release = +const char* core_release = #ifdef ARDUINO_ESP8266_RELEASE ARDUINO_ESP8266_RELEASE; #else @@ -145,6 +145,7 @@ void init_done() { system_set_os_print(1); gdb_init(); do_global_ctors(); + early_setup(); // <-- here after global constructors, or in user_init() ? esp_schedule(); } @@ -212,13 +213,19 @@ extern "C" void ICACHE_RAM_ATTR app_entry (void) return app_entry_custom(); } +extern "C" void early_setup (void) __attribute__((weak)); +extern "C" void early_setup (void) +{ + /* do nothing by default */ +} + extern "C" void user_init(void) { struct rst_info *rtc_info_ptr = system_get_rst_info(); memcpy((void *) &resetInfo, (void *) rtc_info_ptr, sizeof(resetInfo)); uart_div_modify(0, UART_CLK_FREQ / (115200)); - init(); + init(); // in core_esp8266_wiring.c initVariant(); From bf7643341069edc50384c4bcac2704cc9625722e Mon Sep 17 00:00:00 2001 From: david gauchard <gauchard@laas.fr> Date: Fri, 30 Nov 2018 11:00:48 +0100 Subject: [PATCH 02/18] rename to early_init (more "c" vs early_setup which is more "c++arduino") --- cores/esp8266/Arduino.h | 2 +- cores/esp8266/core_esp8266_main.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cores/esp8266/Arduino.h b/cores/esp8266/Arduino.h index feb4148e99..2e8669957c 100644 --- a/cores/esp8266/Arduino.h +++ b/cores/esp8266/Arduino.h @@ -219,7 +219,7 @@ uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); void attachInterrupt(uint8_t pin, void (*)(void), int mode); void detachInterrupt(uint8_t pin); -void early_setup(void); +void early_init(void); void setup(void); void loop(void); diff --git a/cores/esp8266/core_esp8266_main.cpp b/cores/esp8266/core_esp8266_main.cpp index 8a2078b0c4..bcc7f42ff9 100644 --- a/cores/esp8266/core_esp8266_main.cpp +++ b/cores/esp8266/core_esp8266_main.cpp @@ -145,7 +145,6 @@ void init_done() { system_set_os_print(1); gdb_init(); do_global_ctors(); - early_setup(); // <-- here after global constructors, or in user_init() ? esp_schedule(); } @@ -214,7 +213,7 @@ extern "C" void ICACHE_RAM_ATTR app_entry (void) } extern "C" void early_setup (void) __attribute__((weak)); -extern "C" void early_setup (void) +extern "C" void early_init (void) { /* do nothing by default */ } @@ -231,6 +230,8 @@ extern "C" void user_init(void) { cont_init(g_pcont); + early_init(); // user redefinable + ets_task(loop_task, LOOP_TASK_PRIORITY, s_loop_queue, LOOP_QUEUE_SIZE); From d296d7babce21cd82c9b488387d16f157b884712 Mon Sep 17 00:00:00 2001 From: david gauchard <gauchard@laas.fr> Date: Fri, 30 Nov 2018 11:57:48 +0100 Subject: [PATCH 03/18] example --- cores/esp8266/core_esp8266_main.cpp | 2 +- .../EarlyDisableWiFi/EarlyDisableWiFi.ino | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino diff --git a/cores/esp8266/core_esp8266_main.cpp b/cores/esp8266/core_esp8266_main.cpp index bcc7f42ff9..74dc5e45a9 100644 --- a/cores/esp8266/core_esp8266_main.cpp +++ b/cores/esp8266/core_esp8266_main.cpp @@ -212,7 +212,7 @@ extern "C" void ICACHE_RAM_ATTR app_entry (void) return app_entry_custom(); } -extern "C" void early_setup (void) __attribute__((weak)); +extern "C" void early_init (void) __attribute__((weak)); extern "C" void early_init (void) { /* do nothing by default */ diff --git a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino new file mode 100644 index 0000000000..8abd278f9e --- /dev/null +++ b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino @@ -0,0 +1,41 @@ + +#include <ESP8266WiFi.h> + +// early_init() is called before system startup +// from nonos-sdk's user entry point user_init() + +void early_init() { + // Global constructors are not called yet + // (global class instances like WiFi, Serial... are not yet initialized). + // In this function, we must only use nonos-sdk API. + + // example + + // https://github.com/esp8266/Arduino/issues/2111#issuecomment-224251391 + // WiFi.persistent(false); + // WiFi.mode(WIFI_OFF); + // WiFi.forceSleepBegin(); + + //WiFi.mode(WIFI_OFF) equivalent: + // datasheet: + // Set Wi-Fi working mode to Station mode, SoftAP + // or Station + SoftAP, and do not update flash + // (not persistent) + wifi_set_opmode_current(WIFI_OFF); + + //WiFi.forceSleepBegin(/*default*/0) equivalent: + // sleep forever until wifi_fpm_do_wakeup() is called + wifi_fpm_set_sleep_type(MODEM_SLEEP_T); + wifi_fpm_open(); + wifi_fpm_do_sleep(0xFFFFFFF); + + // use WiFi.forceSleepWake() to wake WiFi up +} + +void setup () { + Serial.begin(115200); + Serial.setDebugOutput(true); +} + +void loop () { +} From dbf60459d8013ea90237cb7cdd11f7f663efef18 Mon Sep 17 00:00:00 2001 From: David Gauchard <gauchard@laas.fr> Date: Fri, 30 Nov 2018 13:33:46 +0100 Subject: [PATCH 04/18] improve earlyWiFi example, slightly change AddrList interface, move WiFi sketches into WiFi examples --- cores/esp8266/AddrList.h | 18 +++++---- .../EarlyDisableWiFi/EarlyDisableWiFi.ino | 37 +++++++++++++++++++ .../examples/IPv6/IPv6.ino | 6 ++- 3 files changed, 52 insertions(+), 9 deletions(-) rename libraries/{esp8266 => ESP8266WiFi}/examples/IPv6/IPv6.ino (96%) diff --git a/cores/esp8266/AddrList.h b/cores/esp8266/AddrList.h index 68329f87c2..5a6f6a6367 100644 --- a/cores/esp8266/AddrList.h +++ b/cores/esp8266/AddrList.h @@ -24,7 +24,7 @@ for (auto a: ifList) out.printf("IF='%s' index=%d legacy=%d IPv4=%d local=%d hostname='%s' addr= %s\n", a->iface().c_str(), - a->number(), + a->ifnumber(), a->addr().isLegacy(), a->addr().isV4(), a->addr().isLocal(), @@ -65,7 +65,7 @@ for (auto iface: ifList) if ((configured = ( !iface->addr()->isV4() && !iface->addr().isLocal() - && iface->number() == STATION_IF))) + && iface->ifnumber() == STATION_IF))) break; Serial.print('.'); delay(500); @@ -126,19 +126,23 @@ class AddrListClass { } // (*iterator) emulation: - const const_iterator& operator* () const { return *this; } const const_iterator* operator-> () const { return this; } + // iterated address bool isLegacy() const { return _num == 0; } bool isLocal() const { return addr().isLocal(); } IPAddress addr () const { return _ip_from_netif_num(); } + + // properties of legacy/IPv4 address (one per interface) IPAddress netmask () const { return _netif->netmask; } IPAddress gw () const { return _netif->gw; } - String iface () const { return String(_netif->name[0]) + _netif->name[1]; } - const char* hostname () const { return _netif->hostname?: emptyString.c_str(); } - const char* mac () const { return (const char*)_netif->hwaddr; } - int number () const { return _netif->num; } + + // interface properties (common to all addresses in the interface) + String ifname () const { return String(_netif->name[0]) + _netif->name[1]; } + const char* ifhostname () const { return _netif->hostname?: emptyString.c_str(); } + const char* ifmac () const { return (const char*)_netif->hwaddr; } + int ifnumber () const { return _netif->num; } protected: diff --git a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino index 8abd278f9e..3ada45768c 100644 --- a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino +++ b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino @@ -1,6 +1,11 @@ #include <ESP8266WiFi.h> +#ifndef STASSID +#define STASSID "your-ssid" +#define STAPSK "your-password" +#endif + // early_init() is called before system startup // from nonos-sdk's user entry point user_init() @@ -35,6 +40,38 @@ void early_init() { void setup () { Serial.begin(115200); Serial.setDebugOutput(true); + Serial.println("sleeping 5s"); + + // during this period, a simple amp meter shows + // an average of 20mA with a Wemos D1 mini + // a DSO is needed to check #2111 + delay(5000); + + Serial.println("waking WiFi up, sleeping 5s"); + WiFi.forceSleepWake(); + + // amp meter raises to 75mA + delay(5000); + + Serial.println("connecting to AP " STASSID); + WiFi.mode(WIFI_STA); + WiFi.begin(STASSID, STAPSK); + + for (bool configured = false; !configured;) { + for (auto addr : addrList) + if ((configured = !addr->isLocal() && addr->ifnumber() == STATION_IF)) { + Serial.printf("STA: IF='%s' hostname='%s' addr= %s\n", + addr->ifname().c_str(), + addr->ifhostname(), + addr->addr().toString().c_str()); + break; + } + Serial.print('.'); + delay(500); + } + + // amp meter cycles within 75-80 mA + } void loop () { diff --git a/libraries/esp8266/examples/IPv6/IPv6.ino b/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino similarity index 96% rename from libraries/esp8266/examples/IPv6/IPv6.ino rename to libraries/ESP8266WiFi/examples/IPv6/IPv6.ino index 9dbc2788d0..e2d73baaed 100644 --- a/libraries/esp8266/examples/IPv6/IPv6.ino +++ b/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino @@ -66,10 +66,10 @@ void status(Print& out) { out.println(F("(with 'telnet <addr> or 'nc -u <addr> 23')")); for (auto a : addrList) { out.printf("IF='%s' IPv6=%d local=%d hostname='%s' addr= %s", - a->iface().c_str(), + a->ifname().c_str(), !a->addr().isV4(), a->addr().isLocal(), - a->hostname(), + a->ifhostname(), a->addr().toString().c_str()); if (a->isLegacy()) { @@ -96,6 +96,8 @@ void setup() { Serial.println(); Serial.println(ESP.getFullVersion()); + Serial.printf("IPV6 is%s enabled\n", LWIP_IPV6? emptyString.c_str(): " NOT"); + WiFi.mode(WIFI_STA); WiFi.begin(STASSID, STAPSK); From acdbe073bd7bbd6933d6fd7882235a588badb16c Mon Sep 17 00:00:00 2001 From: David Gauchard <gauchard@laas.fr> Date: Fri, 30 Nov 2018 15:22:54 +0100 Subject: [PATCH 05/18] fix CI --- .../examples/EarlyDisableWiFi/EarlyDisableWiFi.ino | 4 ++-- libraries/ESP8266WiFi/examples/IPv6/IPv6.ino | 2 +- tests/common.sh | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino index 3ada45768c..69753e62e1 100644 --- a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino +++ b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino @@ -37,7 +37,7 @@ void early_init() { // use WiFi.forceSleepWake() to wake WiFi up } -void setup () { +void setup() { Serial.begin(115200); Serial.setDebugOutput(true); Serial.println("sleeping 5s"); @@ -74,5 +74,5 @@ void setup () { } -void loop () { +void loop() { } diff --git a/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino b/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino index e2d73baaed..e26822e6fc 100644 --- a/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino +++ b/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino @@ -96,7 +96,7 @@ void setup() { Serial.println(); Serial.println(ESP.getFullVersion()); - Serial.printf("IPV6 is%s enabled\n", LWIP_IPV6? emptyString.c_str(): " NOT"); + Serial.printf("IPV6 is%s enabled\n", LWIP_IPV6 ? emptyString.c_str() : " NOT"); WiFi.mode(WIFI_STA); WiFi.begin(STASSID, STAPSK); diff --git a/tests/common.sh b/tests/common.sh index c048e75fe5..883bd8a031 100755 --- a/tests/common.sh +++ b/tests/common.sh @@ -116,8 +116,8 @@ function install_ide() debug_flags="-DDEBUG_ESP_PORT=Serial -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM" fi # Set custom warnings for all builds (i.e. could add -Wextra at some point) - echo "compiler.c.extra_flags=-Wall -Wextra -Werror $debug_flags" > esp8266/platform.local.txt - echo "compiler.cpp.extra_flags=-Wall -Wextra -Werror $debug_flags" >> esp8266/platform.local.txt + echo "compiler.c.extra_flags=-Wall -Wextra -Werror -DLWIP_IPV6=0 $debug_flags" > esp8266/platform.local.txt + echo "compiler.cpp.extra_flags=-Wall -Wextra -Werror -DLWIP_IPV6=0 $debug_flags" >> esp8266/platform.local.txt echo -e "\n----platform.local.txt----" cat esp8266/platform.local.txt echo -e "\n----\n" From 23b7ace90076c56da6e3553ba02d203f77722c14 Mon Sep 17 00:00:00 2001 From: David Gauchard <gauchard@laas.fr> Date: Fri, 30 Nov 2018 15:35:56 +0100 Subject: [PATCH 06/18] fix local CI runner --- tests/run_CI_locally.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_CI_locally.sh b/tests/run_CI_locally.sh index a080f3a3d4..49b9f119a2 100755 --- a/tests/run_CI_locally.sh +++ b/tests/run_CI_locally.sh @@ -33,7 +33,7 @@ if [ -d ${TMPCI} ]; then echo "" echo " -- updating CI directory in ${TMPCI} --" echo "" - (cd ${TMPCI}; git checkout ${branch}; git pull) + (cd ${TMPCI}; git checkout master; git branch -D ${branch}; git checkout -b ${branch}; git pull origin ${branch}) else echo "" echo " -- installing CI directory in ${TMPCI} --" From 9c043f61c0ce4d2964379527e4f6248a3f1852af Mon Sep 17 00:00:00 2001 From: david gauchard <gauchard@laas.fr> Date: Mon, 3 Dec 2018 01:36:10 +0100 Subject: [PATCH 07/18] fix local CI runner --- tests/run_CI_locally.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_CI_locally.sh b/tests/run_CI_locally.sh index a080f3a3d4..7f28ab7066 100755 --- a/tests/run_CI_locally.sh +++ b/tests/run_CI_locally.sh @@ -33,7 +33,7 @@ if [ -d ${TMPCI} ]; then echo "" echo " -- updating CI directory in ${TMPCI} --" echo "" - (cd ${TMPCI}; git checkout ${branch}; git pull) + (cd ${TMPCI}; git checkout master; git branch -D ${branch} || true; git checkout -b ${branch}; git pull origin ${branch}) else echo "" echo " -- installing CI directory in ${TMPCI} --" From e8e0b5c75771e110f12714aa5ede6737918ebd44 Mon Sep 17 00:00:00 2001 From: david gauchard <gauchard@laas.fr> Date: Mon, 3 Dec 2018 03:32:33 +0100 Subject: [PATCH 08/18] rename early_init() to preinit() --- cores/esp8266/Arduino.h | 2 +- cores/esp8266/core_esp8266_main.cpp | 6 +++--- .../examples/EarlyDisableWiFi/EarlyDisableWiFi.ino | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cores/esp8266/Arduino.h b/cores/esp8266/Arduino.h index 2e8669957c..6dff712d29 100644 --- a/cores/esp8266/Arduino.h +++ b/cores/esp8266/Arduino.h @@ -219,7 +219,7 @@ uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); void attachInterrupt(uint8_t pin, void (*)(void), int mode); void detachInterrupt(uint8_t pin); -void early_init(void); +void preinit(void); void setup(void); void loop(void); diff --git a/cores/esp8266/core_esp8266_main.cpp b/cores/esp8266/core_esp8266_main.cpp index 74dc5e45a9..1901b6c002 100644 --- a/cores/esp8266/core_esp8266_main.cpp +++ b/cores/esp8266/core_esp8266_main.cpp @@ -212,8 +212,8 @@ extern "C" void ICACHE_RAM_ATTR app_entry (void) return app_entry_custom(); } -extern "C" void early_init (void) __attribute__((weak)); -extern "C" void early_init (void) +extern "C" void preinit (void) __attribute__((weak)); +extern "C" void preinit (void) { /* do nothing by default */ } @@ -230,7 +230,7 @@ extern "C" void user_init(void) { cont_init(g_pcont); - early_init(); // user redefinable + preinit(); // user redefinable ets_task(loop_task, LOOP_TASK_PRIORITY, s_loop_queue, diff --git a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino index 8abd278f9e..a2d74b3c7f 100644 --- a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino +++ b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino @@ -1,10 +1,10 @@ #include <ESP8266WiFi.h> -// early_init() is called before system startup +// preinit() is called before system startup // from nonos-sdk's user entry point user_init() -void early_init() { +void preinit() { // Global constructors are not called yet // (global class instances like WiFi, Serial... are not yet initialized). // In this function, we must only use nonos-sdk API. From f887ce89b183b20f459db1e8ba5adab3e486724c Mon Sep 17 00:00:00 2001 From: David Gauchard <gauchard@laas.fr> Date: Mon, 3 Dec 2018 14:07:36 +0100 Subject: [PATCH 09/18] + static ESP8266WiFiClass::preinit_wifi_off() --- cores/esp8266/AddrList.h | 1 + .../ESP8266WiFi/src/ESP8266WiFiGeneric.cpp | 21 +++++++++++++++++++ .../ESP8266WiFi/src/ESP8266WiFiGeneric.h | 2 ++ 3 files changed, 24 insertions(+) diff --git a/cores/esp8266/AddrList.h b/cores/esp8266/AddrList.h index d0d7ba269a..8576db1fac 100644 --- a/cores/esp8266/AddrList.h +++ b/cores/esp8266/AddrList.h @@ -115,6 +115,7 @@ struct netifWrapper bool isLocal () const { return addr().isLocal(); } bool isV4 () const { return addr().isV4(); } bool isV6 () const { return !addr().isV4(); } + String toString() const { return addr().toString(); } // related to legacy address (_num=0, ipv4) IPAddress netmask () const { return _netif->netmask; } diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp index 2e3f4043c9..18ef4bef16 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp @@ -580,3 +580,24 @@ void wifi_dns_found_callback(const char *name, CONST ip_addr_t *ipaddr, void *ca } +void ESP8266WiFiGenericClass::preinit_wifi_off () { + // https://github.com/esp8266/Arduino/issues/2111#issuecomment-224251391 + // WiFi.persistent(false); + // WiFi.mode(WIFI_OFF); + // WiFi.forceSleepBegin(); + + //WiFi.mode(WIFI_OFF) equivalent: + // datasheet: + // Set Wi-Fi working mode to Station mode, SoftAP + // or Station + SoftAP, and do not update flash + // (not persistent) + wifi_set_opmode_current(WIFI_OFF); + + //WiFi.forceSleepBegin(/*default*/0) equivalent: + // sleep forever until wifi_fpm_do_wakeup() is called + wifi_fpm_set_sleep_type(MODEM_SLEEP_T); + wifi_fpm_open(); + wifi_fpm_do_sleep(0xFFFFFFF); + + // use WiFi.forceSleepWake() to wake WiFi up +} diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h index 5fba065f55..6fcc3e5a81 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h @@ -88,6 +88,8 @@ class ESP8266WiFiGenericClass { bool forceSleepBegin(uint32 sleepUs = 0); bool forceSleepWake(); + static void preinit_wifi_off (); + protected: static bool _persistent; static WiFiMode_t _forceSleepLastMode; From 6c09fbdb126150c2a80225ba6269a87a84a8ee78 Mon Sep 17 00:00:00 2001 From: David Gauchard <gauchard@laas.fr> Date: Mon, 3 Dec 2018 14:09:10 +0100 Subject: [PATCH 10/18] update early disable wifi example --- .../EarlyDisableWiFi/EarlyDisableWiFi.ino | 38 ++++--------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino index f0ebc1fd3e..3959d08fc9 100644 --- a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino +++ b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino @@ -10,31 +10,9 @@ // from nonos-sdk's user entry point user_init() void preinit() { - // Global constructors are not called yet - // (global class instances like WiFi, Serial... are not yet initialized). - // In this function, we must only use nonos-sdk API. - - // example - - // https://github.com/esp8266/Arduino/issues/2111#issuecomment-224251391 - // WiFi.persistent(false); - // WiFi.mode(WIFI_OFF); - // WiFi.forceSleepBegin(); - - //WiFi.mode(WIFI_OFF) equivalent: - // datasheet: - // Set Wi-Fi working mode to Station mode, SoftAP - // or Station + SoftAP, and do not update flash - // (not persistent) - wifi_set_opmode_current(WIFI_OFF); - - //WiFi.forceSleepBegin(/*default*/0) equivalent: - // sleep forever until wifi_fpm_do_wakeup() is called - wifi_fpm_set_sleep_type(MODEM_SLEEP_T); - wifi_fpm_open(); - wifi_fpm_do_sleep(0xFFFFFFF); - - // use WiFi.forceSleepWake() to wake WiFi up + // Global WiFi constructors are not called yet + // (global class instances like WiFi, Serial... are not yet initialized).. + ESP8266WiFiClass::preinit_wifi_off(); } void setup() { @@ -47,7 +25,7 @@ void setup() { // a DSO is needed to check #2111 delay(5000); - Serial.println("waking WiFi up, sleeping 5s"); + Serial.println("waking WiFi up, sleeping 5s"); WiFi.forceSleepWake(); // amp meter raises to 75mA @@ -59,11 +37,11 @@ void setup() { for (bool configured = false; !configured;) { for (auto addr : addrList) - if ((configured = !addr->isLocal() && addr->ifnumber() == STATION_IF)) { + if ((configured = !addr.isLocal() && addr.ifnumber() == STATION_IF)) { Serial.printf("STA: IF='%s' hostname='%s' addr= %s\n", - addr->ifname().c_str(), - addr->ifhostname(), - addr->addr().toString().c_str()); + addr.ifname().c_str(), + addr.ifhostname(), + addr.toString().c_str()); break; } Serial.print('.'); From a636a80136119d0e4feb4118475e9ef2917b45a7 Mon Sep 17 00:00:00 2001 From: David Gauchard <gauchard@laas.fr> Date: Mon, 3 Dec 2018 14:09:37 +0100 Subject: [PATCH 11/18] example update --- libraries/ESP8266WiFi/examples/{udp/udp.ino => Udp/Udp.ino} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename libraries/ESP8266WiFi/examples/{udp/udp.ino => Udp/Udp.ino} (100%) diff --git a/libraries/ESP8266WiFi/examples/udp/udp.ino b/libraries/ESP8266WiFi/examples/Udp/Udp.ino similarity index 100% rename from libraries/ESP8266WiFi/examples/udp/udp.ino rename to libraries/ESP8266WiFi/examples/Udp/Udp.ino From 5d770aa19bb651c9216fd5a4385ec86f9a1fbff5 Mon Sep 17 00:00:00 2001 From: David Gauchard <gauchard@laas.fr> Date: Mon, 3 Dec 2018 14:21:38 +0100 Subject: [PATCH 12/18] IPv6 example update --- libraries/ESP8266WiFi/examples/IPv6/IPv6.ino | 5 ++--- .../examples/httpUpdateSigned/httpUpdateSigned.ino | 7 ++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino b/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino index da36656474..565710a83e 100644 --- a/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino +++ b/libraries/ESP8266WiFi/examples/IPv6/IPv6.ino @@ -65,13 +65,12 @@ void status(Print& out) { out.println(F("Try me at these addresses:")); out.println(F("(with 'telnet <addr> or 'nc -u <addr> 23')")); for (auto a : addrList) { - out.printf("IF='%s' set=%d IPv6=%d local=%d hostname='%s' addr= %s", + out.printf("IF='%s' IPv6=%d local=%d hostname='%s' addr= %s", a.ifname().c_str(), - a.addr().isSet(), a.isV6(), a.isLocal(), a.ifhostname(), - a.addr().toString().c_str()); + a.toString().c_str()); if (a.isLegacy()) { out.printf(" / mask:%s / gw:%s", diff --git a/libraries/ESP8266httpUpdate/examples/httpUpdateSigned/httpUpdateSigned.ino b/libraries/ESP8266httpUpdate/examples/httpUpdateSigned/httpUpdateSigned.ino index b503c1d5b4..e196ef6419 100644 --- a/libraries/ESP8266httpUpdate/examples/httpUpdateSigned/httpUpdateSigned.ino +++ b/libraries/ESP8266httpUpdate/examples/httpUpdateSigned/httpUpdateSigned.ino @@ -21,6 +21,11 @@ #include <ESP8266HTTPClient.h> #include <ESP8266httpUpdate.h> +#ifndef STASSID +#define STASSID "your-ssid" +#define STAPSK "your-password" +#endif + ESP8266WiFiMulti WiFiMulti; #define MANUAL_SIGNING 0 @@ -66,7 +71,7 @@ void setup() { } WiFi.mode(WIFI_STA); - WiFiMulti.addAP("SSID", "PASS"); + WiFiMulti.addAP(STASSID, STAPSK); #if MANUAL_SIGNING signPubKey = new BearSSL::PublicKey(pubkey); From c0043c27f94ff95ed1e4ff127b6524729b29b281 Mon Sep 17 00:00:00 2001 From: Develo <deveyes@gmail.com> Date: Tue, 4 Dec 2018 00:13:41 -0300 Subject: [PATCH 13/18] Update ESP8266WiFiGeneric.h camelCase for static method name --- libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h index 6fcc3e5a81..af3fce3e16 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.h @@ -88,7 +88,7 @@ class ESP8266WiFiGenericClass { bool forceSleepBegin(uint32 sleepUs = 0); bool forceSleepWake(); - static void preinit_wifi_off (); + static void preinitWiFiOff (); //meant to be called in user-defined preinit() protected: static bool _persistent; From 8b687b0951f86bbad6c105e23cc997d711a9550c Mon Sep 17 00:00:00 2001 From: Develo <deveyes@gmail.com> Date: Tue, 4 Dec 2018 00:16:10 -0300 Subject: [PATCH 14/18] Update ESP8266WiFiGeneric.cpp camelCase for static method name --- .../ESP8266WiFi/src/ESP8266WiFiGeneric.cpp | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp index 18ef4bef16..a6239decef 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp @@ -579,25 +579,25 @@ void wifi_dns_found_callback(const char *name, CONST ip_addr_t *ipaddr, void *ca esp_schedule(); // resume the hostByName function } - -void ESP8266WiFiGenericClass::preinit_wifi_off () { - // https://github.com/esp8266/Arduino/issues/2111#issuecomment-224251391 - // WiFi.persistent(false); - // WiFi.mode(WIFI_OFF); - // WiFi.forceSleepBegin(); - - //WiFi.mode(WIFI_OFF) equivalent: - // datasheet: - // Set Wi-Fi working mode to Station mode, SoftAP - // or Station + SoftAP, and do not update flash - // (not persistent) - wifi_set_opmode_current(WIFI_OFF); - - //WiFi.forceSleepBegin(/*default*/0) equivalent: - // sleep forever until wifi_fpm_do_wakeup() is called - wifi_fpm_set_sleep_type(MODEM_SLEEP_T); - wifi_fpm_open(); - wifi_fpm_do_sleep(0xFFFFFFF); - - // use WiFi.forceSleepWake() to wake WiFi up -} +//meant to be called from user-defined preinit() +void ESP8266WiFiGenericClass::preinitWiFiOff () { + // https://github.com/esp8266/Arduino/issues/2111#issuecomment-224251391 + // WiFi.persistent(false); + // WiFi.mode(WIFI_OFF); + // WiFi.forceSleepBegin(); + + //WiFi.mode(WIFI_OFF) equivalent: + // datasheet: + // Set Wi-Fi working mode to Station mode, SoftAP + // or Station + SoftAP, and do not update flash + // (not persistent) + wifi_set_opmode_current(WIFI_OFF); + + //WiFi.forceSleepBegin(/*default*/0) equivalent: + // sleep forever until wifi_fpm_do_wakeup() is called + wifi_fpm_set_sleep_type(MODEM_SLEEP_T); + wifi_fpm_open(); + wifi_fpm_do_sleep(0xFFFFFFF); + + // use WiFi.forceSleepWake() to wake WiFi up +} From 85d244d253ef8646b45662eb7f608f4ca258c9d2 Mon Sep 17 00:00:00 2001 From: Develo <deveyes@gmail.com> Date: Tue, 4 Dec 2018 00:19:23 -0300 Subject: [PATCH 15/18] Update EarlyDisableWiFi.ino Expand comment, fix static method name --- .../ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino index 3959d08fc9..ed966405df 100644 --- a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino +++ b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino @@ -12,7 +12,8 @@ void preinit() { // Global WiFi constructors are not called yet // (global class instances like WiFi, Serial... are not yet initialized).. - ESP8266WiFiClass::preinit_wifi_off(); + // No global object methods or C++ exceptions can be called in here! + ESP8266WiFiClass::preinitWiFiOff(); } void setup() { From bef67d7274d9c915e336fe24e44704f718c7ff61 Mon Sep 17 00:00:00 2001 From: Develo <deveyes@gmail.com> Date: Tue, 4 Dec 2018 00:21:17 -0300 Subject: [PATCH 16/18] Update core_esp8266_main.cpp Expanded comment. --- cores/esp8266/core_esp8266_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp8266/core_esp8266_main.cpp b/cores/esp8266/core_esp8266_main.cpp index 4a60f2e416..f9d6a454ad 100644 --- a/cores/esp8266/core_esp8266_main.cpp +++ b/cores/esp8266/core_esp8266_main.cpp @@ -261,7 +261,7 @@ extern "C" void user_init(void) { cont_init(g_pcont); - preinit(); // user redefinable + preinit(); // Prior to C++ Dynamic Init (not related to above init() ). Meant to be user redefinable. ets_task(loop_task, LOOP_TASK_PRIORITY, s_loop_queue, From eb9f9c2c6871a0899ae504fbca158f90e1911b8e Mon Sep 17 00:00:00 2001 From: Develo <deveyes@gmail.com> Date: Tue, 4 Dec 2018 00:22:52 -0300 Subject: [PATCH 17/18] Update core_esp8266_main.cpp Expanded comment --- cores/esp8266/core_esp8266_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp8266/core_esp8266_main.cpp b/cores/esp8266/core_esp8266_main.cpp index f9d6a454ad..a35e3d5a8a 100644 --- a/cores/esp8266/core_esp8266_main.cpp +++ b/cores/esp8266/core_esp8266_main.cpp @@ -255,7 +255,7 @@ extern "C" void user_init(void) { uart_div_modify(0, UART_CLK_FREQ / (115200)); - init(); // in core_esp8266_wiring.c + init(); // in core_esp8266_wiring.c, inits hw regs and sdk timer initVariant(); From 1925b0c3329ab0f755863a35e6bcbec791b7a7b5 Mon Sep 17 00:00:00 2001 From: Develo <deveyes@gmail.com> Date: Tue, 4 Dec 2018 00:24:57 -0300 Subject: [PATCH 18/18] Update EarlyDisableWiFi.ino Expanded comment --- .../ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino index ed966405df..45627bdb16 100644 --- a/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino +++ b/libraries/ESP8266WiFi/examples/EarlyDisableWiFi/EarlyDisableWiFi.ino @@ -13,6 +13,7 @@ void preinit() { // Global WiFi constructors are not called yet // (global class instances like WiFi, Serial... are not yet initialized).. // No global object methods or C++ exceptions can be called in here! + //The below is a static class method, which is similar to a function, so it's ok. ESP8266WiFiClass::preinitWiFiOff(); }