最新的cc2640 MultiRole作为从机时是否支持广播GAP_ADTYPE_ADV_NONCONN_IND与GAP_ADTYPE_ADV_IND的切换?
3个MultiRole设备不连接任何节点时GAP_ADTYPE_ADV_NONCONN_IND与GAP_ADTYPE_ADV_IND的切换正常,但是在下面所述的情况有问题:
ABC三个MultiRole设备A-->Central, B-->(Central+Peripheral), C-->Peripheral,连接情况是A连接B后B切换成GAP_ADTYPE_ADV_NONCONN_IND类型广播,B再连接C后C切换成GAP_ADTYPE_ADV_NONCONN_IND类型广播,作为从设备的全切换成GAP_ADTYPE_ADV_NONCONN_IND广播,此时操作C广播切换GAP_ADTYPE_ADV_NONCONN_IND与GAP_ADTYPE_ADV_IND的切换正常,但是B切换广播不成功;
广播切换步骤在按键处理回调中进行关闭广播和切换广播类型,
if (keys & KEY_RIGHT) // turn advertising on / off { uint8_t adv; adv = FALSE; err = GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &adv, NULL); if (adv_status) { uint8 adv_event_type = GAP_ADTYPE_ADV_IND; GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &adv_event_type, NULL); adv_status = 0; } else { uint8 adv_event_type = GAP_ADTYPE_ADV_NONCONN_IND; GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &adv_event_type, NULL); adv_status = 1; } return; }
在下面函数中打开广播使能
static void simpleTopology_processRoleEvent(gapMultiRoleEvent_t *pEvent)
...
case GAP_END_DISCOVERABLE_DONE_EVENT:
{
if (gapRoleNumLinks(GAPROLE_AVAILABLE_LINKS) > 0)
{
LCD_WRITE_STRING("Ready to Advertise", LCD_PAGE2);
}
else
{
LCD_WRITE_STRING("Can't Adv : No links", LCD_PAGE2);
}
uint8_t adv = TRUE;
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &adv, NULL);//打开广播使能
}
break;
现在遇到的问题是B设备在切换时关闭广播使能时返回bleIncorrectMode 0x12 //!< Not setup properly to perform that task后没有GAP_END_DISCOVERABLE_DONE_EVENT事件产生,A C设备切换正常;
问下TI工程师MultiRole是否支持B这种切换?处理的方式是否有问题?代码其余部分没有更改!
烧写官方MultiRole固件后以上述相同的连接方法也出现广播关闭时返回bleIncorrectMode 0x12不能关闭广播的情况!