From ea13596b8c1cc4af25cc02ef8f6d278f48c30250 Mon Sep 17 00:00:00 2001
From: schneider <schneider@blinkenlichts.net>
Date: Sat, 6 Feb 2021 00:57:46 +0100
Subject: [PATCH] change(mp): Plug in MP v1.14

---
 lib/micropython/micropython             |  2 +-
 pycardium/modules/modbluetooth_card10.c | 71 ++++++++++++++++---------
 2 files changed, 46 insertions(+), 27 deletions(-)

diff --git a/lib/micropython/micropython b/lib/micropython/micropython
index b0932fcf2..78b23c3a1 160000
--- a/lib/micropython/micropython
+++ b/lib/micropython/micropython
@@ -1 +1 @@
-Subproject commit b0932fcf2e2f9a81abf7737ed4b2573bd9ad4a49
+Subproject commit 78b23c3a1f064dc19bbee68930ef3aba110c781c
diff --git a/pycardium/modules/modbluetooth_card10.c b/pycardium/modules/modbluetooth_card10.c
index 91e2e399e..9923a2fd6 100644
--- a/pycardium/modules/modbluetooth_card10.c
+++ b/pycardium/modules/modbluetooth_card10.c
@@ -30,6 +30,14 @@ typedef struct {
 static bool active = false;
 static mp_obj_bluetooth_uuid_t uuid_filter;
 
+const char *const not_implemented_message =
+	"Not (yet) implemented on card10. See https://git.card10.badge.events.ccc.de/card10/firmware/-/issues/8";
+
+static void raise(void)
+{
+	mp_raise_NotImplementedError(not_implemented_message);
+}
+
 static void gatts_status_create_entry(mp_gatts_db_t db, uint16_t handle)
 {
 	mp_map_elem_t *elem = mp_map_lookup(
@@ -213,18 +221,14 @@ static void handle_att_event(struct epic_att_event *att_event)
 	}
 
 	if (att_event->hdr.event == ATTC_READ_RSP) {
-		mp_uint_t atomic_state;
-		size_t len = mp_bluetooth_gattc_on_data_available_start(
+		mp_bluetooth_gattc_on_data_available(
 			MP_BLUETOOTH_IRQ_GATTC_READ_RESULT,
 			1,
 			att_event->handle,
-			att_event->valueLen,
-			&atomic_state
+			(const uint8_t **)&att_event->pValue,
+			&att_event->valueLen,
+			1
 		);
-		mp_bluetooth_gattc_on_data_available_chunk(
-			att_event->pValue, len
-		);
-		mp_bluetooth_gattc_on_data_available_end(atomic_state);
 		mp_bluetooth_gattc_on_read_write_status(
 			MP_BLUETOOTH_IRQ_GATTC_READ_DONE,
 			1,
@@ -238,18 +242,14 @@ static void handle_att_event(struct epic_att_event *att_event)
 		uint16_t ev = att_event->hdr.event == ATTC_HANDLE_VALUE_NTF ?
 				      MP_BLUETOOTH_IRQ_GATTC_NOTIFY :
 				      MP_BLUETOOTH_IRQ_GATTC_INDICATE;
-		mp_uint_t atomic_state;
-		size_t len = mp_bluetooth_gattc_on_data_available_start(
+		mp_bluetooth_gattc_on_data_available(
 			ev,
 			1,
 			att_event->handle,
-			att_event->valueLen,
-			&atomic_state
-		);
-		mp_bluetooth_gattc_on_data_available_chunk(
-			att_event->pValue, len
+			(const uint8_t **)&att_event->pValue,
+			&att_event->valueLen,
+			1
 		);
-		mp_bluetooth_gattc_on_data_available_end(atomic_state);
 	}
 
 	if (att_event->hdr.event == ATTC_WRITE_RSP) {
@@ -368,12 +368,19 @@ bool mp_bluetooth_is_active(void)
 	return active;
 }
 
-// Gets the MAC addr of this device in big-endian format.
-void mp_bluetooth_get_device_addr(uint8_t *addr)
+// Gets the current address of this device in big-endian format.
+void mp_bluetooth_get_current_address(uint8_t *addr_type, uint8_t *addr)
 {
+	*addr_type = 0; // Public address
 	epic_ble_get_address(addr);
 }
 
+// Sets the addressing mode to use.
+void mp_bluetooth_set_address_mode(uint8_t addr_mode)
+{
+	raise();
+}
+
 size_t mp_bluetooth_gap_get_device_name(const uint8_t **buf)
 {
 	uint16_t len;
@@ -427,14 +434,14 @@ int mp_bluetooth_gatts_register_service_begin(bool append)
 	return 0;
 }
 
-// // Add a service with the given list of characteristics to the queue to be registered.
+// Add a service with the given list of characteristics to the queue to be registered.
 // The value_handles won't be valid until after mp_bluetooth_register_service_end is called.
 int mp_bluetooth_gatts_register_service(
 	mp_obj_bluetooth_uuid_t *service_uuid,
 	mp_obj_bluetooth_uuid_t **characteristic_uuids,
-	uint8_t *characteristic_flags,
+	uint16_t *characteristic_flags,
 	mp_obj_bluetooth_uuid_t **descriptor_uuids,
-	uint8_t *descriptor_flags,
+	uint16_t *descriptor_flags,
 	uint8_t *num_descriptors,
 	uint16_t *handles,
 	size_t num_characteristics
@@ -682,15 +689,20 @@ int mp_bluetooth_gap_disconnect(uint16_t conn_handle)
 	return 0;
 }
 
-#if MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE
-const char *const not_implemented_message =
-	"Not (yet) implemented on card10. See https://git.card10.badge.events.ccc.de/card10/firmware/-/issues/8";
+// Set/get the MTU that we will respond to a MTU exchange with.
+int mp_bluetooth_get_preferred_mtu(void)
+{
+	raise();
+	return 0;
+}
 
-static void raise(void)
+int mp_bluetooth_set_preferred_mtu(uint16_t mtu)
 {
-	mp_raise_NotImplementedError(not_implemented_message);
+	raise();
+	return 0;
 }
 
+#if MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE
 // Start a discovery (scan). Set duration to zero to run continuously.
 int mp_bluetooth_gap_scan_start(
 	int32_t duration_ms,
@@ -788,4 +800,11 @@ int mp_bluetooth_gattc_write(
 	}
 	return err;
 }
+
+// Initiate MTU exchange for a specific connection using the preferred MTU.
+int mp_bluetooth_gattc_exchange_mtu(uint16_t conn_handle)
+{
+	raise();
+	return 0;
+}
 #endif
-- 
GitLab