对话小组
再次您好,我在扩展睡眠模式下更新开始/停止/重新启动BLE广告很多,因此我的问题是我无法动态更新广告数据响应。在这种新设计中,我也不再有一个按钮 - 因此我没有GPIO可以用作唤醒信号。
我们正在使用SDK5。我尝试过的东西是:
1.创建自己的default_advertise_operation(user_callback_config.h)以停止广告,更新数据和重新启动广告,但此功能仅在广告中运行一次。它永远不会再次调用,广告数据永远不会永远改变和广告。
2.执行与第1号相同的事情,但利用与超时模式的广告。广告停止,我们睡眠延长,但设备永远仍然是这种方式。它永远不会再次醒来,因为我们不再有GPIO来唤醒它。
3.添加到2号并尝试添加内核计时器(如此所讨论的http://support.dialog-semicondiondiondiondum/wakeup-sleep.Timeout.)但这种方法对我不起作用。它产生的结果与数字2相同。
4.尝试通过在user_app_main_loop_callback中放置在.app_before_sleep回调中的app_easy_gap_advertise_stop来停止广告。当我这样做时,应用程序崩溃和广告停止。
5.创建自己的app_resume_from_sleep函数以停止广告,更新数据和重新启动广告。当我这样做时,应用程序崩溃和广告停止。
最终,我想要实现的流程是:
1.更新广告数据
2.启动广告5秒钟(延长睡眠别的睡眠)
3.延长睡眠5秒(没有广告)
4.重复
您可以提供的任何见解都会受到极大的赞赏。
设备:
你好JD @ Exp.-Eng,
更改广告字符串的变化非常直,刚开始广告,当您想要更改字符串的值时,只需停止广告更改字符串并再次开始。由于您设置了一个广告间隔,设备将自行唤醒并开始广告,每次您想要在空中发送某些东西时,您就不必启动和停止广告,如果要更改每个广告映射中的字符串。请查看SDK中的鞍骨筒示例以获取更多信息。关于您的期望,您可以执行以下操作:
1)设置广告数据。
2)启动广告并设置将在5秒内经过的内核计时器(设备将宣传5秒)。
3)在计时器的处理程序中,发出停止广告,以便在5秒时间过去,广告将停止。同样在定时器处理程序中设置了另一个将在5秒内经过的计时器,并且当时间再次开始通告时(在停止广告或重新启动时更改您的ADV字符串)。当设备无关(没有BLE Activity)时,它会睡眠(因为您处于扩展模式时)。
如果我误解了你的情景,请告诉我,希望上述帮助。
谢谢mt_dialog.
你已经理解了我。步骤#1完成。我被困在第2步。如何正确地在SDK5中实现内核计时器?只是为了确保,内核定时器可以唤醒设备延长睡眠,正确?我读过常见问题,但它对我不起作用(http://support.dialog-semicondiondiond.com/faq/how-create-timer-extended-sl ...)。是在鞍骨项目中实现内核计时器?如果我忽略了关于内核计时器的文档,请原谅我。我相信我非常接近。请LMK谢谢
你好JD @ Exp.-Eng,
在SDK5中,它更容易使用内核定时器。您所要做的就是设置一个变量,该变量将保持定时器的ID并将定时器设置为下面的指示功能。
timer_id = app_easy_timer(countdown_time,handler_function);
之后,定时器应开始计数,唤醒设备并在定时器处理程序中执行指令。鞍骨箱示例实现了一个广告更改设备,您可以在BLE_Examples - BLE_APP_BAREBONE中找到它在SDK5中。
谢谢mt_dialog.