diff options
Diffstat (limited to 'cc3200/misc')
| -rw-r--r-- | cc3200/misc/mpcallback.c | 13 | ||||
| -rw-r--r-- | cc3200/misc/mpcallback.h | 2 |
2 files changed, 15 insertions, 0 deletions
diff --git a/cc3200/misc/mpcallback.c b/cc3200/misc/mpcallback.c index c7690dca4..87969f727 100644 --- a/cc3200/misc/mpcallback.c +++ b/cc3200/misc/mpcallback.c @@ -62,6 +62,7 @@ mp_obj_t mpcallback_new (mp_obj_t parent, mp_obj_t handler, const mp_cb_methods_ self->handler = handler; self->parent = parent; self->methods = (mp_cb_methods_t *)methods; + self->isenabled = true; // remove any old callback if present mpcallback_remove(self->parent); mp_obj_list_append(&MP_STATE_PORT(mpcallback_obj_list), self); @@ -79,6 +80,16 @@ mpcallback_obj_t *mpcallback_find (mp_obj_t parent) { return NULL; } +void mpcallback_wake_all (void) { + // re-enable all active callback objects one by one + for (mp_uint_t i = 0; i < MP_STATE_PORT(mpcallback_obj_list).len; i++) { + mpcallback_obj_t *callback_obj = ((mpcallback_obj_t *)(MP_STATE_PORT(mpcallback_obj_list).items[i])); + if (callback_obj->isenabled) { + callback_obj->methods->enable(callback_obj->parent); + } + } +} + void mpcallback_remove (const mp_obj_t parent) { mpcallback_obj_t *callback_obj; if ((callback_obj = mpcallback_find(parent))) { @@ -158,6 +169,7 @@ MP_DEFINE_CONST_FUN_OBJ_KW(callback_init_obj, 1, callback_init); STATIC mp_obj_t callback_enable (mp_obj_t self_in) { mpcallback_obj_t *self = self_in; self->methods->enable(self->parent); + self->isenabled = true; return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(callback_enable_obj, callback_enable); @@ -167,6 +179,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(callback_enable_obj, callback_enable); STATIC mp_obj_t callback_disable (mp_obj_t self_in) { mpcallback_obj_t *self = self_in; self->methods->disable(self->parent); + self->isenabled = false; return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(callback_disable_obj, callback_disable); diff --git a/cc3200/misc/mpcallback.h b/cc3200/misc/mpcallback.h index cadc73bad..743d73fe1 100644 --- a/cc3200/misc/mpcallback.h +++ b/cc3200/misc/mpcallback.h @@ -49,6 +49,7 @@ typedef struct { mp_obj_t parent; mp_obj_t handler; mp_cb_methods_t *methods; + bool isenabled; } mpcallback_obj_t; /****************************************************************************** @@ -63,6 +64,7 @@ extern const mp_obj_type_t pyb_callback_type; void mpcallback_init0 (void); mp_obj_t mpcallback_new (mp_obj_t parent, mp_obj_t handler, const mp_cb_methods_t *methods); mpcallback_obj_t *mpcallback_find (mp_obj_t parent); +void mpcallback_wake_all (void); void mpcallback_remove (const mp_obj_t parent); void mpcallback_handler (mp_obj_t self_in); uint mpcallback_translate_priority (uint priority); |
