BLE主機或從機繫結資訊丟失問題

2022-08-24 15:39:12 字數 2866 閱讀 9310

場景1: 主機端刪除了繫結資訊,但是nrf52從機端仍然保留了原繫結資訊, nrf52從機需要允許重新配對,通過新的繫結資訊去覆蓋原來的繫結資訊,需對**進行以下修改:

case pm_evt_conn_sec_config_req:

nrf_log_info("pm_evt_conn_sec_config_req: peer_id=%d, accept to fix bonding\r\n",

p_evt->peer_id);

// accept pairing request from an already bonded peer.

pm_conn_sec_config_t conn_sec_config = ;

pm_conn_sec_config_reply(p_evt->conn_handle, &conn_sec_config);

} break;

在重新配對操作時需要對增加的白名單做個判斷,即已經新增過的記錄不應當再加進來,基本的**邏輯如下:

already_added= false;

for (uint8_t i = 0; i

}if (!already_added)

場景2: 主機端保留了原繫結資訊,但是nrf52從機端刪除了繫結資訊,nrf52端需要在密碼較驗失敗時仍保持連線,**修改如下:

case pm_evt_conn_sec_failed:

nrf_log_info("pm_evt_conn_sec_failed: peer_id=%d, procedure=%d, error=0x%04x\r\n",

p_evt->peer_id,

p_evt->params.conn_sec_failed.procedure,

p_evt->params.conn_sec_failed.error);

if (p_evt->params.conn_sec_failed.procedure == pm_link_secured_procedure_encryption &&

p_evt->params.conn_sec_failed.error == pm_conn_sec_error_pin_or_key_missing)

else

sprintf(m_message, "security procedure failed, disconnect.\r\n");

dev_ctrl_send_msg(m_message, strlen(m_message));

(void)sd_ble_gap_disconnect(p_evt->conn_handle, ble_hci_remote_user_terminated_connection);

} break;

主機端如果是手機或平板電腦,根據作業系統的區別有不同的處理方式:

ios:    沒有解決方案,只能通過手動刪除主機端繫結資訊 。

android:   可以執行新的繫結程式,刪除掉舊的繫結資訊。

如果主機端為nrf52 裝置時,可以強制重新配對並建立繫結連線產生新的繫結資訊, 修改**如下:

case pm_evt_conn_sec_failed:

nrf_log_info("pm_evt_conn_sec_failed: peer_id=%d, procedure=%d, error=0x%04x\r\n",

p_evt->peer_id,

p_evt->params.conn_sec_failed.procedure,

p_evt->params.conn_sec_failed.error);

if (p_evt->params.conn_sec_failed.procedure == pm_link_secured_procedure_encryption &&

p_evt->params.conn_sec_failed.error == pm_conn_sec_error_pin_or_key_missing)

// peer device lost bond info, do re-bonding

nrf_log_info("peer lost bond info. start re-bonding\r\n");

err_code = pm_conn_secure(p_evt->conn_handle,true);

if (err_code != nrf_success)

nrf_log_warning("cannot fix out-of-sync bonding: 0x%08x\r\n", err_code);

else

sprintf(m_message, "connection failed, disconnect.\r\n");

dev_ctrl_send_msg(m_message, strlen(m_message));

(void)sd_ble_gap_disconnect(p_evt->conn_handle, ble_hci_remote_user_terminated_connection);

} break;

概述如下:

場景

ios

android

nrf52

comment

主機丟失繫結資訊oo

oi.e. central side bond info is removed

從機丟失繫結資訊xo

oi.e. peripheral side bond info is removed

VirtualBox 從主機訪問虛擬機器

在virtualbox中安裝系統,預設的網路設定為nat,這樣虛擬機器中的系統就能訪問外部網路了,但是在很多情況下,我們需要訪問虛擬機器中的服務,比如mysql服務,ssh服務等,我們需要乙個可以被訪問的ip位址,現在的情況中是不行的,你需要再對映一塊網絡卡,採用host only network的...

VSCode連線本地虛擬機器或遠端主機

安裝remote ssh外掛程式後,在圖示位置開啟遠端桌面並新建遠端主機。在本地生成id rsa檔案 ssh keygen t rsa p將生成的內容複製到遠端主機 root ssh authorized keys中。這樣本地客戶端可以不需要密碼登陸遠端桌面。可以cmd進行驗證。ctrl shift...

linux 指定從某個ip訪問某個主機或網路

linux 指定從某個ip訪問某個主機或網路 測試機a上有3個ip 分別為 eth0 192.168.1.34 eth0 1 192.168.1.36 eth1 192.168.1.35 首先在測試機b上開機apache access log 接著在測試機a上訪問b 可以看到 預設是從第乙個網絡卡的...