微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540广播间隔更新问题

CC2540广播间隔更新问题

时间:10-02 整理:3721RD 点击:

大家好!

      最近用CC2540来发广播数据,上电后前10秒,间隔2秒广播一次。10秒后间隔3秒广播一次。但是用抓包软件看的一直都是2秒/次,也就是间隔更新失败。

      我用的是广播例程:SimpleBLEBroadcaster 

     程序采用POWER_SAVING模式,在主循环里延时10秒后,调用以下两种方法更新都不行,广播间隔还是2秒,所以想请大家指点一下,非常感激。

      方法一:参照初始化时设置广播间隔的程序,结果不行

      uint16 advInt = 4800;

      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 );

      方法二:调用函数HCI_LE_SetAdvParamCmd(),结果广播间隔也还是2秒

      uint16 advIntervalMin = 4800; // Required adv interval.

      uint16 advIntervalMax = 4800; // Required adv interval. 

      uint8 advType = HCI_SCANNABLE_UNDIRECTED;

      uint8 ownAddrType = HCI_PUBLIC_DEVICE_ADDRESS; // Public addr.

      uint8 directAddrType = HCI_PUBLIC_DEVICE_ADDRESS; // Useless here.

      uint8 *directAddr = NULL;

      uint8 advChannelMap = HCI_ADV_CHAN_ALL;

      uint8 advFilterPolicy = HCI_ADV_WL_POLICY_ANY_REQ;

      HCI_LE_SetAdvParamCmd( advIntervalMin , 

                                                          advIntervalMax , 

                                                          advType , 

                                                          ownAddrType , 

                                                          directAddrType , 

                                                          directAddr , 

                                                          advChannelMap , 

                                                          advFilterPolicy );

      

Xiaodong,

要修改广播参数,必须先停止广播,然后再修改,然后重新广播。你中间有停止吗?

hi Yan:

      修改之前,我有先停止广播的,具体操作如下,请帮忙看一下,非常感谢!

      我采用的是广播例程: SimpleBLEBroadcaster

          上电后间隔2秒广播一次,上电10秒后,自动改成3秒广播1次,但看到的是一直都是2秒/次


uint16 advIntervalMin = 4800; // Required adv interval.
uint16 advIntervalMax = 4800; // Required adv interval.
uint8 advType = HCI_SCANNABLE_UNDIRECTED;
uint8 ownAddrType = HCI_PUBLIC_DEVICE_ADDRESS; // Public addr.
uint8 directAddrType = HCI_PUBLIC_DEVICE_ADDRESS; // Useless here.
uint8 *directAddr = NULL;
uint8 advChannelMap = HCI_ADV_CHAN_ALL;
uint8 advFilterPolicy = HCI_ADV_WL_POLICY_ANY_REQ;

uint8 current_adv_enabled_status;
uint8 new_adv_enabled_status; 

GAPRole_GetParameter( GAPROLE_ADVERT_ENABLED, &current_adv_enabled_status );
if( current_adv_enabled_status == TRUE )
{
    new_adv_enabled_status = FALSE;

    GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &new_adv_enabled_status );
}

HCI_LE_SetAdvParamCmd(advIntervalMin,
                                                   advIntervalMax,
                                                   advType,
                                                   ownAddrType,
                                                   directAddrType,
                                                   directAddr,
                                                   advChannelMap,
                                                   advFilterPolicy);

//change the GAP advertisement status to opposite of current status
new_adv_enabled_status = TRUE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &new_adv_enabled_status );

我也更新了没有反应,请问您后来这个问题解决了么?怎么解决的?谢谢!

要设置GAP参数

GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_MID_ADV_INTERVAL_MIN );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_MID_ADV_INTERVAL_MAX );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_FAST_ADV_DURATION );
// Enable advertising
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &advEnable );

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top