工具与软件:
大家好!
我知道我们可以使用 GapAdv_prepareLoadByBuffer、GapAdv_loadByBuffer 来更新广播数据、但它会导致广播重新启动。
如果我不想更改 ADV 时序、是否可以在不调用 GapAdv_prepareLoadByBuffer 和 GapAdv_loadByBuffer 的情况下直接更改有效负载缓冲区?
(我预计这反映了下一个广播间隔中的变化、它在 CC2640R2 SDK 上工作、但在 CC2340R5 SDK 上似乎不工作)
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.
工具与软件:
大家好!
我知道我们可以使用 GapAdv_prepareLoadByBuffer、GapAdv_loadByBuffer 来更新广播数据、但它会导致广播重新启动。
如果我不想更改 ADV 时序、是否可以在不调用 GapAdv_prepareLoadByBuffer 和 GapAdv_loadByBuffer 的情况下直接更改有效负载缓冲区?
(我预计这反映了下一个广播间隔中的变化、它在 CC2640R2 SDK 上工作、但在 CC2340R5 SDK 上似乎不工作)
您好!
虽然我们建议使用 GAP 函数、从而导致广播重新启动、但如果不更改广播时序至关重要、您可以遵循 CC23XX SDK BLE-STACK 用户指南的"在启用 广播时直接操作缓冲器"部分、以便能够在广播仍在运行时更改广播数据缓冲区。
请注意、这可能会导致损坏的广播包。
此致、
Maxence
我在 CC2640R2 SDK 中直接混合缓冲区、但 simplelink_lowpower_f3_sdk_8_40_02_01中的广播有效载荷会发生变化。
我设置 ADV 间隔5秒、而我每2.5秒更改一次有效载荷
如果我使用 GapAdv_prepareLoadByBuffer , GapAdv_loadByBuffer 更新负载,我将看到广播每2.5秒,而不是5秒,因为它重新启动每2.5秒
我需要的是每2.5秒更新一次广播数据、而 ADV 间隔仍然保持5秒
我想避免频繁调用 GapAdv_prepareLoadByBuffer , GapAdv_loadByBuffer ,它将花费额外的功耗,持续时间约为5ms 峰值。
您好!
我尝试在一个新项目上修改缓冲区、但也没有成功使其工作。 我不得不问这是错误还是有意的功能、因为直接修改缓冲区有点粗略、可能会导致意外的影响。
与此同时、解决您问题的方法可能是每2.5秒更新一次缓冲区、并在广播结束时(即每5秒)使用您的缓冲区调用 GapAdv_prepareLoadByBuffer 和 GapAdv_loadByBuffer。
若要给出具体示例、在 F3 SDK 的 basic_ble 示例中、可以使用 Peripheral_Adv 境内"352"处理程序"函数的 BLEAPPUTIL_ADV_END 案例来调用 GapAdv_prepareLoadByBuffer 和 GapAdv_loadByBuffer。 不要忘记将 BLEAPPUTIL_ADV_END 放入事件处理程序的事件掩码中。
下面是一个示例代码:
void Peripheral_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData) { switch(event) { // Advertisement just ended so it should be safe to update buffer here // without corrupting an advertisement. case BLEAPPUTIL_ADV_END: { GapAdv_prepareLoadByHandle(peripheralAdvHandle_1, GAP_ADV_FREE_OPTION_DONT_FREE); // Sample buffer modification advData2[9] = 0xEF; advData2[10] = 0xBE; GapAdv_loadByHandle(peripheralAdvHandle_1, GAP_ADV_DATA_TYPE_ADV, ADV_DATA2_LEN, advData2); } default: { break; } } }