summaryrefslogtreecommitdiff
path: root/extmod/modbluetooth.h
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2020-11-25 17:28:04 +1100
committerDamien George <damien@micropython.org>2020-12-02 14:41:41 +1100
commitc4d08aa4e3641a1d05d35051454d4bce8ef14fcf (patch)
tree377b623a76cf33fc3b175f74dcb0347c5cfbe152 /extmod/modbluetooth.h
parentfff634e03134b8f1724759f477da61b698c9cdf4 (diff)
extmod/modbluetooth: Add support for bonding (key persistence).
This adds `_IRQ_GET_SECRET` and `_IRQ_SET_SECRET` events to allow the BT stack to request the Python code retrive/store/delete secret key data. The actual keys and values are opaque to Python and stack-specific. Only NimBLE is implemented (pending moving btstack to sync events). The secret store is designed to be compatible with BlueKitchen's TLV store API. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Diffstat (limited to 'extmod/modbluetooth.h')
-rw-r--r--extmod/modbluetooth.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/extmod/modbluetooth.h b/extmod/modbluetooth.h
index 48e75d432..d79b7f56b 100644
--- a/extmod/modbluetooth.h
+++ b/extmod/modbluetooth.h
@@ -146,6 +146,8 @@
#define MP_BLUETOOTH_IRQ_L2CAP_SEND_READY (26)
#define MP_BLUETOOTH_IRQ_CONNECTION_UPDATE (27)
#define MP_BLUETOOTH_IRQ_ENCRYPTION_UPDATE (28)
+#define MP_BLUETOOTH_IRQ_GET_SECRET (29)
+#define MP_BLUETOOTH_IRQ_SET_SECRET (30)
#define MP_BLUETOOTH_ADDRESS_MODE_PUBLIC (0)
#define MP_BLUETOOTH_ADDRESS_MODE_RANDOM (1)
@@ -159,6 +161,12 @@
#define MP_BLUETOOTH_IO_CAPABILITY_NO_INPUT_OUTPUT (3)
#define MP_BLUETOOTH_IO_CAPABILITY_KEYBOARD_DISPLAY (4)
+// These match NimBLE BLE_SM_IOACT_.
+#define MP_BLUETOOTH_PASSKEY_ACTION_NONE (0)
+#define MP_BLUETOOTH_PASSKEY_ACTION_INPUT (2)
+#define MP_BLUETOOTH_PASSKEY_ACTION_DISPLAY (3)
+#define MP_BLUETOOTH_PASSKEY_ACTION_NUMERIC_COMPARISON (4)
+
/*
These aren't included in the module for space reasons, but can be used
in your Python code if necessary.
@@ -192,6 +200,8 @@ _IRQ_L2CAP_RECV = const(25)
_IRQ_L2CAP_SEND_READY = const(26)
_IRQ_CONNECTION_UPDATE = const(27)
_IRQ_ENCRYPTION_UPDATE = const(28)
+_IRQ_GET_SECRET = const(29)
+_IRQ_SET_SECRET = const(30)
_FLAG_BROADCAST = const(0x0001)
_FLAG_READ = const(0x0002)
@@ -373,7 +383,13 @@ void mp_bluetooth_gap_on_connection_update(uint16_t conn_handle, uint16_t conn_i
#if MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
// Call this when any connection encryption has been changed (e.g. during pairing).
void mp_bluetooth_gatts_on_encryption_update(uint16_t conn_handle, bool encrypted, bool authenticated, bool bonded, uint8_t key_size);
-#endif
+
+// Call this when you need the application to manage persistent key data.
+// For get, if key is NULL, then the implementation must return the index'th matching key. Otherwise it should return a specific key.
+// For set, if value is NULL, then delete.
+bool mp_bluetooth_gap_on_get_secret(uint8_t type, uint8_t index, const uint8_t *key, size_t key_len, const uint8_t **value, size_t *value_len);
+bool mp_bluetooth_gap_on_set_secret(uint8_t type, const uint8_t *key, size_t key_len, const uint8_t *value, size_t value_len);
+#endif // MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
// Call this when a characteristic is written to.
void mp_bluetooth_gatts_on_write(uint16_t conn_handle, uint16_t value_handle);