編譯W801的固件代碼(沒記錯是wm_sdk_w80x_20211115.zip),然後燒錄固件到W801。
在串口調試助手輸入:
t-bt-on
t-ble-adv(1)
藍牙啟動成功,並正常發送廣播報文
手機打開藍牙並掃描到W801。點擊配對成功。
然後,手機端將配對好的W801設備刪除,板子也重新上電(排除幹擾)。
串口助手麗依次輸入t-bt-on, t-ble-adv(1),手機端還是能掃描到W801設備。但是
點擊配對時卻失敗,串口終端內容是這樣的:
[WM_I] <0:00:01.288> adapter status = bt_state_on
[WM_I] <0:00:01.294> init base application
[WM_I] <0:00:06.968> ### tls_ble_demo_adv type=1
[WM_I] <0:00:06.974> Starting advertising
GAP procedure initiated: advertise; disc_mode=2 direct_addr_type=0 direct_addr=00:00:00:00:00:00 adv_channel_map=0 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=64 adv_itvl_max=64
[WM_I] <0:00:11.806> gap_event, [BLE_GAP_EVENT_CONNECT]
[WM_I] <0:00:12.068> gap_event, [BLE_GAP_EVENT_REPEAT_PAIRING]
[WM_I] <0:00:45.070> gap_event, [BLE_GAP_EVENT_DISCONNECT]
是不是這個BLE_GAP_EVENT_REPEAT_PAIRING沒處理好?源碼沒有改動,只是編譯後燒錄到板子上。
OK,我們做個記錄
https://github.com/h2zero/NimBLE-Arduino/issues/116
case BLE_GAP_EVENT_REPEAT_PAIRING:
/* We already have a bond with the peer, but it is attempting to
* establish a new secure link. This app sacrifices security for
* convenience: just throw away the old bond and accept the new link.
*/
/* Delete the old bond. */
rc = ble_gap_conn_find(event->repeat_pairing.conn_handle, &desc);
assert(rc == 0);
ble_store_util_delete_peer(&desc.peer_id_addr);
TLS_BT_APPL_TRACE_DEBUG("!!!BLE_GAP_EVENT_REPEAT_PAIRING\r\n");
return BLE_GAP_REPEAT_PAIRING_RETRY;
搜索後發現,原來是要刪除原來的配對信息(持久化存儲)。然後再wm_ble_server_api_demo.c裡是有個case處理的。但是wm_ble_gap.c裡沒有。所以發送廣播時就醬紫。