CC2541在BLE 1.4.2.2协议栈下的同时启用Peripheral和Observer角色时蓝牙经常连接超时断开
时间:10-02
整理:3721RD
点击:
大家好:
目前我在做的项目需要CC2541“同时”开启Observer和Peripheral GAP角色,基于Wiki上的 例程 “SimpleBLEPeripheralObserver”.在原始例程中,Observer角色的扫描过程是通过按键进行触发,我们的项目中需要随时或者频繁的一直开启者。所以,我将Observer的扫描过程开启通过自定义事件的方式放在SimpleBLEPeripheral_ProcessEvent中进行。如下:
uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
{
if(events & SBP_LAMP_OBSERVER_START)
{
LCD_WRITE_STRING( "Discovering...", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( "", HAL_LCD_LINE_2 );
GAPObserverRole_StartDiscovery( DEFAULT_DISCOVERY_MODE, DEFAULT_DISCOVERY_ACTIVE_SCAN, DEFAULT_DISCOVERY_WHITE_LIST );
}
...
发送首次开始扫描事件的位置在peripheralStateNotificationCB的GAPROLE_STARTED的事件分支中,如下:
static void peripheralStateNotificationCB( gaprole_States_t newState )
{
switch ( newState )
{
case GAPROLE_STARTED:
{
......
osal_set_event(simpleBLEPeripheral_TaskID,SBP_LAMP_OBSERVER_START); //开始新的扫描
}
后续连续开始扫描的位置在observerEventCB中,如下:
static void observerEventCB( observerRoleEvent_t *pEvent )
{
.....
case GAP_DEVICE_DISCOVERY_EVENT: //扫描过程结束事件
{
。......
osal_set_event(simpleBLEPeripheral_TaskID,SBP_LAMP_OBSERVER_START); //开始新的扫描
break;
通过iOS软件Light Bluei可以正常连接到CC2541,但是过一会,就会因为链接超时,蓝牙断开?
求教各位大拿,有没有什么可能的原因或者解决方案? 多谢!
