diff --git a/pycardium/modules/interrupt.c b/pycardium/modules/interrupt.c index 45ee55c383c63dabacbc911d303b8133fad9aa12..5462791914bef4127767242dc4eac9a6866f3317 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(