summaryrefslogtreecommitdiff
path: root/shared-bindings/alarm/SleepMemory.c
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2021-01-12 09:23:07 -0600
committerJeff Epler <jepler@gmail.com>2021-01-12 09:23:07 -0600
commit1ca29ec47c9f51589faa151b659dfd1dd4a349ef (patch)
tree0a2e35b45a52e85f258cc522615e37965b0453d3 /shared-bindings/alarm/SleepMemory.c
parente20c65d8f044cb9522cd1a7f4a3030efefa77cbb (diff)
parent047708e36e67beee14771120296cdf758f00601d (diff)
Merge remote-tracking branch 'origin/main' into audioout-esp32
Diffstat (limited to 'shared-bindings/alarm/SleepMemory.c')
-rw-r--r--shared-bindings/alarm/SleepMemory.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/shared-bindings/alarm/SleepMemory.c b/shared-bindings/alarm/SleepMemory.c
index bec0b7665..aed24827a 100644
--- a/shared-bindings/alarm/SleepMemory.c
+++ b/shared-bindings/alarm/SleepMemory.c
@@ -53,6 +53,25 @@
//| """Not used. Access the sole instance through `alarm.sleep_memory`."""
//| ...
//|
+//| def __bool__(self) -> bool:
+//| """``sleep_memory`` is ``True`` if its length is greater than zero.
+//| This is an easy way to check for its existence.
+//| """
+//| ...
+//|
+//| def __len__(self) -> int:
+//| """Return the length. This is used by (`len`)"""
+//| ...
+//|
+STATIC mp_obj_t alarm_sleep_memory_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
+ alarm_sleep_memory_obj_t *self = MP_OBJ_TO_PTR(self_in);
+ uint16_t len = common_hal_alarm_sleep_memory_get_length(self);
+ switch (op) {
+ case MP_UNARY_OP_BOOL: return mp_obj_new_bool(len != 0);
+ case MP_UNARY_OP_LEN: return MP_OBJ_NEW_SMALL_INT(len);
+ default: return MP_OBJ_NULL; // op not supported
+ }
+}
STATIC const mp_rom_map_elem_t alarm_sleep_memory_locals_dict_table[] = {
};
@@ -154,6 +173,7 @@ const mp_obj_type_t alarm_sleep_memory_type = {
{ &mp_type_type },
.name = MP_QSTR_SleepMemory,
.subscr = alarm_sleep_memory_subscr,
+ .unary_op = alarm_sleep_memory_unary_op,
.print = NULL,
.locals_dict = (mp_obj_t)&alarm_sleep_memory_locals_dict,
};