From c7be3eec16654b75b6dd8165e50ff4b70bdee27d Mon Sep 17 00:00:00 2001
From: schneider <schneider@blinkenlichts.net>
Date: Sun, 14 Nov 2021 00:41:03 +0100
Subject: [PATCH] ble: Don't panic when initializing BLE from mpy if ble is off

---
 epicardium/ble/epic_ble_api.c           |  8 ++++++++
 pycardium/modules/modbluetooth_card10.c | 11 ++++++++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/epicardium/ble/epic_ble_api.c b/epicardium/ble/epic_ble_api.c
index c1fa3e11..68ad55a3 100644
--- a/epicardium/ble/epic_ble_api.c
+++ b/epicardium/ble/epic_ble_api.c
@@ -97,6 +97,10 @@ void ble_epic_ble_api_trigger_event(enum epic_ble_event_type type, void *data)
 
 int epic_ble_get_event(struct epic_ble_event *e)
 {
+	if (!ble_is_enabled()) {
+		return -EIO;
+	}
+
 	if (xQueueReceive(ble_event_queue, e, 0) != pdTRUE) {
 		return -ENOENT;
 	}
@@ -162,6 +166,10 @@ void vDmTimerCallback()
 
 int epic_ble_init(void)
 {
+	if (!ble_is_enabled()) {
+		return -EIO;
+	}
+
 	if (dm_timer == NULL) {
 		dm_timer = xTimerCreateStatic(
 			"dmtimer",
diff --git a/pycardium/modules/modbluetooth_card10.c b/pycardium/modules/modbluetooth_card10.c
index 61d244ca..995a0c1c 100644
--- a/pycardium/modules/modbluetooth_card10.c
+++ b/pycardium/modules/modbluetooth_card10.c
@@ -474,9 +474,14 @@ int mp_bluetooth_init(void)
 		MP_ROM_INT(EPIC_INT_BLE), (mp_obj_t *)&ble_event_obj
 	);
 	clear_events();
-	epic_ble_init();
-	active = true;
-	return 0;
+	int ret = epic_ble_init();
+
+	if (ret == 0) {
+		active = true;
+	} else {
+		active = false;
+	}
+	return ret;
 }
 
 // Disables the Bluetooth stack. Is a no-op when not enabled.
-- 
GitLab