hi,
我最近测试了CC2541 peripheralbroadcaster工程以及CC2650 multi-role工程,都可以实现在连接后继续广播的功能。但无论如何改 DEFAULT_ADVERTISING_INTERVAL,没建立连接时候的广播都正常,但连接后的广播间隔就会降到1.3s。(间隔的数字不是抓包得到的,是我看电流的峰值得来的,但很多人的帖子印证我的结果,不会错
https://e2e.ti.com/support/wireless_connectivity/f/538/t/410860
https://e2e.ti.com/support/wireless_connectivity/f/538/p/124491/741026#741026
)所以我想知道,是否能修改建立连接后的广播频率?因为我就发现固件里一开始初始化的时候配置了一下ADVERTISING_INTERVAL,
// Set advertising interval
{
uint16 advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
}
还有其他参数要配置吗?
kai
Yan:
kai,
因为这是固定的,正确的应该是TGAP_CONN_ADV_INT_MIN 和 TGAP_CONN_ADV_INT_MAX,但 在库里面这两个有对应设置好的默认值,就是1.28s,你从应用层怎么设置也没有,GAP底层调用的时候就是直接用默认值。
当然也不是没有办法,其实很简单,你直接用HCI命令就行,不要用gap的接口,gap本质上也是调用HCI的命令。
HCI_LE_SetAdvParamCmd(),就是你想要的,在hci.h里面。
2541可以直接这么干。
2640还不行,因为iCall里面并没有把这条命令直接链接到stack工程里面。你要是自己愿意花点精力把这条命令模仿其他命令加到iCall里面去那当然也行。
Kai Zhao:
回复 Yan:
Hi Y,
我尝试在peripheral.c的 GAPRole_ProcessEvent()里面调用HCI_LE_SetAdvParamCmd()和HCI_LE_SetAdvEnableCmd()但都没成功,代码如下:
uint16 advIntervalMin = 80 ; uint16 advIntervalMax = 80 ; uint8 advType = GAP_ADTYPE_ADV_NONCONN_IND ; uint8 ownAddrType = HCI_PUBLIC_DEVICE_ADDRESS; uint8 directAddrType = HCI_PUBLIC_DEVICE_ADDRESS; uint8 *directAddr = NULL; uint8 advChannelMap = gapRole_AdvChanMap; uint8 advFilterPolicy = gapRole_AdvFilterPolicy;
HCI_LE_SetAdvParamCmd(advIntervalMin,advIntervalMax,advType,ownAddrType,directAddrType,directAddr,advChannelMap,advFilterPolicy );hciStatus_t temp=HCI_LE_SetAdvEnableCmd( HCI_ENABLE_ADV);
我检查返回的hciStatus 是0,但收不到广播。如果用GAP的接口打开广播后,单独调用HCI_LE_SetAdvParamCmd()也不起作用。不知道是我哪里弄错了?
Kai