From ae079c1fc5d990ba55714d4b3a51b19f96edaec4 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期四, 24 四月 2025 16:01:43 +0800 Subject: [PATCH] 改为中断来低电平触发发送当前扫描数据,3s内扫描不到的会退出,串口来55 AA 75 70 64 61 74 65,进入升级模式 --- 01_SDK/nimble/host/nimble/nimble/host/src/ble_gap.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 109 insertions(+), 1 deletions(-) diff --git a/01_SDK/nimble/host/nimble/nimble/host/src/ble_gap.c b/01_SDK/nimble/host/nimble/nimble/host/src/ble_gap.c index d9193f7..ffbe9cc 100644 --- a/01_SDK/nimble/host/nimble/nimble/host/src/ble_gap.c +++ b/01_SDK/nimble/host/nimble/nimble/host/src/ble_gap.c @@ -1785,7 +1785,7 @@ #endif #if NIMBLE_BLE_CONNECT -static int +int ble_gap_rd_rem_sup_feat_tx(uint16_t handle) { struct ble_hci_le_rd_rem_feat_cp cmd; @@ -2580,6 +2580,10 @@ ble_gap_slave_reset_state(0); goto done; } + +#if SMP_MULTI_ADDR_MODE_EN + ble_hs_id_set_used_addr_type(own_addr_type); +#endif if (duration_ms != BLE_HS_FOREVER) { ble_gap_slave_set_timer(duration_ticks); @@ -5713,6 +5717,109 @@ #endif } +#if SMP_MULTI_ADDR_MODE_EN +#include "host/ble_store.h" + +int +ble_gap_unpair(const ble_addr_t *peer_addr, const ble_addr_t *own_addr) +{ +#if NIMBLE_BLE_SM + struct ble_hs_conn *conn; + + if (ble_addr_cmp(peer_addr, BLE_ADDR_ANY) == 0) { + return BLE_HS_EINVAL; + } + + ble_hs_lock(); + + conn = ble_hs_conn_find_by_addr(peer_addr); + if (conn != NULL) { + ble_addr_t cur_own_addr = {0}; + cur_own_addr.type = conn->bhc_our_addr_type; + ble_hs_id_copy_addr(conn->bhc_our_addr_type, cur_own_addr.val, NULL); + + if(ble_addr_cmp(own_addr, &cur_own_addr) == 0){ + ble_gap_terminate_with_conn(conn, BLE_ERR_REM_USER_CONN_TERM); + } + } + + ble_hs_unlock(); + + ble_hs_pvcy_remove_entry(peer_addr->type, peer_addr->val); + + return ble_store_util_delete_peer(peer_addr, own_addr); +#else + return BLE_HS_ENOTSUP; +#endif +} + +int +ble_gap_unpair_oldest_peer(void) +{ +#if NIMBLE_BLE_SM + int num_peers; + int rc; + + num_peers = ble_store_config_get_our_secs_num(); + if(num_peers == 0){ + return BLE_HS_ENOENT; + } + + struct ble_store_value_sec *oldest_val_sec = ble_store_config_get_our_secs(0); + + rc = ble_gap_unpair(&oldest_val_sec->peer_addr, &oldest_val_sec->own_addr); + if (rc != 0) { + return rc; + } + + return 0; +#else + return BLE_HS_ENOTSUP; +#endif +} + +int +ble_gap_unpair_oldest_except(const ble_addr_t *peer_addr) +{ +#if NIMBLE_BLE_SM + int num_peers; + int rc, i; + + num_peers = ble_store_config_get_cccds_num(); + if (num_peers == 0) { + return BLE_HS_ENOENT; + } + + ble_addr_t own_addr; + own_addr.type = ble_hs_id_get_used_addr_type(); + rc = ble_hs_id_copy_addr(own_addr.type, own_addr.val, NULL); + if(rc != 0){ + return -1; + } + + struct ble_store_value_cccd *oldest_val_cccd = ble_store_config_get_cccds(0); + + for (i = 0; i < num_peers; i++) { + struct ble_store_value_cccd *cur = oldest_val_cccd + i; + if (ble_addr_cmp(peer_addr, &cur->peer_addr) != 0 || + ble_addr_cmp(&own_addr, &cur->own_addr) != 0) { + break; + } + } + + if (i >= num_peers) { + return BLE_HS_ENOMEM; + } + + oldest_val_cccd = oldest_val_cccd + i; + + return ble_gap_unpair(&oldest_val_cccd->peer_addr, &oldest_val_cccd->own_addr); +#else + return BLE_HS_ENOTSUP; +#endif +} + +#else int ble_gap_unpair(const ble_addr_t *peer_addr) { @@ -5803,6 +5910,7 @@ return BLE_HS_ENOTSUP; #endif } +#endif void ble_gap_passkey_event(uint16_t conn_handle, -- Gitblit v1.9.3