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.

[参考译文] CC2340R5-Q1:在基本 BLE 项目中动态更改广播数据

Guru**** 2350610 points
Other Parts Discussed in Thread: CC2340R5, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1415911/cc2340r5-q1-change-advertising-data-dynamically-in-basic-ble-project

器件型号:CC2340R5-Q1
主题中讨论的其他器件:CC2340R5SysConfig

工具与软件:

我不熟悉 BLE、正在使用 CC2340R5 Launchpad 以及 Basic_BLE 项目。 我希望每50秒就广播一次数据、并且每个广播数据包中的数据包数量都会递增。 因此、我将 SysConfig 设置从外设更改为广播设备。 下图是我的 SysConfig 设置。

   

为了改变广播数据、我按照培训模块的步骤、在 app_broadcaster .c 文件中进行了如下更改

void Broadcaster_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
{
    switch(event)
    {
        case BLEAPPUTIL_ADV_START_AFTER_ENABLE:
        {
            MenuModule_printf(APP_MENU_ADV_EVENT, 0, "Adv status: Started - handle: "
                              MENU_MODULE_COLOR_YELLOW "%d" MENU_MODULE_COLOR_RESET,
                              ((BLEAppUtil_AdvEventData_t *)pMsgData)->pBuf->advHandle);

            /** New Code **/
            BLEAppUtil_AdvEventData_t * pkt = (BLEAppUtil_AdvEventData_t *)pMsgData;

            if (pkt->pBuf->advHandle == broadcasterAdvHandle_1)
            {
                bStatus_t status = FAILURE;

                status = GapAdv_prepareLoadByHandle(broadcasterAdvHandle_1, GAP_ADV_FREE_OPTION_DONT_FREE);

                if (status != SUCCESS)
                    for(;;); // Loop
              

                advData1[0] = 0x02;
                advData1[1] = GAP_ADTYPE_FLAGS;
                advData1[2] = GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED | GAP_ADTYPE_FLAGS_GENERAL;

                advData1[3] = 0x03; // length of this data
                advData1[4] = GAP_ADTYPE_MANUFACTURER_SPECIFIC;

                advData1[5] = MACaddress[5];
                advData1[6] = MACaddress[4];
                advData1[7] = MACaddress[3];
                advData1[8] = MACaddress[2];
                advData1[9] = MACaddress[1];
                advData1[10] = MACaddress[0];

                   if(packet_no<=255)
                   packet_no++;
                   else
                   packet_no=0;
      
                advData1[11] = packet_no.;
 

                broadcasterAdvHandler.eventMask = BLEAPPUTIL_ADV_END_AFTER_DISABLE;
                                                | BLEAPPUTIL_ADV_SET_TERMINATED;
                                                | BLEAPPUTIL_SCAN_REQ_RECEIVED;

                status = GapAdv_loadByHandle(broadcasterAdvHandle_1,
                                                    GAP_ADV_DATA_TYPE_ADV,
                                                    ADV_MAX_LEN,
                                                    advData1);

                if (status != SUCCESS)
                    for(;;);
                /** End New Code **/
            }
            break;
        }

        case BLEAPPUTIL_ADV_END_AFTER_DISABLE:
        {
            MenuModule_printf(APP_MENU_ADV_EVENT, 0, "Adv status: Ended - handle: "
                              MENU_MODULE_COLOR_YELLOW "%d" MENU_MODULE_COLOR_RESET,
                              ((BLEAppUtil_AdvEventData_t *)pMsgData)->pBuf->advHandle);
            break;
        }

        default:
        {
            break;
        }
    }
}

 但数据包编号 仅递增一次。 当我调试它时,通过设置一个断点,我发现程序计数器只进入这个函数一次。 我如何动态更改广播包。 请在这方面提供帮助

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

    您好!

    要更改飞行数据、我建议注册  BLEAPPUTIL_ADV_END 、并且每次 Adv 结束时都会调用此事件、然后您可以更新其中的数据。