Badger2040W: Fix wakeup and quit to launcher button handling.

pull/633/head
Phil Howard 2023-01-31 15:20:41 +00:00 zatwierdzone przez Phil Howard
rodzic 26eeb2b042
commit cbcd9edd9a
5 zmienionych plików z 26 dodań i 7 usunięć

Wyświetl plik

@ -16,6 +16,7 @@ woken_by_button = badger2040.woken_by_button() # Must be done before we clear_p
if badger2040.pressed_to_wake(badger2040.BUTTON_A) and badger2040.pressed_to_wake(badger2040.BUTTON_C):
# Pressing A and C together at start quits app
exited_to_launcher = badger_os.state_clear_running()
badger2040.reset_pressed_to_wake()
else:
# Otherwise restore previously running app
badger_os.state_launch()
@ -116,8 +117,7 @@ def render():
def wait_for_user_to_release_buttons():
pr = display.pressed
while pr(badger2040.BUTTON_A) or pr(badger2040.BUTTON_B) or pr(badger2040.BUTTON_C) or pr(badger2040.BUTTON_UP) or pr(badger2040.BUTTON_DOWN):
while display.pressed_any():
time.sleep(0.01)

Wyświetl plik

@ -45,8 +45,6 @@ SYSTEM_FREQS = [
250000000
]
WAKEUP_GPIO_STATE = wakeup.get_gpio_state()
BUTTONS = {
BUTTON_DOWN: machine.Pin(BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN),
BUTTON_A: machine.Pin(BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN),
@ -55,13 +53,26 @@ BUTTONS = {
BUTTON_UP: machine.Pin(BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN),
}
WAKEUP_MASK = 0
def woken_by_button():
return WAKEUP_GPIO_STATE & BUTTON_MASK > 0
return wakeup.get_gpio_state() & BUTTON_MASK > 0
def pressed_to_wake(button):
return WAKEUP_GPIO_STATE & (1 << button) > 0
return wakeup.get_gpio_state() & (1 << button) > 0
def reset_pressed_to_wake():
wakeup.reset_gpio_state()
def pressed_to_wake_get_once(button):
global WAKEUP_MASK
result = (wakeup.get_gpio_state() & ~WAKEUP_MASK & (1 << button)) > 0
WAKEUP_MASK |= (1 << button)
return result
def system_speed(speed):
@ -114,7 +125,7 @@ class Badger2040W():
pass
def pressed(self, button):
return BUTTONS[button].value() == 1
return BUTTONS[button].value() == 1 or pressed_to_wake_get_once(button)
def pressed_any(self):
for button in BUTTONS.values():

Wyświetl plik

@ -1,12 +1,14 @@
#include "wakeup.h"
STATIC MP_DEFINE_CONST_FUN_OBJ_0(Wakeup_get_gpio_state_obj, Wakeup_get_gpio_state);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(Wakeup_reset_gpio_state_obj, Wakeup_reset_gpio_state);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(Wakeup_get_shift_state_obj, Wakeup_get_shift_state);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(Wakeup_reset_shift_state_obj, Wakeup_reset_shift_state);
STATIC const mp_map_elem_t wakeup_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_wakeup) },
{ MP_ROM_QSTR(MP_QSTR_get_gpio_state), MP_ROM_PTR(&Wakeup_get_gpio_state_obj) },
{ MP_ROM_QSTR(MP_QSTR_reset_gpio_state), MP_ROM_PTR(&Wakeup_reset_gpio_state_obj) },
{ MP_ROM_QSTR(MP_QSTR_get_shift_state), MP_ROM_PTR(&Wakeup_get_shift_state_obj) },
{ MP_ROM_QSTR(MP_QSTR_reset_shift_state), MP_ROM_PTR(&Wakeup_reset_shift_state_obj) }
};

Wyświetl plik

@ -62,6 +62,11 @@ mp_obj_t Wakeup_get_gpio_state() {
return mp_obj_new_int(runtime_wakeup_gpio_state);
}
mp_obj_t Wakeup_reset_gpio_state() {
runtime_wakeup_gpio_state = 0;
return mp_const_none;
}
void err_no_sr() {
mp_raise_msg(&mp_type_RuntimeError, "Wakeup_get_shift_state: board does not have a shift register.");
}

Wyświetl plik

@ -2,5 +2,6 @@
#include "py/objstr.h"
extern mp_obj_t Wakeup_get_gpio_state();
extern mp_obj_t Wakeup_reset_gpio_state();
extern mp_obj_t Wakeup_get_shift_state();
extern mp_obj_t Wakeup_reset_shift_state();