Fix and support Wi-Fi smart link (esp-touch and air-kiss).

Espressif open-source android and iOs APP,
See also https://github.com/espressifapp
Note: Must use ESP-TOUCH-V021 in espressif app history.
This commit is contained in:
vowstar 2015-07-04 02:27:51 +08:00
parent 125d2173d6
commit fb0e4722b8
3 changed files with 73 additions and 11 deletions

View File

@ -17,23 +17,48 @@
static int wifi_smart_succeed = LUA_NOREF; static int wifi_smart_succeed = LUA_NOREF;
static uint8 getap_output_format=0; static uint8 getap_output_format=0;
#if defined( NODE_SMART_OLDSTYLE )
#else
static lua_State* smart_L = NULL;
#endif
static void wifi_smart_succeed_cb(void *arg){ static void wifi_smart_succeed_cb(void *arg){
NODE_DBG("wifi_smart_succeed_cb is called.\n"); NODE_DBG("wifi_smart_succeed_cb is called.\n");
#if defined( NODE_SMART_OLDSTYLE )
if( !arg ) if( !arg )
return; return;
#if 0 if(wifi_smart_succeed == LUA_NOREF)
return;
lua_State* L = (lua_State *)arg;
lua_rawgeti(L, LUA_REGISTRYINDEX, wifi_smart_succeed);
lua_call(L, 0, 0);
#else
if( !arg )
return;
struct station_config *sta_conf = arg; struct station_config *sta_conf = arg;
wifi_station_set_config(sta_conf); wifi_station_set_config(sta_conf);
wifi_station_disconnect(); wifi_station_disconnect();
wifi_station_connect(); wifi_station_connect();
if(wifi_smart_succeed != LUA_NOREF)
{
lua_rawgeti(smart_L, LUA_REGISTRYINDEX, wifi_smart_succeed);
lua_pushstring(smart_L, sta_conf->ssid);
lua_pushstring(smart_L, sta_conf->password);
lua_call(smart_L, 2, 0);
luaL_unref(smart_L, LUA_REGISTRYINDEX, wifi_smart_succeed);
wifi_smart_succeed = LUA_NOREF;
}
smartconfig_stop(); smartconfig_stop();
#endif
if(wifi_smart_succeed == LUA_NOREF) #endif // defined( NODE_SMART_OLDSTYLE )
return;
lua_State* L = (lua_State *)arg;
lua_rawgeti(L, LUA_REGISTRYINDEX, wifi_smart_succeed);
lua_call(L, 0, 0);
} }
static int wifi_scan_succeed = LUA_NOREF; static int wifi_scan_succeed = LUA_NOREF;
@ -107,6 +132,9 @@ static void wifi_scan_done(void *arg, STATUS status)
// Lua: smart(type, function succeed_cb) // Lua: smart(type, function succeed_cb)
static int wifi_start_smart( lua_State* L ) static int wifi_start_smart( lua_State* L )
{ {
#if defined( NODE_SMART_OLDSTYLE )
unsigned channel; unsigned channel;
int stack = 1; int stack = 1;
@ -133,15 +161,49 @@ static int wifi_start_smart( lua_State* L )
}else{ }else{
smart_begin(channel, (smart_succeed )wifi_smart_succeed_cb, L); smart_begin(channel, (smart_succeed )wifi_smart_succeed_cb, L);
} }
// smartconfig_start(0, wifi_smart_succeed_cb);
#else
if(wifi_get_opmode() != STATION_MODE)
{
return luaL_error( L, "Smart link only in STATION mode" );
}
uint8_t smart_type = 0;
int stack = 1;
smart_L = L;
if ( lua_isnumber(L, stack) )
{
smart_type = lua_tointeger(L, stack);
stack++;
}
if (lua_type(L, stack) == LUA_TFUNCTION || lua_type(L, stack) == LUA_TLIGHTFUNCTION)
{
lua_pushvalue(L, stack); // copy argument (func) to the top of stack
if(wifi_smart_succeed != LUA_NOREF)
luaL_unref(L, LUA_REGISTRYINDEX, wifi_smart_succeed);
wifi_smart_succeed = luaL_ref(L, LUA_REGISTRYINDEX);
}
if ( smart_type > 1 )
return luaL_error( L, "wrong arg range" );
smartconfig_start(smart_type, wifi_smart_succeed_cb);
#endif // defined( NODE_SMART_OLDSTYLE )
return 0; return 0;
} }
// Lua: exit_smart() // Lua: exit_smart()
static int wifi_exit_smart( lua_State* L ) static int wifi_exit_smart( lua_State* L )
{ {
#if defined( NODE_SMART_OLDSTYLE )
smart_end(); smart_end();
// smartconfig_stop(); #else
smartconfig_stop();
#endif // defined( NODE_SMART_OLDSTYLE )
if(wifi_smart_succeed != LUA_NOREF) if(wifi_smart_succeed != LUA_NOREF)
luaL_unref(L, LUA_REGISTRYINDEX, wifi_smart_succeed); luaL_unref(L, LUA_REGISTRYINDEX, wifi_smart_succeed);
wifi_smart_succeed = LUA_NOREF; wifi_smart_succeed = LUA_NOREF;

View File

@ -5,7 +5,7 @@ MEMORY
dport0_0_seg : org = 0x3FF00000, len = 0x10 dport0_0_seg : org = 0x3FF00000, len = 0x10
dram0_0_seg : org = 0x3FFE8000, len = 0x14000 dram0_0_seg : org = 0x3FFE8000, len = 0x14000
iram1_0_seg : org = 0x40100000, len = 0x8000 iram1_0_seg : org = 0x40100000, len = 0x8000
irom0_0_seg : org = 0x40210000, len = 0x60000 irom0_0_seg : org = 0x40210000, len = 0x80000
} }
PHDRS PHDRS

Binary file not shown.