aboutsummaryrefslogtreecommitdiff
path: root/cc3200/misc/mpcallback.c
diff options
context:
space:
mode:
authorDaniel Campora2015-03-26 13:51:37 +0100
committerDaniel Campora2015-03-26 13:58:58 +0100
commit4be44014abd5804e3cd8f810b67ad5555af47f13 (patch)
treec9a9f55da29f12b1c7d4b487324fbc96c3156194 /cc3200/misc/mpcallback.c
parent0090c714ba94a10b21d8a09756d7d6f7354ac3f9 (diff)
cc3200: Reenable active interrupts when waking from suspended mode.
Diffstat (limited to 'cc3200/misc/mpcallback.c')
-rw-r--r--cc3200/misc/mpcallback.c13
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);