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.

[参考译文] CC2541:ImageB 中的广播进程停止

Guru**** 2577385 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/565366/cc2541-advertising-process-stopped-in-imageb

器件型号:CC2541

您好!

我将使用 SimpleBLEBroadcaster 项目。 如果我使用独立项目、所有项目都可以正常工作、但如果我将其移植到 OAD ImageB 项目、它会在一次发送 广播包后停止。 代码是

HCI_EXT_AdvEventNoticeCmd (beacon 任务 ID、SBP_ADV_CB_EVT);

……

uint16 SimpleBLEBroadcaster 处理器事件(uint8 task_id、uint16事件)
{....

if (Events & SBP_ADV_CB_EVT)
{
advComplete = 1;

返回(事件^ SBP_ADV_CB_EVT);
}

if (事件& SBP_Period_EVT)
{
//重新启动计时器
if (SBP_PERIOD_EVT_PERIOD)
{
OSAL_START_timerEx (beacon 任务 ID、SBP_PERIOD_EVT、SBP_PERIOD_EVT_PERIOD);
}

//执行周期性应用任务
performPeriodicTask();

返回(事件^ SBP_Periode_EVT);
}....

}

静态空 performPeriodicTask( void )
{
new_adv_enabled_status = true;

//将 GAP 广播状态更改为启用
GAPRole_SetParameter (GAPROLE_adverted_enabled、sizeof (uint8)、&new_adv_enabled_status);

……

if (advComplete)//<-此标志始终为0
{
advComplete = 0;


...}
} 

因此、我有两个问题:

1.将 GAP 广播状态更改为已启用设备后、仅发送一个数据包;

不会显示 SBP_ADV_CB_EVT 事件。

有人能解释出什么问题吗?

谢谢、

Alex。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否发布您添加到项目中的所有附加代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现在、我将使用 该代码

    void beacon Init( uint8 task_id )
    {
    beacon TaskID = task_id;
    
    //设置 GAP 广播设备角色配置文件
    {
    //对于其他硬件平台,设备在初始化时开始广播
    uint8 inited_advertising_enable = true;//false;//true;
    
    //通过将此值设置为零,器件将在之后进入等待状态
    //可发现30.72秒,并且不会再次进行广播
    //直到启用程序设置回 true
    uint16 gapRole_AddertOffTime = 0;
    
    #if 1 // AlexM 251116
    uint8 advType = GAP_ADTYPE_ADV_NONCONN_IND;//使用非连接的广播
    #else
    uint8 advType = GAP_ADTYPE_ADV_SCAN_IND;//使用可扫描的单向广播
    #endif
    
    //设置 GAP 角色参数
    GAPRole_SetParameter( GAPROLE_advertise_enabled,sizeof ( uint8 ),&inition_advertising_enable );// Alexm 241216等待延迟
    GAPRole_SetParameter( GAPROLE_GOOD_OFF_TIME,sizeof ( uint16 ),&gapRole_AddertOffTime );
    
    GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA,sizeof ( scanRspData ),scanRspData );
    GAPRole_SetParameter( GAPROLE_advertise_data,sizeof ( advertData ),advertData );
    
    GAPRole_SetParameter (GAPROLE_ADV_EVENT_TYPE、sizeof (uint8)、&advType);
    }
    
    //设置广播间隔
    {
    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 );
    }
    //设置延迟的配置文件启动
    osal_set_event ( beacon TaskID,SBP_START_DEVICE_EVT );
    } 

    器件发送1或2个广播包并停止。 SBP_Period_EVT 也不会出现。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    相同的代码在没有 OAD 的情况下工作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、当然可以。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否在 OAD 之前和之后读回图像以进行比较? 由于您提到的代码是相同的、因此十六进制映像应该大致相同。

    如果这不是问题、则 BIM 可能有问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、你是对的、我在我的 BIM 中找到了包。 谢谢!