Skip to content

Commit 7067aa7

Browse files
microbit-carlosdpgeorge
authored andcommitted
codal_app/microbithal: Add microbit_hal_power_clear_wake_sources().
To clear all the wake up sources on every call to power.deep_sleep(). See #60 (comment)
1 parent b781e65 commit 7067aa7

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

src/codal_app/microbithal.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include "MicroBitDevice.h"
2929
#include "neopixel.h"
3030

31+
#define HAL_ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
32+
3133
NRF52Pin *const pin_obj[] = {
3234
&uBit.io.P0,
3335
&uBit.io.P1,
@@ -104,12 +106,22 @@ int microbit_hal_temperature(void) {
104106
return uBit.thermometer.getTemperature();
105107
}
106108

107-
void microbit_hal_power_wake_on_button(int button) {
108-
button_obj[button]->wakeOnActive(true);
109+
void microbit_hal_power_clear_wake_sources(void) {
110+
for (size_t i = 0; i < HAL_ARRAY_SIZE(pin_obj); ++i) {
111+
microbit_hal_power_wake_on_pin(i, false);
112+
}
113+
for (size_t i = 0; i < HAL_ARRAY_SIZE(button_obj); ++i) {
114+
microbit_hal_power_wake_on_button(i, false);
115+
}
116+
// TODO: Clear the run_every wake up source when implemented
117+
}
118+
119+
void microbit_hal_power_wake_on_button(int button, bool wake_on_active) {
120+
button_obj[button]->wakeOnActive(wake_on_active);
109121
}
110122

111-
void microbit_hal_power_wake_on_pin(int pin) {
112-
pin_obj[pin]->wakeOnActive(true);
123+
void microbit_hal_power_wake_on_pin(int pin, bool wake_on_active) {
124+
pin_obj[pin]->wakeOnActive(wake_on_active);
113125
}
114126

115127
void microbit_hal_power_off(void) {

src/codal_app/microbithal.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ void microbit_hal_reset(void);
103103
void microbit_hal_panic(int);
104104
int microbit_hal_temperature(void);
105105

106-
void microbit_hal_power_wake_on_button(int button);
107-
void microbit_hal_power_wake_on_pin(int pin);
106+
void microbit_hal_power_clear_wake_sources(void);
107+
void microbit_hal_power_wake_on_button(int button, bool wake_on_active);
108+
void microbit_hal_power_wake_on_pin(int pin, bool wake_on_active);
108109
void microbit_hal_power_off(void);
109110
void microbit_hal_power_deep_sleep(bool wake_on_ms, uint32_t ms);
110111

src/codal_port/modpower.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,13 @@ STATIC mp_obj_t power_deep_sleep(size_t n_args, const mp_obj_t *pos_args, mp_map
6262
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
6363
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
6464

65+
microbit_hal_power_clear_wake_sources();
66+
6567
if (args[ARG_pins].u_obj != mp_const_none) {
6668
mp_obj_t *items;
6769
size_t len = get_array(&args[ARG_pins].u_obj, &items);
6870
for (size_t i = 0; i < len; ++i) {
69-
microbit_hal_power_wake_on_pin(microbit_obj_get_pin_name(items[i]));
71+
microbit_hal_power_wake_on_pin(microbit_obj_get_pin_name(items[i]), true);
7072
}
7173
}
7274

@@ -75,9 +77,9 @@ STATIC mp_obj_t power_deep_sleep(size_t n_args, const mp_obj_t *pos_args, mp_map
7577
size_t len = get_array(&args[ARG_buttons].u_obj, &items);
7678
for (size_t i = 0; i < len; ++i) {
7779
if (items[i] == MP_OBJ_FROM_PTR(&microbit_button_a_obj)) {
78-
microbit_hal_power_wake_on_button(0);
80+
microbit_hal_power_wake_on_button(0, true);
7981
} else if (items[i] == MP_OBJ_FROM_PTR(&microbit_button_b_obj)) {
80-
microbit_hal_power_wake_on_button(1);
82+
microbit_hal_power_wake_on_button(1, true);
8183
} else {
8284
mp_raise_ValueError(MP_ERROR_TEXT("expecting a button"));
8385
}

0 commit comments

Comments
 (0)