From c860e80b8e71b8135af6745771d2ee8de4c7990c Mon Sep 17 00:00:00 2001
From: schneider <schneider@blinkenlichts.net>
Date: Mon, 25 Jan 2021 22:58:15 +0100
Subject: [PATCH] feat(mp-ble): Trigger GATT service changed after modifying DB

---
 epicardium/ble/ble_main.c     |  4 ++++
 epicardium/ble/epic_att_api.c | 10 +++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c
index c40d3df62..921976933 100644
--- a/epicardium/ble/ble_main.c
+++ b/epicardium/ble/ble_main.c
@@ -22,6 +22,7 @@
 #include "l2c_api.h"
 #include "dm_api.h"
 #include "att_api.h"
+#include "gatt/gatt_api.h"
 #include "smp_api.h"
 #include "app_api.h"
 #include "app_db.h"
@@ -956,6 +957,9 @@ void BleStart(void)
 
   ble_epic_ble_api_init();
 
+  /* Set Service Changed CCCD index. */
+  GattSetSvcChangedIdx(BLE_GATT_SC_CCC_IDX);
+
   /* Reset the device */
   DmDevReset();
 }
diff --git a/epicardium/ble/epic_att_api.c b/epicardium/ble/epic_att_api.c
index 9dfa44dcd..fdfbdf9c3 100644
--- a/epicardium/ble/epic_att_api.c
+++ b/epicardium/ble/epic_att_api.c
@@ -7,6 +7,7 @@
 #include "wsf_msg.h"
 #include "att_api.h"
 #include "wsf_buf.h"
+#include "gatt/gatt_api.h"
 
 #include "FreeRTOS.h"
 #include "queue.h"
@@ -212,9 +213,12 @@ int epic_ble_atts_dyn_add_descriptor(
 
 int epic_atts_dyn_send_service_changed_ind(void)
 {
-	// TODO: This is copied from an upstream stack version
-	// TODO: Handling of CCCDs in pairings is still broken
-	//GattSendServiceChangedInd(1, ATT_HANDLE_START, ATT_HANDLE_MAX);
+	/* Indicate to the server that our GATT DB changed.
+	 * TODO: Handling of CCCDs in pairings might still be broken:
+	 * See https://git.card10.badge.events.ccc.de/card10/firmware/-/issues/197 */
+	GattSendServiceChangedInd(
+		DM_CONN_ID_NONE, ATT_HANDLE_START, ATT_HANDLE_MAX
+	);
 	return 0;
 }
 
-- 
GitLab