向各位大侠请教一个问题:我想让我的BLE从设备具备连接配对,和读特征值要求鉴权读。就是当iPhone连接设备时,弹出输密码的界面,然后读特征值时也要弹出输密码的界面。目前我实现了连接时弹框输密码的功能,但是设定了GATT_PERMIT_AUTHEN_READ权限的特征值,读的时候,不会要求输密码。是不是因为在连接的时候已经配过对了?要怎样才能实现iPhone在两个地方都弹出输密码的?
Yan:
hi xiaoming,
是的,在连接的时候已经配对过了。
GATT_PERMIT_AUTHEN_READ 只是说读这个值要求链路是经过鉴权,也就是配对过的, 而并不会在读的时候要求你输密码。
Xiaoming Lan:
回复 Yan:
Yan,谢谢。那是不是就是说没办法做到,两个地方同时要求输密码?
Xiaoming Lan:
回复 Xiaoming Lan:
把特征值设置成GATT_PERMIT_AUTHOR_READ,行不行呢?
又或者有没有什么办法,让连接配完对后,让两边都“忘记”自己已经配过对,读的时候,再发起一次配对?
Xiaoming Lan:
回复 Xiaoming Lan:
1. 我在程序中GAP Bond Manger配置如下:
// Setup the GAP Bond Manager { uint32 passkey = 0; // passkey "000000" uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE; uint8 mitm = TRUE; uint8 ioCap = GAPBOND_IO_CAP_DISPLAY_YES_NO; uint8 bonding = FALSE; GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof ( uint32 ), &passkey ); GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof ( uint8 ), &pairMode ); GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof ( uint8 ), &mitm ); GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof ( uint8 ), &ioCap ); GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof ( uint8 ), &bonding ); }
2.在xxxProfile_ReadAttrCB的读特征值的回调函数中加入下面一段代码
if ( gattPermitAuthenRead( pAttr->permissions ) ) { // Insufficient authorization return ( ATT_ERR_INSUFFICIENT_AUTHOR ); } 3.可以实现iphone与设备连接时要求输密码配对,读取设置为GATT_PERMIT_AUTHEN_READ的特征值时,会弹出要是密码配对的框,但是当输入正确的密码后,还是不断重复弹出要求配对的框。请问一下这是这么回事呀?要怎样改才能输入正确密码一次就能读到数据?