Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
09269a64
Commit
09269a64
authored
Mar 17, 2016
by
Terry Ellison
Browse files
Merge pull request #1154 from dnc40085/dev_1065_fix
fix for #1065
parents
30f2c5ca
7def6ec7
Changes
2
Hide whitespace changes
Inline
Side-by-side
app/modules/wifi.c
View file @
09269a64
...
...
@@ -991,117 +991,65 @@ static int wifi_station_status( lua_State* L )
return
1
;
}
/**
* wifi.sta.eventMonStop()
* Description:
* Stop wifi station event monitor
* Syntax:
* wifi.sta.eventMonStop()
* wifi.sta.eventMonStop("unreg all")
* Parameters:
* "unreg all": unregister all previously registered functions
* Returns:
* Nothing.
*
* Example:
--stop wifi event monitor
wifi.sta.eventMonStop()
--stop wifi event monitor and unregister all callbacks
wifi.sta.eventMonStop("unreg all")
*/
static
void
wifi_station_event_mon_stop
(
lua_State
*
L
)
// wifi.sta.eventMonStop()
void
wifi_station_event_mon_stop
(
lua_State
*
L
)
{
os_timer_disarm
(
&
wifi_sta_status_timer
);
if
(
lua_isstring
(
L
,
1
))
{
if
(
c_strcmp
(
luaL_checkstring
(
L
,
1
),
"unreg all"
)
==
0
)
int
i
;
for
(
i
=
0
;
i
<
6
;
i
++
)
{
int
i
;
for
(
i
=
0
;
i
<
6
;
i
++
)
if
(
wifi_status_cb_ref
[
i
]
!=
LUA_NOREF
)
{
if
(
wifi_status_cb_ref
[
i
]
!=
LUA_NOREF
)
{
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
wifi_status_cb_ref
[
i
]);
wifi_status_cb_ref
[
i
]
=
LUA_NOREF
;
}
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
wifi_status_cb_ref
[
i
]);
wifi_status_cb_ref
[
i
]
=
LUA_NOREF
;
}
}
}
return
;
}
static
void
wifi_status_cb
(
int
arg
)
{
if
(
wifi_get_opmode
()
==
2
)
lua_State
*
L
=
lua_getstate
();
if
(
wifi_get_opmode
()
==
SOFTAP_MODE
)
{
os_timer_disarm
(
&
wifi_sta_status_timer
);
return
;
os_timer_disarm
(
&
wifi_sta_status_timer
);
return
;
}
int
wifi_status
=
wifi_station_get_connect_status
();
if
(
wifi_status
!=
prev_wifi_status
)
int
wifi_status
=
wifi_station_get_connect_status
();
if
(
wifi_status
!=
prev_wifi_status
)
{
if
(
wifi_status_cb_ref
[
wifi_status
]
!=
LUA_NOREF
)
{
lua_rawgeti
(
gL
,
LUA_REGISTRYINDEX
,
wifi_status_cb_ref
[
wifi_status
]);
lua_call
(
gL
,
0
,
0
);
}
if
(
wifi_status_cb_ref
[
wifi_status
]
!=
LUA_NOREF
)
{
lua_rawgeti
(
L
,
LUA_REGISTRYINDEX
,
wifi_status_cb_ref
[
wifi_status
]);
lua_pushnumber
(
L
,
prev_wifi_status
);
lua_call
(
L
,
1
,
0
);
}
}
prev_wifi_status
=
wifi_status
;
prev_wifi_status
=
wifi_status
;
}
/**
* wifi.sta.eventMonReg()
* Description:
* Register callback for wifi station status event
* Syntax:
* wifi.sta.eventMonReg(wifi_status, function)
* wifi.sta.eventMonReg(wifi.status, "unreg") //unregister callback
* Parameters:
* wifi_status: wifi status you would like to set callback for
* Valid wifi states:
* wifi.STA_IDLE
* wifi.STA_CONNECTING
* wifi.STA_WRONGPWD
* wifi.STA_APNOTFOUND
* wifi.STA_FAIL
* wifi.STA_GOTIP
* function: function to perform
* "unreg": unregister previously registered function
* Returns:
* Nothing.
*
* Example:
--register callback
wifi.sta.eventMonReg(0, function() print("STATION_IDLE") end)
wifi.sta.eventMonReg(1, function() print("STATION_CONNECTING") end)
wifi.sta.eventMonReg(2, function() print("STATION_WRONG_PASSWORD") end)
wifi.sta.eventMonReg(3, function() print("STATION_NO_AP_FOUND") end)
wifi.sta.eventMonReg(4, function() print("STATION_CONNECT_FAIL") end)
wifi.sta.eventMonReg(5, function() print("STATION_GOT_IP") end)
--unregister callback
wifi.sta.eventMonReg(0, "unreg")
*/
static
int
wifi_station_event_mon_reg
(
lua_State
*
L
)
// wifi.sta.eventMonReg()
int
wifi_station_event_mon_reg
(
lua_State
*
L
)
{
gL
=
L
;
uint8
id
=
luaL_checknumber
(
L
,
1
);
if
(
!
(
id
>=
0
&&
id
<=
5
))
uint8
id
=
(
uint8
)
luaL_checknumber
(
L
,
1
);
if
((
id
>
5
))
// verify user specified a valid wifi status
{
return
luaL_error
(
L
,
"valid wifi status:0-5"
);
return
luaL_error
(
L
,
"valid wifi status:0-5"
);
}
if
(
lua_type
(
L
,
2
)
==
LUA_TFUNCTION
||
lua_type
(
L
,
2
)
==
LUA_TLIGHTFUNCTION
)
if
(
lua_type
(
L
,
2
)
==
LUA_TFUNCTION
||
lua_type
(
L
,
2
)
==
LUA_TLIGHTFUNCTION
)
//check if 2nd item on stack is a function
{
lua_pushvalue
(
L
,
2
);
//
copy argument (func) to the
top of stack
lua_pushvalue
(
L
,
2
);
//
push function to
top of stack
if
(
wifi_status_cb_ref
[
id
]
!=
LUA_NOREF
)
{
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
wifi_status_cb_ref
[
id
]);
}
wifi_status_cb_ref
[
id
]
=
luaL_ref
(
L
,
LUA_REGISTRYINDEX
);
}
else
if
(
c_strcmp
(
luaL_checkstring
(
L
,
2
),
"unreg"
)
==
0
)
else
{
if
(
wifi_status_cb_ref
[
id
]
!=
LUA_NOREF
)
{
...
...
@@ -1113,25 +1061,7 @@ static int wifi_station_event_mon_reg(lua_State* L)
}
/**
* wifi.sta.eventMonStart()
* Description:
* Start wifi station event monitor
* Syntax:
* wifi.sta.eventMonStart()
* wifi.sta.eventMonStart(mS)
* Parameters:
* mS:interval between checks in milliseconds. defaults to 150 mS if not provided
* Returns:
* Nothing.
*
* Example:
--start wifi event monitor with default interval
wifi.sta.eventMonStart()
--start wifi event monitor with 100 mS interval
wifi.sta.eventMonStart(100)
*/
//wifi.sta.eventMonStart()
static
int
wifi_station_event_mon_start
(
lua_State
*
L
)
{
if
(
wifi_get_opmode
()
==
SOFTAP_MODE
)
...
...
docs/en/modules/wifi.md
View file @
09269a64
...
...
@@ -326,19 +326,18 @@ none
Registers callbacks for WiFi station status events.
#### Syntax
-
`wifi.sta.eventMonReg(wifi_status, function([previous_state]))`
-
`wifi.sta.eventMonReg(wifi.status, "unreg")`
-
`wifi.sta.eventMonReg(wifi_status[, function([previous_state])])`
#### Parameters
-
`wifi_status`
WiFi status you would like to set callback for
, one of
:
-
`wifi_status`
WiFi status you would like to set
a
callback for:
-
`wifi.STA_IDLE`
-
`wifi.STA_CONNECTING`
-
`wifi.STA_WRONGPWD`
-
`wifi.STA_APNOTFOUND`
-
`wifi.STA_FAIL`
-
`wifi.STA_GOTIP`
-
`function`
function to perform when event occurs
-
`"unreg"`
unregister previously
register
ed
callback
-
`function`
callback
function to perform when event occurs
-
Note: leaving field blank un
register
s
callback
.
-
`previous_state`
previous wifi_state(0 - 5)
#### Returns
...
...
@@ -364,7 +363,7 @@ wifi.sta.eventMonReg(wifi.STA_CONNECTING, function(previous_State)
end
)
--unregister callback
wifi
.
sta
.
eventMonReg
(
wifi
.
STA_IDLE
,
"unreg"
)
wifi
.
sta
.
eventMonReg
(
wifi
.
STA_IDLE
)
```
#### See also
-
[
`wifi.sta.eventMonStart()`
](
#wifistaeventmonstart
)
...
...
@@ -395,15 +394,16 @@ wifi.sta.eventMonStart(100)
#### See also
-
[
`wifi.sta.eventMonReg()`
](
#wifistaeventmonreg
)
-
[
`wifi.sta.eventMonStop()`
](
#wifistaeventmonstop
)
-
## wifi.sta.eventMonStop()
Stops WiFi station event monitor.
#### Syntax
`wifi.sta.eventMonStop([
"
unreg
all
"
])`
`wifi.sta.eventMonStop([unreg
ister_
all])`
#### Parameters
`"unreg all"`
unregister all previously registered functions
-
`unregister_all`
enter 1 to unregister all previously registered functions.
-
Note: leave blank to leave callbacks registered
#### Returns
`nil`
...
...
@@ -414,7 +414,7 @@ Stops WiFi station event monitor.
wifi
.
sta
.
eventMonStop
()
--stop WiFi event monitor and unregister all callbacks
wifi
.
sta
.
eventMonStop
(
"unreg all"
)
wifi
.
sta
.
eventMonStop
(
1
)
```
#### See also
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment