Hi:
我遇到一个主从一体机pairing的问题,
我使用最新sdk 4.30,用的是原装例子multi-role,测试某个peripheral的配对,peripheral是主动发起配对模式的;
我设置的配对信息是:
uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;//GAPBOND_PAIRING_MODE_NO_PAIRING;//GAPBOND_PAIRING_MODE_INITIATE;
uint8_t mitm = TRUE;
uint8_t ioCap = DEFAULT_IO_CAPABILITIES;//GAPBOND_IO_CAP_DISPLAY_ONLY;
uint8_t bonding = TRUE;
uint8_t replaceBonds = FALSE;
// Set pairing mode
GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);
// Set authentication requirements
GAPBondMgr_SetParameter(GAPBOND_MITM_PROTECTION, sizeof(uint8_t), &mitm);
// Set I/O capabilities
GAPBondMgr_SetParameter(GAPBOND_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);
// Set bonding requirements
GAPBondMgr_SetParameter(GAPBOND_BONDING_ENABLED, sizeof(uint8_t), &bonding);
// Set bond list LRU
GAPBondMgr_SetParameter(GAPBOND_LRU_BOND_REPLACEMENT, sizeof(uint8_t), &replaceBonds);
// Register and start Bond Manager
VOID GAPBondMgr_Register(&multi_role_BondMgrCBs);
测试出现连接后,还没有进入pairing start state,直接就pairing failed:错误码是23.unspecified reason;
用wireshark抓包如下图:
请问,这可能是什么原因造成的?
Kevin Qiu1:
改成uint8_t pairMode = GAPBOND_PAIRING_MODE_INITIATE;也不能配对成功吗
user6224880:
回复 Kevin Qiu1:
Hi:
不能的,这里的peripheral 固定是GAPBOND_PAIRING_MODE_INITIATE配对模式,是配对发起者,
配对码是要通过算法算出的;
之前使用simple_central,是可以正常进行配对流程的,现在是multi-role,就不能配对了。
pairing start 状态都没有触发。
Kevin Qiu1:
回复 user6224880:
我刚测试配对成功,默认密码是123456
user6224880:
回复 Kevin Qiu1:
Hi:
请问是用哪个sdk下的Multi-role?
我这要与peripheral 配对,peripheral 是用蓝牙5协议的,配对码是要经过自定义的算法 计算出来的。
我用sdk 4.30 或者sdk 4.10 下的multi role 的例子,蓝牙协议是4.2,连接peripheral 后,发现没有进入pairing start state,直接就pairing failed :unspecified reason。
user6224880:
回复 Kevin Qiu1:
Hi:
我通过wireshark抓包,对比之前ble5stack下的例程simple_central与peripheral 配对流程,
multi-role与peripheral 配对失败在于Pairing Public Key后没有继续收到Peripheral 的Pairing Confirm,以及DHKey Check。
请问,Multi-role端需要设置什么参数,才能获得Peripheral 的pairing confirm以及DHKey Check?
截图:simple_central 与peripheral 配对抓包流程
Kevin Qiu1:
回复 user6224880:
sdk 4.30下的Multi-role,例程要有输入密码的过程,没输入密码不会收到Pairing Confirm
user6224880:
回复 Kevin Qiu1:
请问,在sdk4.30 的multirole 例程下代码,你有做些改动吗? 因为我的peripheral 端一旦配对失败立即断开,
而multi-role 端连接peripheral 后,马上就pairing failed。
Kevin Qiu1:
回复 user6224880:
没有修改过,我用手机连的,CC2640r2f作从机
user6224880:
回复 Kevin Qiu1:
我是测试sdk 4.30 multi-role例程,CC2640R2 作为主机,发现multi-role 配对流程没有进入pairing start state就pairing failed:unspecified reason.
而用sdk 3.40 的multi-role,测试同一个peripheral,连接后直接就paired、bond save success,这流程也是不符合标准的;两个例程中的配对参数都是一样的;
如下:uint32_t passkey = DEFAULT_PASSCODE;//123456uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;uint8_t mitm = TRUE;uint8_t ioCap = DEFAULT_IO_CAPABILITIES;//GAPBOND_IO_CAP_DISPLAY_ONLY;uint8_t bonding = TRUE;GAPBondMgr_SetParameter(GAPBOND_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);// Set pairing modeGAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);// Set authentication requirementsGAPBondMgr_SetParameter(GAPBOND_MITM_PROTECTION, sizeof(uint8_t), &mitm);// Set I/O capabilitiesGAPBondMgr_SetParameter(GAPBOND_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);// Set bonding requirementsGAPBondMgr_SetParameter(GAPBOND_BONDING_ENABLED, sizeof(uint8_t), &bonding);
而同样的配对参数,在ble5stack下的simple_central 就是可以与peripheral配对的,配对流程就是收到pairing start state,再输入正确的,计算出来的配对码,就可以触发pairing success,再自动bond success。
不知multi-role 为何配对结果就完全不同?