Skip to content

Commit f0cf0be

Browse files
committed
SmartConfig refactoring
1 parent 6558d8e commit f0cf0be

File tree

4 files changed

+40
-37
lines changed

4 files changed

+40
-37
lines changed

hardware/esp8266com/esp8266/libraries/ESP8266WiFi/examples/SmartConfig renamed to hardware/esp8266com/esp8266/libraries/ESP8266WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino

+3-4
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,20 @@
44
WiFiUDP Udp;
55

66
void setup() {
7-
uint8_t cnt = 0;
7+
int cnt = 0;
88

99
Serial.begin(115200);
1010

1111
WiFi.mode(WIFI_STA);
12-
WiFi.begin();
1312

1413
while(WiFi.status() != WL_CONNECTED) {
1514
delay(500);
1615
Serial.print(".");
1716
if(cnt++ >= 10){
18-
WiFi.setSmartLink();
17+
WiFi.beginSmartConfig();
1918
while(1){
2019
delay(1000);
21-
if(WiFi.getSmartlinkStatus() == SC_STATUS_LINK_OVER){
20+
if(WiFi.smartConfigDone()){
2221
Serial.println("SmartConfig Success");
2322
break;
2423
}

hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp

+27-18
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extern "C" {
2727
#include "osapi.h"
2828
#include "mem.h"
2929
#include "user_interface.h"
30+
#include "smartconfig.h"
3031
#include "lwip/opt.h"
3132
#include "lwip/err.h"
3233
#include "lwip/dns.h"
@@ -48,17 +49,6 @@ void ESP8266WiFiClass::mode(WiFiMode m)
4849
ETS_UART_INTR_ENABLE();
4950
}
5051

51-
int ESP8266WiFiClass::begin()
52-
{
53-
static struct station_config conf;
54-
wifi_station_get_config(&conf);
55-
56-
const char* ssid = reinterpret_cast<const char*>(conf.ssid);
57-
const char* passphrase = reinterpret_cast<const char*>(conf.password);
58-
59-
begin(ssid,passphrase);
60-
61-
}
6252

6353
int ESP8266WiFiClass::begin(const char* ssid)
6454
{
@@ -377,23 +367,42 @@ int ESP8266WiFiClass::hostByName(const char* aHostname, IPAddress& aResult)
377367
return (aResult != 0) ? 1 : 0;
378368
}
379369

380-
void ESP8266WiFiClass::setSmartLink()
370+
void ESP8266WiFiClass::beginSmartConfig()
381371
{
382-
smartconfig_start(SC_TYPE_ESPTOUCH,smartconfig_call_back);//SC_TYPE_ESPTOUCH use ESPTOUCH for smartconfig, or use SC_TYPE_AIRKISS for AIRKISS
372+
if (_smartConfigStarted)
373+
return;
374+
375+
WiFi.mode(WIFI_STA);
376+
377+
_smartConfigStarted = true;
378+
379+
//SC_TYPE_ESPTOUCH use ESPTOUCH for smartconfig, or use SC_TYPE_AIRKISS for AIRKISS
380+
smartconfig_start(SC_TYPE_ESPTOUCH, &ESP8266WiFiClass::_smartConfigDone);
383381
}
384382

385-
sc_status ESP8266WiFiClass::getSmartlinkStatus(){
386-
return smartconfig_get_status();//when smartconfig complete, return SC_STATUS_LINK_OVER
383+
void ESP8266WiFiClass::stopSmartConfig()
384+
{
385+
if (!_smartConfigStarted)
386+
return;
387+
388+
smartconfig_stop();
389+
_smartConfigStarted = false;
387390
}
388391

389-
void smartconfig_call_back(void *data)
392+
bool ESP8266WiFiClass::smartConfigDone(){
393+
if (!_smartConfigStarted)
394+
return false;
395+
396+
return smartconfig_get_status() == SC_STATUS_LINK_OVER;
397+
}
398+
399+
void ESP8266WiFiClass::_smartConfigDone(void* result)
390400
{
391-
struct station_config *sta_conf = (struct station_config *)data;
401+
station_config* sta_conf = reinterpret_cast<station_config*>(result);
392402

393403
wifi_station_set_config(sta_conf);
394404
wifi_station_disconnect();
395405
wifi_station_connect();
396-
397406
}
398407

399408

hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/ESP8266WiFi.h

+9-14
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,12 @@
2626

2727
extern "C" {
2828
#include "include/wl_definitions.h"
29-
#include "smartconfig.h"
3029
}
3130

3231
#include "IPAddress.h"
3332
#include "WiFiClient.h"
3433
#include "WiFiServer.h"
3534

36-
void smartconfig_call_back(void *data);
37-
3835
enum WiFiMode { WIFI_STA = 1, WIFI_AP = 2, WIFI_AP_STA = 3 };
3936

4037
class ESP8266WiFiClass
@@ -44,13 +41,7 @@ class ESP8266WiFiClass
4441
ESP8266WiFiClass();
4542

4643
void mode(WiFiMode);
47-
48-
/* Start Wifi reconnection
49-
* used for Smartconfig
50-
* no param.
51-
*/
52-
int begin();
53-
44+
5445

5546
/* Start Wifi connection for OPEN networks
5647
*
@@ -216,22 +207,26 @@ class ESP8266WiFiClass
216207
/*
217208
* Start SmartConfig
218209
*
219-
*/
220-
void setSmartLink();
210+
*/
211+
void beginSmartConfig();
221212

222213
/*
223214
* Query SmartConfig status, to decide when stop config
224215
*
225216
*/
226-
sc_status getSmartlinkStatus();
227-
217+
bool smartConfigDone();
218+
219+
void stopSmartConfig();
228220

229221
friend class WiFiClient;
230222
friend class WiFiServer;
231223

232224
protected:
233225
static void _scanDone(void* result, int status);
234226
void * _getScanInfoByIndex(int i);
227+
static void _smartConfigDone(void* result);
228+
bool _smartConfigStarted = false;
229+
235230
static size_t _scanCount;
236231
static void* _scanResult;
237232

hardware/esp8266com/esp8266/platform.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ compiler.S.flags=-c -g -x assembler-with-cpp -MMD
2323
compiler.c.elf.ldscript=eagle.app.v6.ld
2424
compiler.c.elf.flags=-nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" "-T{compiler.c.elf.ldscript}"
2525
compiler.c.elf.cmd=xtensa-lx106-elf-gcc
26-
compiler.c.elf.libs=-lgcc -lm -lhal -lphy -lnet80211 -llwip -lwpa -lmain -lpp
26+
compiler.c.elf.libs=-lgcc -lm -lhal -lphy -lnet80211 -llwip -lwpa -lmain -lpp -lsmartconfig
2727

2828
compiler.cpp.cmd=xtensa-lx106-elf-g++
2929
compiler.cpp.flags=-c -Os -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -std=c++11 -MMD

0 commit comments

Comments
 (0)