74 lines
1.7 KiB
C
74 lines
1.7 KiB
C
// Module for WPS
|
|
// by F.J. Exoo
|
|
|
|
#include "module.h"
|
|
#include "lauxlib.h"
|
|
#include "platform.h"
|
|
|
|
static int wps_callback_ref;
|
|
|
|
// Lua: wps.disable()
|
|
static int ICACHE_FLASH_ATTR wps_disable(lua_State* L)
|
|
{
|
|
wifi_wps_disable();
|
|
return 0;
|
|
}
|
|
|
|
// Lua: wps.enable()
|
|
static int ICACHE_FLASH_ATTR wps_enable(lua_State* L)
|
|
{
|
|
wifi_wps_enable(WPS_TYPE_PBC);
|
|
return 0;
|
|
}
|
|
|
|
// WPS start callback function
|
|
LOCAL void ICACHE_FLASH_ATTR user_wps_status_cb(int status)
|
|
{
|
|
lua_State *L = lua_getstate();
|
|
|
|
if (wps_callback_ref != LUA_NOREF) {
|
|
lua_rawgeti(L, LUA_REGISTRYINDEX, wps_callback_ref);
|
|
lua_pushinteger(L, status);
|
|
lua_call(L, 1, 0);
|
|
}
|
|
}
|
|
|
|
// Lua: wps.start( function())
|
|
static int ICACHE_FLASH_ATTR wps_start(lua_State* L)
|
|
{
|
|
// retrieve callback arg (optional)
|
|
luaL_unref(L, LUA_REGISTRYINDEX, wps_callback_ref);
|
|
|
|
wps_callback_ref = LUA_NOREF;
|
|
|
|
if (lua_type(L, 1) == LUA_TFUNCTION || lua_type(L, 1) == LUA_TLIGHTFUNCTION)
|
|
wps_callback_ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
|
else
|
|
return luaL_error (L, "Argument not a function");
|
|
|
|
wifi_set_wps_cb(user_wps_status_cb);
|
|
wifi_wps_start();
|
|
return 0;
|
|
}
|
|
|
|
// Module function map
|
|
const LUA_REG_TYPE wps_map[] = {
|
|
{ LSTRKEY( "disable" ), LFUNCVAL( wps_disable ) },
|
|
{ LSTRKEY( "enable" ), LFUNCVAL( wps_enable ) },
|
|
{ LSTRKEY( "start" ), LFUNCVAL( wps_start ) },
|
|
{ LSTRKEY( "SUCCESS" ), LNUMVAL( WPS_CB_ST_SUCCESS ) },
|
|
{ LSTRKEY( "FAILED" ), LNUMVAL( WPS_CB_ST_FAILED ) },
|
|
{ LSTRKEY( "TIMEOUT" ), LNUMVAL( WPS_CB_ST_TIMEOUT ) },
|
|
{ LSTRKEY( "WEP" ), LNUMVAL( WPS_CB_ST_WEP ) },
|
|
{ LSTRKEY( "SCAN_ERR" ), LNUMVAL( 4 ) }, // WPS_CB_ST_SCAN_ERR
|
|
{ LNILKEY, LNILVAL }
|
|
};
|
|
|
|
int luaopen_wps( lua_State *L )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
NODEMCU_MODULE(WPS, "wps", wps_map, luaopen_wps);
|
|
|