kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Badger2040W: Fix wakeup and quit to launcher button handling.
rodzic
26eeb2b042
commit
cbcd9edd9a
|
@ -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):
|
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
|
# Pressing A and C together at start quits app
|
||||||
exited_to_launcher = badger_os.state_clear_running()
|
exited_to_launcher = badger_os.state_clear_running()
|
||||||
|
badger2040.reset_pressed_to_wake()
|
||||||
else:
|
else:
|
||||||
# Otherwise restore previously running app
|
# Otherwise restore previously running app
|
||||||
badger_os.state_launch()
|
badger_os.state_launch()
|
||||||
|
@ -116,8 +117,7 @@ def render():
|
||||||
|
|
||||||
|
|
||||||
def wait_for_user_to_release_buttons():
|
def wait_for_user_to_release_buttons():
|
||||||
pr = display.pressed
|
while display.pressed_any():
|
||||||
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):
|
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,6 @@ SYSTEM_FREQS = [
|
||||||
250000000
|
250000000
|
||||||
]
|
]
|
||||||
|
|
||||||
WAKEUP_GPIO_STATE = wakeup.get_gpio_state()
|
|
||||||
|
|
||||||
BUTTONS = {
|
BUTTONS = {
|
||||||
BUTTON_DOWN: machine.Pin(BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN),
|
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),
|
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),
|
BUTTON_UP: machine.Pin(BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WAKEUP_MASK = 0
|
||||||
|
|
||||||
|
|
||||||
def woken_by_button():
|
def woken_by_button():
|
||||||
return WAKEUP_GPIO_STATE & BUTTON_MASK > 0
|
return wakeup.get_gpio_state() & BUTTON_MASK > 0
|
||||||
|
|
||||||
|
|
||||||
def pressed_to_wake(button):
|
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):
|
def system_speed(speed):
|
||||||
|
@ -114,7 +125,7 @@ class Badger2040W():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def pressed(self, button):
|
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):
|
def pressed_any(self):
|
||||||
for button in BUTTONS.values():
|
for button in BUTTONS.values():
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
#include "wakeup.h"
|
#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_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_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 MP_DEFINE_CONST_FUN_OBJ_0(Wakeup_reset_shift_state_obj, Wakeup_reset_shift_state);
|
||||||
|
|
||||||
STATIC const mp_map_elem_t wakeup_globals_table[] = {
|
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___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_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_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) }
|
{ MP_ROM_QSTR(MP_QSTR_reset_shift_state), MP_ROM_PTR(&Wakeup_reset_shift_state_obj) }
|
||||||
};
|
};
|
||||||
|
|
|
@ -62,6 +62,11 @@ mp_obj_t Wakeup_get_gpio_state() {
|
||||||
return mp_obj_new_int(runtime_wakeup_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() {
|
void err_no_sr() {
|
||||||
mp_raise_msg(&mp_type_RuntimeError, "Wakeup_get_shift_state: board does not have a shift register.");
|
mp_raise_msg(&mp_type_RuntimeError, "Wakeup_get_shift_state: board does not have a shift register.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,5 +2,6 @@
|
||||||
#include "py/objstr.h"
|
#include "py/objstr.h"
|
||||||
|
|
||||||
extern mp_obj_t Wakeup_get_gpio_state();
|
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_get_shift_state();
|
||||||
extern mp_obj_t Wakeup_reset_shift_state();
|
extern mp_obj_t Wakeup_reset_shift_state();
|
Ładowanie…
Reference in New Issue