一个绑定和配对的问题
首先我想要实现的事 IOS 设备和CC2540 外设进行连接,连接开始由IOS 发起配对请求 ,然后由2540外设提供配对密码 再由ios
输入对应密码完成配对,然后进行绑定。
1: 在peipheral 工程中,初始化外设参数时,我 uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE ;
这个参数设置后 通过 IOS lightbule APP 在链接时能够弹出密码出入提示, initiate a pairing request or slave security request 这是这个参数的译文,不等待,主动发起配对请求或 外设安全请求 ,这里为何是主动发起呢? 链接不是由主机扫描到设备后,主机发起配对请求吗? 外设应该就行回应就是了,为何主动发起,这里如何说明? 这里主动发起是不是指主动向IOS 发起密码输入请求呢? 也就是说 外设是基本密码显示能力 ,不具备输入能力,这里就要主动向IOS 发起输入密码请求? 那么 GAPBOND_PAIRING_MODE_WAIT_FOR_REQ 参数是不是IOS 端应该选择的参数呢,也是等待发起配对密码安全请求 因为IOS 具备输入能力?
2: Setup the GAP Bond Manager 这里这里有个 uint32 passkey = 132 ; // passkey "000000" 这里的passkey 是如何应用在哪里应用呢?译文是The default passcode for MITM protection 避免中间人攻击, 请问什么事中间人 , 什么事权鉴? 这里passkey 该如何来应用?
3:
// GAP Bond Manager Callbacks 密码生成回调
static gapBondCBs_t simpleBLEPeripheral_BondMgrCBs =
{
simpleBLECentralPasscodeCB, // Passcode callback (not used by application) 密码回调
NULL // Pairing / Bonding state Callback (not used by application) 绑定 配对 回调
}; 在peripheral 工程中移植了 central 工程的 simpleBLECentralPasscodeCB 并且在回调函数里注册上, 这个函数在IOS 设备链接请求时进行回调 通过串口打印出密码,
uint32 passcode;
uint8 str[7];
// Create random passcode 创建随机密码
LL_Rand( ((uint8 *) &passcode), sizeof( uint32 ));
passcode %= 1000000;// 取第六位
debugoutdat((uint16)passcode,"xasscode=");
// Display passcode to userpasscode 显示密码
if ( uiOutputs != 0 )
{
LCD_WRITE_STRING( "PasscodevX:\r\n ", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( (char *) _ltoa(passcode, str, 10), HAL_LCD_LINE_2 );
debugoutchar("\r\n");
}
// Send passcode response 发送密码响应
GAPBondMgr_PasscodeRsp( connectionHandle, SUCCESS, passcode );
但是 uint32 passcode; 这个密码在定义时并没初始化, 在 LL_Rand( ((uint8 *) &passcode), sizeof( uint32 )); 这个函数上方有注册是创建
随机密码,这个函数是随机密码生成吗? 为何串口每次在链接时都打印出一个同样的密码 【318018】 这个密码从哪里来,这个密码是局部变量
passcode 定义没有初始化时系统随机配的吧,因为这里并没任何指令给passcode 赋值? 这个passcode 和 上面的 uint32 passkey = 132 ; // passkey "000000" 这里的passkey 又如何区别?
3: IOS 输出密码后,外设在哪里接收到这个IOS 传过来的密码又如何去匹配,匹配成功后建立连接,进入绑定设备后每次启动连接时这一步都无需进行,我请问下绑定是IOS 进行绑定还是外设绑定, 如果是外设绑定IOS 那么IOS 每次启动的 ID 都是变的,如何识别? 如果IOS 绑定了外设,那么我在 GAPRole_GetParameter(GAPROLE_BD_ADDR, ownAddress); 认为修改
ownAddress[5]=0XDD;
ownAddress[4]=0XDE; 后应该IOS 就认为这个设备不是绑定列表的设备 应该是要在链接时 要求再次输入密码来进一步进行绑定,但是实验中并没这一步,还是无需密码?
4: 绑定 是主机绑定外设 还是外设绑定主机 gapBondMgrEraseAllBondings();// 解除所有绑定 这个函数如何应用?
谢谢回复
我也有同样的疑惑,有没有人解答一下,谢谢
Thinkcore wu,"gapBondMgrEraseAllBondings();// 解除所有绑定 这个函数如何应用?" 这个问题有结果了没? 我现在也在关心这个问题了,有结果的话,麻烦告知一声,谢谢!我想用这个函数试试,但总是REBUILD失败!还没查出问题出在哪
我只知道第一个问题:
如果让主机ios端发起配对的话,主机端ios配置成GAPBOND_PAIRING_MODE_INITIATE,初始化配对;则simpleperipheral须设置为GAPBOND_PAIRING_MODE_WAIT_FOR_REQ等待配对;这两个参数需要配合使用才行