情况是这样的,调试App搜到蓝牙设备后,连接,弹出框需要配对,配对成功后。 直接关闭APP或者点击断开连接,再进入APP,搜索不到设备。此时除非重启设备或者重启手机蓝牙开关,否则后续都搜不到广播,即连接还在。
贴下代码,望解疑惑!
// 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_ONLY; //显示密码, 以便主机输入配对的密码
uint8 bonding = TRUE;
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 );
}
//绑定过程中的密码管理回调函数
static void ProcessPasscodeCB(uint8 *deviceAddr,uint16 connectionHandle,uint8 uiInputs,uint8 uiOutputs )
{
uint32 passcode;
uint8 str[7];
//在这里可以设置存储,保存之前设定的密码,这样就可以动态修改配对密码了。
// Create random passcode
#if 0
LL_Rand( ((uint8 *) &passcode), sizeof( uint32 ));
passcode %= 1000000;
#else
passcode = 123456; // 连接密码, 固定的 123456
#endif
//在lcd上显示当前的密码,这样手机端,根据此密码连接。
// Display passcode to user
if ( uiOutputs != 0 )
{
HalLcdWriteString( "Passcode:", HAL_LCD_LINE_1 );
HalLcdWriteString( (char *) _ltoa(passcode, str, 10), HAL_LCD_LINE_2 );
}
// Send passcode response 发送密码请求给主机
GAPBondMgr_PasscodeRsp( connectionHandle, SUCCESS, passcode );
}
//绑定过程中的状态管理,在这里可以设置标志位,当密码不正确时不允许连接。
static void ProcessPairStateCB( uint16 connHandle, uint8 state, uint8 status )
{
if ( state == GAPBOND_PAIRING_STATE_STARTED )/*主机发起连接,会进入开始绑定状态*/
{
HalLcdWriteString( "Pairing started", HAL_LCD_LINE_1 );
gPairStatus = 0;
}
else if ( state == GAPBOND_PAIRING_STATE_COMPLETE )/*当主机提交密码后,会进入完成*/
{
if ( status == SUCCESS )
{
HalLcdWriteString( "Pairing success", HAL_LCD_LINE_1 );/*密码正确*/
gPairStatus = 1;
}
else
{
HalLcdWriteStringValue( "Pairing fail", status, 10, HAL_LCD_LINE_1 );/*密码不正确,或者先前已经绑定*/
if(status ==8){/*已绑定*/
gPairStatus = 1;
}else{
gPairStatus = 0;
}
}
//判断配对结果,如果不正确立刻停止连接。
if(simpleBLEState == BLE_STATE_CONNECTED && gPairStatus !=1){
GAPRole_TerminateConnection(); // 终止连接
// 终止连接后, 需要复位从机
HAL_SYSTEM_RESET();
}
}
else if ( state == GAPBOND_PAIRING_STATE_BONDED )
{
if ( status == SUCCESS )
{
HalLcdWriteString( "Bonding success", HAL_LCD_LINE_1 );
}
}
}
user5267698:
还未解决,求解惑,不胜感激