diff options
| author | Daniel Campora | 2015-03-26 13:51:37 +0100 |
|---|---|---|
| committer | Daniel Campora | 2015-03-26 13:58:58 +0100 |
| commit | 4be44014abd5804e3cd8f810b67ad5555af47f13 (patch) | |
| tree | c9a9f55da29f12b1c7d4b487324fbc96c3156194 /cc3200/misc/mpcallback.c | |
| parent | 0090c714ba94a10b21d8a09756d7d6f7354ac3f9 (diff) | |
cc3200: Reenable active interrupts when waking from suspended mode.
Diffstat (limited to 'cc3200/misc/mpcallback.c')
| -rw-r--r-- | cc3200/misc/mpcallback.c | 13 |
1 files changed, 13 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); |
