From 402fa11ef88ea195b920350c5878a974c0029a5d Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Fri, 19 Jul 2019 00:06:36 +0200 Subject: [PATCH] fix(api): keep list of python callbacks --- pycardium/modules/interrupt.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/pycardium/modules/interrupt.c b/pycardium/modules/interrupt.c index 45ee55c38..546279191 100644 --- a/pycardium/modules/interrupt.c +++ b/pycardium/modules/interrupt.c @@ -5,23 +5,23 @@ #include "api/common.h" #include "mphalport.h" -mp_obj_t bhi160_callback = NULL; +mp_obj_t callbacks[API_INT_MAX + 1] = { + 0, +}; static void interrupt_set(api_int_id_t id, mp_obj_t func) { - // TODO: maintain list of interrupts callbacks - if (id == API_INT_BHI160) { - bhi160_callback = func; + if (id <= API_INT_MAX) { + callbacks[id] = func; } } void api_interrupt_handler_catch_all(api_int_id_t id) { - // TODO: iterate over registered callbacks - if (id == API_INT_BHI160) { - if (bhi160_callback) { + if (id <= API_INT_MAX) { + if (callbacks[id]) { mp_sched_schedule( - bhi160_callback, MP_OBJ_NEW_SMALL_INT(0) + callbacks[id], MP_OBJ_NEW_SMALL_INT(id) ); } } @@ -52,8 +52,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1( STATIC const mp_rom_map_elem_t interrupt_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_interrupt) }, - { MP_ROM_QSTR(MP_QSTR_set_callback), MP_ROM_PTR(&interrupt_set_callback_obj) }, - { MP_ROM_QSTR(MP_QSTR_enable_callback), MP_ROM_PTR(&interrupt_enable_callback_obj) }, + { MP_ROM_QSTR(MP_QSTR_set_callback), + MP_ROM_PTR(&interrupt_set_callback_obj) }, + { MP_ROM_QSTR(MP_QSTR_enable_callback), + MP_ROM_PTR(&interrupt_enable_callback_obj) }, { MP_ROM_QSTR(MP_QSTR_BHI160), MP_OBJ_NEW_SMALL_INT(2) }, }; STATIC MP_DEFINE_CONST_DICT( -- GitLab