工具与软件:
我希望这条消息能让您满意、我们需要您的意见。
我们的用例要求每90秒传输一次 BLE 广播数据包、我们希望通过在不使用的 BLE 无线电时完全关闭来节省功耗。
是否有 API 来执行此操作? 理想情况下、我们应在90秒持续时间前几秒开启 BLE 无线电、对传感器数据进行采样、并通过 BLE 广播包进行传输。
如果可能、您能否为我们提供一个 API 调用和伪代码列表来实现这一点?
关于
伊兰切智安
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.
工具与软件:
我希望这条消息能让您满意、我们需要您的意见。
我们的用例要求每90秒传输一次 BLE 广播数据包、我们希望通过在不使用的 BLE 无线电时完全关闭来节省功耗。
是否有 API 来执行此操作? 理想情况下、我们应在90秒持续时间前几秒开启 BLE 无线电、对传感器数据进行采样、并通过 BLE 广播包进行传输。
如果可能、您能否为我们提供一个 API 调用和伪代码列表来实现这一点?
关于
伊兰切智安
尊敬的 Ilanchezhian:
感谢您与我们联系。 如果设备未连接或正在进行广播、则无线电将自动关闭、不会消耗功率。 我建议您 在准备好传输数据时只需调用 GapAdv_enable (或 BLEAppUtil_advStart ()),然后 在传输数据后调用 GapAdv_disable ()(或 BLEAppUtil_advStop ())。 要在发送单个广播后禁用广播、我建议将 BLEAPPUTIL_ADV_END 事件掩码添加到广播 AdvHandler.EventMask 中。 如下所示:
BLEAppUtil_EventHandler_t broadcasterAdvHandler =
{
.handlerType = BLEAPPUTIL_GAP_ADV_TYPE,
.pEventHandler = Broadcaster_AdvEventHandler,
.eventMask = BLEAPPUTIL_ADV_START_AFTER_ENABLE |
BLEAPPUTIL_ADV_END_AFTER_DISABLE |
BLEAPPUTIL_ADV_END
};
然后、您可以将 BLEAPPUTIL_ADV_END 案例添加到 Broadcaster_Adv 处理程序中、如下所示:
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);
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;
}
// Advertising packet was just sent
case BLEAPPUTIL_ADV_END:
{
// Disable advertising after one packet
BLEAppUtil_advStop(broadcasterAdvHandle_1);
break;
}
default:
{
break;
}
}
}
这应该会在发送单个数据包后禁用广播。 如果设备未连接、则对讲机将保持关闭状态、直到重新启用广播。 您可以使用计时器中断或时钟事件每90秒启用一次广播、以实现所需的功能。
此致、
1月