extmod/nimble: Update to NimBLE v1.4.

We're using the MicroPython fork of NimBLE, which on the
`micropython_1_4_0` branch re-adds support for 64-bit targets and fixes
initialisation of g_msys_pool_list.

Also updates modbluetooth_nimble.c to suit v1.4.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
pull/7832/head
Jim Mussared 2021-07-08 00:43:56 +10:00
rodzic 1244d7f0bd
commit 948e3289bf
3 zmienionych plików z 29 dodań i 28 usunięć

Wyświetl plik

@ -138,9 +138,9 @@ STATIC int ble_gattc_attr_write_cb(uint16_t conn_handle, const struct ble_gatt_e
#if MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING #if MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
// Bonding store. // Bonding store.
STATIC int ble_store_ram_read(int obj_type, const union ble_store_key *key, union ble_store_value *value); STATIC int ble_secret_store_read(int obj_type, const union ble_store_key *key, union ble_store_value *value);
STATIC int ble_store_ram_write(int obj_type, const union ble_store_value *val); STATIC int ble_secret_store_write(int obj_type, const union ble_store_value *val);
STATIC int ble_store_ram_delete(int obj_type, const union ble_store_key *key); STATIC int ble_secret_store_delete(int obj_type, const union ble_store_key *key);
#endif #endif
STATIC int ble_hs_err_to_errno(int err) { STATIC int ble_hs_err_to_errno(int err) {
@ -604,6 +604,12 @@ int mp_bluetooth_init(void) {
ble_hs_cfg.gatts_register_cb = gatts_register_cb; ble_hs_cfg.gatts_register_cb = gatts_register_cb;
ble_hs_cfg.store_status_cb = ble_store_util_status_rr; ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
#if MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
ble_hs_cfg.store_read_cb = ble_secret_store_read;
ble_hs_cfg.store_write_cb = ble_secret_store_write;
ble_hs_cfg.store_delete_cb = ble_secret_store_delete;
#endif // MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
MP_STATE_PORT(bluetooth_nimble_root_pointers) = m_new0(mp_bluetooth_nimble_root_pointers_t, 1); MP_STATE_PORT(bluetooth_nimble_root_pointers) = m_new0(mp_bluetooth_nimble_root_pointers_t, 1);
mp_bluetooth_gatts_db_create(&MP_STATE_PORT(bluetooth_nimble_root_pointers)->gatts_db); mp_bluetooth_gatts_db_create(&MP_STATE_PORT(bluetooth_nimble_root_pointers)->gatts_db);
@ -1826,8 +1832,8 @@ int mp_bluetooth_hci_cmd(uint16_t ogf, uint16_t ocf, const uint8_t *req, size_t
#if MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING #if MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
STATIC int ble_store_ram_read(int obj_type, const union ble_store_key *key, union ble_store_value *value) { STATIC int ble_secret_store_read(int obj_type, const union ble_store_key *key, union ble_store_value *value) {
DEBUG_printf("ble_store_ram_read: %d\n", obj_type); DEBUG_printf("ble_secret_store_read: %d\n", obj_type);
const uint8_t *key_data; const uint8_t *key_data;
size_t key_data_len; size_t key_data_len;
@ -1861,7 +1867,7 @@ STATIC int ble_store_ram_read(int obj_type, const union ble_store_key *key, unio
} }
case BLE_STORE_OBJ_TYPE_CCCD: { case BLE_STORE_OBJ_TYPE_CCCD: {
// TODO: Implement CCCD persistence. // TODO: Implement CCCD persistence.
DEBUG_printf("ble_store_ram_read: CCCD not supported.\n"); DEBUG_printf("ble_secret_store_read: CCCD not supported.\n");
return -1; return -1;
} }
default: default:
@ -1871,18 +1877,18 @@ STATIC int ble_store_ram_read(int obj_type, const union ble_store_key *key, unio
const uint8_t *value_data; const uint8_t *value_data;
size_t value_data_len; size_t value_data_len;
if (!mp_bluetooth_gap_on_get_secret(obj_type, key->sec.idx, key_data, key_data_len, &value_data, &value_data_len)) { if (!mp_bluetooth_gap_on_get_secret(obj_type, key->sec.idx, key_data, key_data_len, &value_data, &value_data_len)) {
DEBUG_printf("ble_store_ram_read: Key not found: type=%d, index=%u, key=0x%p, len=" UINT_FMT "\n", obj_type, key->sec.idx, key_data, key_data_len); DEBUG_printf("ble_secret_store_read: Key not found: type=%d, index=%u, key=0x%p, len=" UINT_FMT "\n", obj_type, key->sec.idx, key_data, key_data_len);
return BLE_HS_ENOENT; return BLE_HS_ENOENT;
} }
if (value_data_len != sizeof(struct ble_store_value_sec)) { if (value_data_len != sizeof(struct ble_store_value_sec)) {
DEBUG_printf("ble_store_ram_read: Invalid key data: actual=" UINT_FMT " expected=" UINT_FMT "\n", value_data_len, sizeof(struct ble_store_value_sec)); DEBUG_printf("ble_secret_store_read: Invalid key data: actual=" UINT_FMT " expected=" UINT_FMT "\n", value_data_len, sizeof(struct ble_store_value_sec));
return BLE_HS_ENOENT; return BLE_HS_ENOENT;
} }
memcpy((uint8_t *)&value->sec, value_data, sizeof(struct ble_store_value_sec)); memcpy((uint8_t *)&value->sec, value_data, sizeof(struct ble_store_value_sec));
DEBUG_printf("ble_store_ram_read: found secret\n"); DEBUG_printf("ble_secret_store_read: found secret\n");
if (obj_type == BLE_STORE_OBJ_TYPE_OUR_SEC) { if (obj_type == BLE_STORE_OBJ_TYPE_OUR_SEC) {
// TODO: Verify ediv_rand matches. // TODO: Verify ediv_rand matches.
@ -1891,8 +1897,8 @@ STATIC int ble_store_ram_read(int obj_type, const union ble_store_key *key, unio
return 0; return 0;
} }
STATIC int ble_store_ram_write(int obj_type, const union ble_store_value *val) { STATIC int ble_secret_store_write(int obj_type, const union ble_store_value *val) {
DEBUG_printf("ble_store_ram_write: %d\n", obj_type); DEBUG_printf("ble_secret_store_write: %d\n", obj_type);
switch (obj_type) { switch (obj_type) {
case BLE_STORE_OBJ_TYPE_PEER_SEC: case BLE_STORE_OBJ_TYPE_PEER_SEC:
case BLE_STORE_OBJ_TYPE_OUR_SEC: { case BLE_STORE_OBJ_TYPE_OUR_SEC: {
@ -1910,13 +1916,13 @@ STATIC int ble_store_ram_write(int obj_type, const union ble_store_value *val) {
return BLE_HS_ESTORE_CAP; return BLE_HS_ESTORE_CAP;
} }
DEBUG_printf("ble_store_ram_write: wrote secret\n"); DEBUG_printf("ble_secret_store_write: wrote secret\n");
return 0; return 0;
} }
case BLE_STORE_OBJ_TYPE_CCCD: { case BLE_STORE_OBJ_TYPE_CCCD: {
// TODO: Implement CCCD persistence. // TODO: Implement CCCD persistence.
DEBUG_printf("ble_store_ram_write: CCCD not supported.\n"); DEBUG_printf("ble_secret_store_write: CCCD not supported.\n");
// Just pretend we wrote it. // Just pretend we wrote it.
return 0; return 0;
} }
@ -1925,8 +1931,8 @@ STATIC int ble_store_ram_write(int obj_type, const union ble_store_value *val) {
} }
} }
STATIC int ble_store_ram_delete(int obj_type, const union ble_store_key *key) { STATIC int ble_secret_store_delete(int obj_type, const union ble_store_key *key) {
DEBUG_printf("ble_store_ram_delete: %d\n", obj_type); DEBUG_printf("ble_secret_store_delete: %d\n", obj_type);
switch (obj_type) { switch (obj_type) {
case BLE_STORE_OBJ_TYPE_PEER_SEC: case BLE_STORE_OBJ_TYPE_PEER_SEC:
case BLE_STORE_OBJ_TYPE_OUR_SEC: { case BLE_STORE_OBJ_TYPE_OUR_SEC: {
@ -1940,13 +1946,13 @@ STATIC int ble_store_ram_delete(int obj_type, const union ble_store_key *key) {
return BLE_HS_ENOENT; return BLE_HS_ENOENT;
} }
DEBUG_printf("ble_store_ram_delete: deleted secret\n"); DEBUG_printf("ble_secret_store_delete: deleted secret\n");
return 0; return 0;
} }
case BLE_STORE_OBJ_TYPE_CCCD: { case BLE_STORE_OBJ_TYPE_CCCD: {
// TODO: Implement CCCD persistence. // TODO: Implement CCCD persistence.
DEBUG_printf("ble_store_ram_delete: CCCD not supported.\n"); DEBUG_printf("ble_secret_store_delete: CCCD not supported.\n");
// Just pretend it wasn't there. // Just pretend it wasn't there.
return BLE_HS_ENOENT; return BLE_HS_ENOENT;
} }
@ -1955,15 +1961,6 @@ STATIC int ble_store_ram_delete(int obj_type, const union ble_store_key *key) {
} }
} }
// nimble_port_init always calls ble_store_ram_init. We provide this alternative
// implementation rather than the one in nimble/store/ram/src/ble_store_ram.c.
// TODO: Consider re-implementing nimble_port_init instead.
void ble_store_ram_init(void) {
ble_hs_cfg.store_read_cb = ble_store_ram_read;
ble_hs_cfg.store_write_cb = ble_store_ram_write;
ble_hs_cfg.store_delete_cb = ble_store_ram_delete;
}
#endif // MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING #endif // MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
#endif // MICROPY_PY_BLUETOOTH && MICROPY_BLUETOOTH_NIMBLE #endif // MICROPY_PY_BLUETOOTH && MICROPY_BLUETOOTH_NIMBLE

Wyświetl plik

@ -35,7 +35,11 @@
// --- Configuration of NimBLE data structures -------------------------------- // --- Configuration of NimBLE data structures --------------------------------
// This is used at runtime to align allocations correctly. // This is used at runtime to align allocations correctly.
#define BLE_NPL_OS_ALIGNMENT (sizeof(uintptr_t)) #if __WORDSIZE == 64
#define BLE_NPL_OS_ALIGNMENT 8
#else
#define BLE_NPL_OS_ALIGNMENT 4
#endif
#define BLE_NPL_TIME_FOREVER (0xffffffff) #define BLE_NPL_TIME_FOREVER (0xffffffff)
// This is used at compile time to force struct member alignment. See // This is used at compile time to force struct member alignment. See

@ -1 +1 @@
Subproject commit 97ce3eacaaa79e8ed6cf71717149ced4f5328ee7 Subproject commit 42849560ba7906f023f61e5f7ff3709ba2c1dfca