ucentral-state: improve led blink handling

Fixes: WIFI-14194
Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
John Crispin
2024-11-04 14:58:14 +01:00
parent c0095b3ef9
commit 010e10e7e8

View File

@@ -138,14 +138,14 @@ function factory_reset_timeout() {
let blink_timer;
function blink_timeout() {
if (!blink_timer)
return;
blink_timer.cancel();
blink_timer = null;
if (current_state == 'blink') {
current_state = 'online';
}
system('/etc/init.d/led turnon');
if (!blink_timer)
return;
blink_timer.cancel();
blink_timer = null;
}
let state_handler = {
@@ -183,7 +183,12 @@ let state_handler = {
},
blink: function(args) {
if (!args.duration) {
blink_timeout();
return 0;
}
system('/etc/init.d/led blink');
if (args.duration != 0xffff)
blink_timer = uloop.timer((args.duration || 10) * 1000, blink_timeout);
return 0;
},
@@ -193,10 +198,12 @@ let ubus_methods = {
set: {
call: function(req) {
ulog(LOG_INFO, 'state %s -> %s\n', current_state, req.args.state);
if (current_state == req.args.state)
if (current_state == req.args.state && req.args.state != 'blink')
return;
if (!state_handler[req.args.state])
return ubus.STATUS_INVALID_ARGUMENT;
if (current_state != req.args.state)
ulog(LOG_INFO, 'state %s -> %s\n', current_state, req.args.state);
current_state = req.args.state;
blink_timeout();
ulog(LOG_INFO, 'set state -> ' + req.args.state + '\n');