From 4fdd546ad5b431eab08b80a9ddf91d6a224a6f10 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Sun, 24 May 2015 15:35:18 +0300 Subject: [PATCH] Fix build --- cores/esp8266/Esp.cpp | 4 ++- cores/esp8266/core_esp8266_wiring_digital.c | 2 ++ cores/esp8266/esp8266_peri.h | 2 +- libraries/ESP8266WiFi/src/ESP8266WiFi.cpp | 29 ++++++++++++++------- libraries/ESP8266WiFi/src/ESP8266WiFi.h | 3 ++- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/cores/esp8266/Esp.cpp b/cores/esp8266/Esp.cpp index 67e6a41af..2a9035519 100644 --- a/cores/esp8266/Esp.cpp +++ b/cores/esp8266/Esp.cpp @@ -27,7 +27,9 @@ extern "C" { //extern "C" void ets_wdt_init(uint32_t val); extern "C" void ets_wdt_enable(void); extern "C" void ets_wdt_disable(void); -extern "C" void wdt_feed(void); +extern "C" void wdt_feed(void) { + +} /** * User-defined Literals diff --git a/cores/esp8266/core_esp8266_wiring_digital.c b/cores/esp8266/core_esp8266_wiring_digital.c index 54c2b557b..57702f469 100644 --- a/cores/esp8266/core_esp8266_wiring_digital.c +++ b/cores/esp8266/core_esp8266_wiring_digital.c @@ -25,6 +25,8 @@ #include "eagle_soc.h" #include "ets_sys.h" +uint8_t esp8266_gpioToFn[16] = {0x34, 0x18, 0x38, 0x14, 0x3C, 0x40, 0x1C, 0x20, 0x24, 0x28, 0x2C, 0x30, 0x04, 0x08, 0x0C, 0x10}; + extern void __pinMode(uint8_t pin, uint8_t mode) { if(pin < 16){ if(mode == SPECIAL){ diff --git a/cores/esp8266/esp8266_peri.h b/cores/esp8266/esp8266_peri.h index d3841740b..e2998cf54 100644 --- a/cores/esp8266/esp8266_peri.h +++ b/cores/esp8266/esp8266_peri.h @@ -68,7 +68,7 @@ #define GPCD 2 //DRIVER 0:normal,1:open drain #define GPCS 0 //SOURCE 0:GPIO_DATA,1:SigmaDelta -static uint8_t esp8266_gpioToFn[16] = {0x34, 0x18, 0x38, 0x14, 0x3C, 0x40, 0x1C, 0x20, 0x24, 0x28, 0x2C, 0x30, 0x04, 0x08, 0x0C, 0x10}; +extern uint8_t esp8266_gpioToFn[16]; #define GPF(p) ESP8266_REG(0x800 + esp8266_gpioToFn[(p & 0xF)]) #define GPMUX ESP8266_REG(0x800) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp index 5a3db6143..31b4df1eb 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp @@ -468,9 +468,10 @@ void ESP8266WiFiClass::beginSmartConfig() } _smartConfigStarted = true; + _smartConfigDone = false; //SC_TYPE_ESPTOUCH use ESPTOUCH for smartconfig, or use SC_TYPE_AIRKISS for AIRKISS - smartconfig_start(SC_TYPE_ESPTOUCH, &ESP8266WiFiClass::_smartConfigDone); + smartconfig_start(SC_TYPE_ESPTOUCH, reinterpret_cast(&ESP8266WiFiClass::_smartConfigCallback), 1); } void ESP8266WiFiClass::stopSmartConfig() @@ -482,22 +483,30 @@ void ESP8266WiFiClass::stopSmartConfig() _smartConfigStarted = false; } -bool ESP8266WiFiClass::smartConfigDone(){ +bool ESP8266WiFiClass::smartConfigDone() +{ if (!_smartConfigStarted) return false; - return smartconfig_get_status() == SC_STATUS_LINK_OVER; + return _smartConfigDone; } -void ESP8266WiFiClass::_smartConfigDone(void* result) +void ESP8266WiFiClass::_smartConfigCallback(uint32_t st, void* result) { - station_config* sta_conf = reinterpret_cast(result); - - wifi_station_set_config(sta_conf); - wifi_station_disconnect(); - wifi_station_connect(); -} + sc_status status = (sc_status) st; + if (status == SC_STATUS_LINK) { + station_config* sta_conf = reinterpret_cast(result); + + wifi_station_set_config(sta_conf); + wifi_station_disconnect(); + wifi_station_connect(); + WiFi._smartConfigDone = true; + } + else if (status == SC_STATUS_LINK_OVER) { + WiFi.stopSmartConfig(); + } +} void ESP8266WiFiClass::printDiag(Print& p) { diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.h b/libraries/ESP8266WiFi/src/ESP8266WiFi.h index 1a3a7b366..386938c53 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.h @@ -287,8 +287,9 @@ public: protected: static void _scanDone(void* result, int status); void * _getScanInfoByIndex(int i); - static void _smartConfigDone(void* result); + static void _smartConfigCallback(uint32_t status, void* result); bool _smartConfigStarted = false; + bool _smartConfigDone = false; bool _useApMode; bool _useClientMode;