如何讓每次連接都需要輸入密碼

修改了從機配對設(shè)置后,手機藍(lán)牙連接的時候需要配對密碼,但是用藍(lán)牙調(diào)試助手就能直接連接上,想讓調(diào)試助手連接時也需要密碼,需要怎么操作?


? ? ? ? uint32_t passkey = 123456; // passkey "000000"

? ? ? ? uint8_t? pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;

? ? ? ? uint8_t? mitm = TRUE;

? ? ? ? uint8_t? bonding = TRUE;

? ? ? ? uint8_t? ioCap = GAPBOND_IO_CAP_KEYBOARD_ONLY;

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_PAIRING_MODE, sizeof(uint8_t), &pairMode);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_MITM_PROTECTION, sizeof(uint8_t), &mitm);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(uint8_t), &bonding);


如果想要調(diào)試助手連接也輸入pin碼,那么可以這樣修改:uint8_t? pairMode = GAPBOND_PAIRING_MODE_INITIATE;

配對綁定后再次連接是不需要pin碼的,如果想要每次都輸入PIN碼,可以把這個開啟綁定屏蔽:?

GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(uint8_t), &bonding);


好的謝謝指導(dǎo),修改設(shè)置后發(fā)現(xiàn)了新的問題:

1、既然可以直接連接不進(jìn)行配對,設(shè)置配對是不是完全只是出于安全考慮?配對與否對能否正常連接沒有影響。

3、兩個藍(lán)牙模塊配對,從機啟動配對,主機沒有密碼也能完成配對,密碼是沒有起到作用嗎?


是的,配對是可選項,兩個藍(lán)牙配對需要將代碼進(jìn)行修改后才起到作用,如果有需要用到此功能的話,可以發(fā)送郵件至hy@wch.cn,給你發(fā)送修改后的代碼。


設(shè)置pairMode = GAPBOND_PAIRING_MODE_INITIATE,如果手機連接藍(lán)牙,不輸入passkey配對的話會在一段時間內(nèi)斷開。但是兩個藍(lán)牙模塊就能直接配對成功,我想讓兩個藍(lán)牙也像手機一樣,passkey不正確就不能配對成功然后自動斷開,可不可以。

image.png


可以,但是需要如下配置,將一端配置為:

?uint8_t? ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;

?GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);

另一個設(shè)置為:

?uint8_t? ioCap = GAPBOND_IO_CAP_KEYBOARD_ONLY;

?GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);

這樣配置之后,配對會失敗,在主機打印Pairing fail處調(diào)用GAPRole_TerminateLink主動斷開連接就可以了。



十分感謝!但是又有了新的問題:第一次匹配綁定成功,能進(jìn)行正常的數(shù)據(jù)交互,但是斷開連接后再次進(jìn)行連接,就不能進(jìn)行數(shù)據(jù)收發(fā),這是為什么。

image.png


Write Error : 1應(yīng)該是req.handle = centralCharHdl;傳錯導(dǎo)致的,

1.斷開連接后centralCharHdl會清0,centralCharHdl值應(yīng)該是0x23,是在調(diào)用GATT_DiscPrimaryServiceByUUID后獲取的,斷開連接再連接可能這個函數(shù)沒有調(diào)用成功,可以寫個任務(wù),調(diào)用失敗后1s再次調(diào)用,一直到調(diào)用成功,

2.也可以把0x23handle 記下來,傳入?yún)?shù)的時候直接寫死,如req.handle = 0x23


?uint32_t passkey = 666666; // passkey "000000"

? ? ? ? u8? pairMode = GAPBOND_PAIRING_MODE_INITIATE;

? ? ? ? u8? mitm = TRUE;

? ? ? ? u8? bonding = FALSE;

? ? ? ? u8? ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_PAIRING_MODE, sizeof(u8), &pairMode);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_MITM_PROTECTION, sizeof(u8), &mitm);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(u8), &ioCap);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(u8), &bonding);

從設(shè)備這樣設(shè)置,為什么密碼輸入錯誤還能正常連接,讀寫數(shù)據(jù)



?uint32_t passkey = 666666; // passkey "000000"

? ? ? ? u8? pairMode = GAPBOND_PAIRING_MODE_INITIATE;

? ? ? ? u8? mitm = TRUE;

? ? ? ? u8? bonding = FALSE;

? ? ? ? u8? ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_PAIRING_MODE, sizeof(u8), &pairMode);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_MITM_PROTECTION, sizeof(u8), &mitm);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(u8), &ioCap);

? ? ? ? GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(u8), &bonding);

從設(shè)備這樣設(shè)置,為什么密碼輸入錯誤還能正常連接,讀寫數(shù)據(jù)



設(shè)置的是從設(shè)備


可以參考這篇博客,加上回調(diào)函數(shù),密碼錯誤則直接調(diào)用斷開函數(shù)。

BLE配對與綁定二(連接) - SweetTea_lllpc - 博客園


感謝大佬,解決了


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频