diff --git a/extmod/nimble/modbluetooth_nimble.c b/extmod/nimble/modbluetooth_nimble.c index 6ac31fd4bd..125e282d0d 100644 --- a/extmod/nimble/modbluetooth_nimble.c +++ b/extmod/nimble/modbluetooth_nimble.c @@ -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 // 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_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_read(int obj_type, const union ble_store_key *key, union ble_store_value *value); +STATIC int ble_secret_store_write(int obj_type, const union ble_store_value *val); +STATIC int ble_secret_store_delete(int obj_type, const union ble_store_key *key); #endif 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.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_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 -STATIC int ble_store_ram_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); +STATIC int ble_secret_store_read(int obj_type, const union ble_store_key *key, union ble_store_value *value) { + DEBUG_printf("ble_secret_store_read: %d\n", obj_type); const uint8_t *key_data; 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: { // 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; } 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; 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)) { - 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; } 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; } 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) { // 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; } -STATIC int ble_store_ram_write(int obj_type, const union ble_store_value *val) { - DEBUG_printf("ble_store_ram_write: %d\n", obj_type); +STATIC int ble_secret_store_write(int obj_type, const union ble_store_value *val) { + DEBUG_printf("ble_secret_store_write: %d\n", obj_type); switch (obj_type) { case BLE_STORE_OBJ_TYPE_PEER_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; } - DEBUG_printf("ble_store_ram_write: wrote secret\n"); + DEBUG_printf("ble_secret_store_write: wrote secret\n"); return 0; } case BLE_STORE_OBJ_TYPE_CCCD: { // 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. 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) { - DEBUG_printf("ble_store_ram_delete: %d\n", obj_type); +STATIC int ble_secret_store_delete(int obj_type, const union ble_store_key *key) { + DEBUG_printf("ble_secret_store_delete: %d\n", obj_type); switch (obj_type) { case BLE_STORE_OBJ_TYPE_PEER_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; } - DEBUG_printf("ble_store_ram_delete: deleted secret\n"); + DEBUG_printf("ble_secret_store_delete: deleted secret\n"); return 0; } case BLE_STORE_OBJ_TYPE_CCCD: { // 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. 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 && MICROPY_BLUETOOTH_NIMBLE diff --git a/extmod/nimble/nimble/nimble_npl_os.h b/extmod/nimble/nimble/nimble_npl_os.h index d0803f7e2e..3205baa032 100644 --- a/extmod/nimble/nimble/nimble_npl_os.h +++ b/extmod/nimble/nimble/nimble_npl_os.h @@ -35,7 +35,11 @@ // --- Configuration of NimBLE data structures -------------------------------- // 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) // This is used at compile time to force struct member alignment. See diff --git a/lib/mynewt-nimble b/lib/mynewt-nimble index 97ce3eacaa..42849560ba 160000 --- a/lib/mynewt-nimble +++ b/lib/mynewt-nimble @@ -1 +1 @@ -Subproject commit 97ce3eacaaa79e8ed6cf71717149ced4f5328ee7 +Subproject commit 42849560ba7906f023f61e5f7ff3709ba2c1dfca