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
26913836
Commit
26913836
authored
Jun 29, 2015
by
Luna
Browse files
added tmr.interval
parent
c1d2eb41
Changes
1
Hide whitespace changes
Inline
Side-by-side
app/modules/tmr.c
View file @
26913836
...
...
@@ -17,7 +17,7 @@ tmr.alarm() -- not changed
tmr.stop() -- changed, see below. use tmr.unregister for old functionality
tmr.register(id, interval, mode, function)
bind function with timer and set the inter
c
al in ms
bind function with timer and set the inter
v
al in ms
the mode can be:
tmr.ALARM_SINGLE for a single run alarm
tmr.ALARM_SEMI for a multiple single run alarm
...
...
@@ -25,7 +25,7 @@ tmr.register(id, interval, mode, function)
tmr.register does NOT start the timer
tmr.alarm is a tmr.register & tmr.start macro
tmr.unregister(id)
stop alarm, unbind function and clean
s
up memory
stop alarm, unbind function and clean up memory
not needed for ALARM_SINGLE, as it unregisters itself
tmr.start(id)
ret: bool
...
...
@@ -35,10 +35,17 @@ tmr.stop(id)
stops a alarm, returns true on success
this call dose not free any memory, to do so use tmr.unregister
stopped alarms can be started with start
tmr.interval(id, interval)
set alarm interval, running alarm will be restarted
tmr.state(id)
ret: (bool, int) or nil
returns alarm status (true=started/false=stopped) and mode
nil if timer is unregistered
tmr.softwd(int)
set a negative value to stop the timer
any other value starts the timer, when the
countdown reaches zero, the device restarts
the timer units are seconds
*/
#define MIN_OPT_LEVEL 2
...
...
@@ -59,7 +66,7 @@ tmr.state(id)
//well, the following are my assumptions
//why, oh why is there no good documentation
//chinese compan
y
es should learn from Atmel
//chinese compan
i
es should learn from Atmel
extern
void
ets_timer_arm_new
(
os_timer_t
*
t
,
uint32_t
milliseconds
,
uint32_t
repeat_flag
,
uint32_t
isMstimer
);
extern
void
ets_timer_disarm
(
os_timer_t
*
t
);
extern
void
ets_timer_setfn
(
os_timer_t
*
t
,
os_timer_func_t
*
f
,
void
*
arg
);
...
...
@@ -211,6 +218,24 @@ static int tmr_unregister(lua_State* L){
return
0
;
}
// Lua: tmr.interval( id, interval )
static
int
tmr_interval
(
lua_State
*
L
){
uint8_t
id
=
luaL_checkinteger
(
L
,
1
);
MOD_CHECK_ID
(
tmr
,
id
);
timer_t
tmr
=
&
alarm_timers
[
id
];
sint32_t
interval
=
luaL_checkinteger
(
L
,
2
);
if
(
interval
<=
0
)
return
luaL_error
(
L
,
"wrong arg range"
);
if
(
tmr
->
mode
!=
TIMER_MODE_OFF
){
tmr
->
interval
=
interval
;
if
(
!
(
tmr
->
mode
&
TIMER_IDLE_FLAG
)){
ets_timer_disarm
(
&
tmr
->
os
);
ets_timer_arm_new
(
&
tmr
->
os
,
tmr
->
interval
,
tmr
->
mode
==
TIMER_MODE_AUTO
,
1
);
}
}
return
0
;
}
// Lua: tmr.state( id )
static
int
tmr_state
(
lua_State
*
L
){
uint8_t
id
=
luaL_checkinteger
(
L
,
1
);
...
...
@@ -297,6 +322,7 @@ const LUA_REG_TYPE tmr_map[] = {
{
LSTRKEY
(
"stop"
),
LFUNCVAL
(
tmr_stop
)
},
{
LSTRKEY
(
"unregister"
),
LFUNCVAL
(
tmr_unregister
)
},
{
LSTRKEY
(
"state"
),
LFUNCVAL
(
tmr_state
)
},
{
LSTRKEY
(
"interval"
),
LFUNCVAL
(
tmr_interval
)
},
#if LUA_OPTIMIZE_MEMORY > 0
{
LSTRKEY
(
"ALARM_SINGLE"
),
LNUMVAL
(
TIMER_MODE_SINGLE
)
},
{
LSTRKEY
(
"ALARM_SEMI"
),
LNUMVAL
(
TIMER_MODE_SEMI
)
},
...
...
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