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