This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2540广播间隔更新问题

Other Parts Discussed in Thread: CC2540

大家好!

      最近用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 );