最新的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不能关闭广播的情况!
