diff --git a/.gitignore b/.gitignore index b86a8611d..fc6d8c40c 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,5 @@ nbproject build/macosx/esptool-*-osx.zip build/macosx/dist/osx-xtensa-lx106-elf.tgz +/docs/lib_dump/full +/docs/lib_dump diff --git a/cores/esp8266/Esp.h b/cores/esp8266/Esp.h index 8e66f8f88..17349f688 100644 --- a/cores/esp8266/Esp.h +++ b/cores/esp8266/Esp.h @@ -68,7 +68,7 @@ enum ADCMode { ADC_VDD = 255 }; -#define ADC_MODE(mode) extern "C" int __get_adc_mode() { return (int) (mode); } +#define ADC_MODE(mode) extern "C" int __get_adc_mode(void) { return (int) (mode); } typedef enum { FM_QIO = 0x00, diff --git a/cores/esp8266/core_esp8266_phy.c b/cores/esp8266/core_esp8266_phy.c index cc624ade0..e24a933aa 100644 --- a/cores/esp8266/core_esp8266_phy.c +++ b/cores/esp8266/core_esp8266_phy.c @@ -247,18 +247,26 @@ void user_rf_pre_init() { rtc_reg[30] = 0; system_set_os_print(0); + __run_user_rf_pre_init(); } -extern int __get_rf_mode() __attribute__((weak)); -extern int __get_rf_mode() +extern int __get_rf_mode(void) __attribute__((weak)); +extern int __get_rf_mode(void) { return 0; // default mode } -extern int __get_adc_mode() __attribute__((weak)); -extern int __get_adc_mode() +extern int __get_adc_mode(void) __attribute__((weak)); +extern int __get_adc_mode(void) { return 33; // default ADC mode } +extern void __run_user_rf_pre_init(void) __attribute__((weak)); +extern void __run_user_rf_pre_init(void) +{ + return; // default do noting +} + + diff --git a/cores/esp8266/core_esp8266_postmortem.c b/cores/esp8266/core_esp8266_postmortem.c index 2d749108a..f5ede6c76 100644 --- a/cores/esp8266/core_esp8266_postmortem.c +++ b/cores/esp8266/core_esp8266_postmortem.c @@ -30,7 +30,10 @@ extern void __real_system_restart_local(); extern cont_t g_cont; + +static void uart_write_char_d(char c); static void uart0_write_char_d(char c); +static void uart1_write_char_d(char c); static void print_stack(uint32_t start, uint32_t end); static void print_pcs(uint32_t start, uint32_t end); @@ -46,7 +49,7 @@ void __wrap_system_restart_local() { return; } - ets_install_putc1(&uart0_write_char_d); + ets_install_putc1(&uart_write_char_d); if (rst_info.reason == REASON_EXCEPTION_RST) { ets_printf("\nException (%d):\nepc1=0x%08x epc2=0x%08x epc3=0x%08x excvaddr=0x%08x depc=0x%08x\n", @@ -120,6 +123,11 @@ static void print_pcs(uint32_t start, uint32_t end) { ets_printf("<<> USTXC) & 0xff) >= 0x7e) { } @@ -128,3 +136,12 @@ void uart0_write_char_d(char c) { } USF(0) = c; } + +void uart1_write_char_d(char c) { + while (((USS(1) >> USTXC) & 0xff) >= 0x7e) { } + + if (c == '\n') { + USF(1) = '\r'; + } + USF(1) = c; +} diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp index 87576b8df..e35e86593 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp @@ -55,6 +55,30 @@ void ESP8266WiFiClass::mode(WiFiMode m) if(wifi_get_opmode() == (uint8)m) { return; } + + if((m & WIFI_AP)) { + _useApMode = true; + } else { + _useApMode = false; + } + + if((m & WIFI_STA)) { + _useClientMode = true; + } else { + _useClientMode = false; + } + + ETS_UART_INTR_DISABLE(); + wifi_set_opmode(m); + ETS_UART_INTR_ENABLE(); +} + +void ESP8266WiFiClass::_mode(WiFiMode m) +{ + if(wifi_get_opmode() == (uint8)m) { + return; + } + ETS_UART_INTR_DISABLE(); wifi_set_opmode(m); ETS_UART_INTR_ENABLE(); @@ -69,10 +93,10 @@ int ESP8266WiFiClass::begin(const char* ssid, const char *passphrase, int32_t ch if(_useApMode) { // turn on AP+STA mode - mode(WIFI_AP_STA); + _mode(WIFI_AP_STA); } else { // turn on STA mode - mode(WIFI_STA); + _mode(WIFI_STA); } if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { @@ -156,6 +180,31 @@ void ESP8266WiFiClass::config(IPAddress local_ip, IPAddress gateway, IPAddress s _useStaticIp = true; } +int ESP8266WiFiClass::softAPdisconnect(bool wifioff) +{ + struct softap_config conf; + *conf.ssid = 0; + *conf.password = 0; + ETS_UART_INTR_DISABLE(); + wifi_softap_set_config(&conf); + wifi_station_disconnect(); + ETS_UART_INTR_ENABLE(); + + if(wifioff) { + _useApMode = false; + + if( _useClientMode) { + // turn on AP + _mode(WIFI_STA); + } else { + // turn wifi off + _mode(WIFI_OFF); + } + } + + return 0; +} + int ESP8266WiFiClass::disconnect(bool wifioff) { struct station_config conf; @@ -171,10 +220,10 @@ int ESP8266WiFiClass::disconnect(bool wifioff) if(_useApMode) { // turn on AP - mode(WIFI_AP); + _mode(WIFI_AP); } else { // turn wifi off - mode(WIFI_OFF); + _mode(WIFI_OFF); } } @@ -192,10 +241,10 @@ void ESP8266WiFiClass::softAP(const char* ssid, const char* passphrase, int chan _useApMode = true; if(_useClientMode) { // turn on AP+STA mode - mode(WIFI_AP_STA); + _mode(WIFI_AP_STA); } else { // turn on STA mode - mode(WIFI_AP); + _mode(WIFI_AP); } if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { @@ -417,10 +466,10 @@ int8_t ESP8266WiFiClass::scanNetworks(bool async) if(_useApMode) { // turn on AP+STA mode - mode(WIFI_AP_STA); + _mode(WIFI_AP_STA); } else { // turn on STA mode - mode(WIFI_STA); + _mode(WIFI_STA); } int status = wifi_station_get_connect_status(); @@ -645,10 +694,10 @@ bool ESP8266WiFiClass::beginWPSConfig(void) { if(_useApMode) { // turn on AP+STA mode - mode(WIFI_AP_STA); + _mode(WIFI_AP_STA); } else { // turn on STA mode - mode(WIFI_STA); + _mode(WIFI_STA); } disconnect(); @@ -693,10 +742,10 @@ void ESP8266WiFiClass::beginSmartConfig() if(_useApMode) { // turn on AP+STA mode - mode(WIFI_AP_STA); + _mode(WIFI_AP_STA); } else { // turn on STA mode - mode(WIFI_STA); + _mode(WIFI_STA); } _smartConfigStarted = true; diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.h b/libraries/ESP8266WiFi/src/ESP8266WiFi.h index a7201c56d..369892ecf 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.h @@ -104,6 +104,13 @@ public: */ void softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet); + /* + * Disconnect from the network (close AP) + * + * return: one value of wl_status_t enum + */ + int softAPdisconnect(bool wifioff = false); + /* * Disconnect from the network * @@ -348,6 +355,7 @@ public: friend class WiFiServer; protected: + void _mode(WiFiMode); static void _scanDone(void* result, int status); void * _getScanInfoByIndex(int i); static void _smartConfigCallback(uint32_t status, void* result); diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp index 789c1d77e..f874441bd 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp @@ -166,29 +166,34 @@ bool ESP8266WiFiMulti::APlistAdd(const char* ssid, const char *passphrase) { if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { // fail SSID to long or missing! + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] no ssid or ssid to long\n"); return false; } if(passphrase && strlen(passphrase) > 63) { // fail passphrase to long! + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] passphrase to long\n"); return false; } newAP.ssid = strdup(ssid); if(!newAP.ssid) { + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] fail newAP.ssid == 0\n"); return false; } if(passphrase && *passphrase != 0x00) { newAP.passphrase = strdup(passphrase); if(!newAP.passphrase) { + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] fail newAP.passphrase == 0\n"); free(newAP.ssid); return false; } } APlist.push_back(newAP); + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] add SSID: %s\n", newAP.ssid); return true; } diff --git a/tools/sdk/changelog.txt b/tools/sdk/changelog.txt index 5cd5b9cc2..05d32ebb5 100644 --- a/tools/sdk/changelog.txt +++ b/tools/sdk/changelog.txt @@ -1,3 +1,50 @@ +esp_iot_sdk_v1.2.0_15_07_13_p4 Release Note +------------------------------------------- + +Here is a patch of memory optimization based on SDK_v1.2.0 +1. It saved about 8KBytes memory. +2. It revised problem that change mode may cause memory leak. +3. Update SmartConfig to version 2.4.3 + +Please replace the lib in \esp_iot_sdk_v1.2.0\lib + +Thanks for your interest in Espressif Systems and ESP8266 ! + + + + +esp_iot_sdk_v1.2.0_15_07_09_p3 Release Note +------------------------------------------- + +Here is a patch based on SDK_v1.2.0 solved problem that if AP’s SSID is hidden,ESPTOUCH may get wrong BSSID of AP and cause connection fail. +Please replace the lib in \esp_iot_sdk_v1.2.0\lib + +Sorry for the inconvenience. + + + + +esp_iot_sdk_v1.2.0_15_07_09_p2 Release Note +------------------------------------------- + +Updated libssl again. To support SHA-256 and SHA-512. + +Thanks for your interest in Espressif Systems and ESP8266 ! + + + + +esp_iot_sdk_v1.2.0_15_07_08_p1 Release Note +------------------------------------------- + +Here is a patch based on SDK_v1.2.0 solved problem that abnormal SSL disconnection may cause reset. +Please replace the lib in \esp_iot_sdk_v1.2.0\lib + +Sorry for the inconvenience. + + + + esp_iot_sdk_v1.2.0_15_07_03 Release Note ------------------------------------------- Resolved Issues(Bugs below are eligible for Bug Bounty Program): diff --git a/tools/sdk/lib/libnet80211.a b/tools/sdk/lib/libnet80211.a index 59fc632e4..d7af5f465 100644 Binary files a/tools/sdk/lib/libnet80211.a and b/tools/sdk/lib/libnet80211.a differ diff --git a/tools/sdk/lib/libpp.a b/tools/sdk/lib/libpp.a index ae4b8b703..d8b550c7f 100644 Binary files a/tools/sdk/lib/libpp.a and b/tools/sdk/lib/libpp.a differ diff --git a/tools/sdk/lib/libsmartconfig.a b/tools/sdk/lib/libsmartconfig.a index 0f7fb9a37..f3b0d6554 100644 Binary files a/tools/sdk/lib/libsmartconfig.a and b/tools/sdk/lib/libsmartconfig.a differ diff --git a/tools/sdk/lib/libssl.a b/tools/sdk/lib/libssl.a index b49dd7bd1..0634025f1 100644 Binary files a/tools/sdk/lib/libssl.a and b/tools/sdk/lib/libssl.a differ diff --git a/tools/sdk/version b/tools/sdk/version index e876391a5..4139f843a 100644 --- a/tools/sdk/version +++ b/tools/sdk/version @@ -1 +1 @@ -1.2.0_15_07_03 \ No newline at end of file +1.2.0_15_07_13_p4 \ No newline at end of file