新人的问题,请前辈们指点:
我看了simpleperipheral 和 central的例子,他们初始化都是设置的GAPBOND_PAIRING_MODE_WAIT_FOR_REQ等待配对.
那么我的问题是,到底是peripheral发起的配对请求还是central?在什么时候发起的配对请求?
edgar liu:
回复 Yan:
非常感谢您的回答.
那么怎么设置才能使得必须配对之后才能进数据传输呢?
edgar liu:
回复 Yan:
非常感谢您的回答,对我帮助很大.
xie weiping:
回复 Yan:
Hi Yan,
“只要其中一个设置成GAPBOND_PAIRING_MODE_INITIATE, 两边就会配对”。那么配对的时候,两边是不是互相需要发送密码才行?只有密码对了才算配对成功吗?
谢谢!
Yan:
回复 xie weiping:
是的, 必须会有密码.
至于是否要手动输入, 根据设备的IO Capability 设置来的. 就是设备的输入输出能力.
你看一下IO Capability的定义.
xie weiping:
回复 Yan:
Hi Yan,
如果不手动输入,它的密码从哪里获得呢?不手动输入密码是如何配对成功的?谢谢!
Yan:
回复 xie weiping:
hi xie,
蓝牙很聪明的,
你通过IO capability 告诉它你没法手动输入, 它会自动产生随机数会去匹配的.
xie weiping:
回复 Yan:
Hi Yan,
关于绑定我看代码的时候遇到了一些疑问。如下:
例子代码中,每当链接成功事件产生后,会通知绑定管理
// Notify the Bond Manager to the connection VOID GAPBondMgr_LinkEst( pPkt->devAddrType, pPkt->devAddr, pPkt->connectionHandle, GAP_PROFILE_PERIPHERAL );
这个函数的作用是绑定蓝牙吗?
bStatus_t GAPBondMgr_LinkEst( uint8 addrType, uint8 *pDevAddr, uint16 connHandle, uint8 role ){ uint8 idx; // NV Index uint8 publicAddr[B_ADDR_LEN] // Place to put the public address = {0, 0, 0, 0, 0, 0};
idx = GAPBondMgr_ResolveAddr( addrType, pDevAddr, publicAddr ); if ( idx < GAP_BONDINGS_MAX ) {
……
}
代码中只有判断 idx < GAP_BONDINGS_MAX ,意思是这个蓝牙地址在绑定列表中?
如果idx > =GAP_BONDINGS_MAX 呢?
我都看蒙了,到底应该如何绑定蓝牙啊?
谢谢!
Yan:
回复 xie weiping:
xie,
GAP_BONDINGS_MAX 是flash 里面允许存储的最多的绑定设备信息的个数.
你不用担心怎么绑定的, 绑定的工作底层自动会把做好的.
你要做的只是在应用层的宏定义里面打开绑定, 设置一下IO capability 就行. 如果你的设备的IO capability 设置成有输入功能, 就会要求输入密码, 如果你是没有输入功能更, 系统会自动产生随机密码.
TI中文支持网


