TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2541配对与绑定问题,app退出后,连接不断开,于是再进App搜不到设备.

情况是这样的,调试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:

还未解决,求解惑,不胜感激

赞(0)
未经允许不得转载:TI中文支持网 » CC2541配对与绑定问题,app退出后,连接不断开,于是再进App搜不到设备.
分享到: 更多 (0)