对话框的团队
再次你好,我有很多困难更新启动/停止/重启BLE广告在延长睡眠模式,因此我的问题是我不能动态更新广告数据响应。我也不再有一个按钮在这个新的设计-因此I no GPIO可以用作一个唤醒信号。
我们使用的是SDK5。我尝试过的方法有:
1.创建我们自己的default_advertise_operation (user_callback_config.h)来停止广告,更新数据,并重新启动广告,但是这个函数在永久广告模式下只运行一次。它永远不会再被调用,广告数据永远不会改变。
2.做与第1个相同的事情,但使用广告超时模式。广告停止了,我们的睡眠时间延长了,但设备却永远保持着这种状态。它再也不会醒来,因为我们不再有GPIO来唤醒它。
3.添加到第2步,并尝试添加一个内核计时器(如本文所述http://support.dialog-semiconductor.com/wakeup-sleep-timeout),但这个方法对我不起作用。它的结果与第2个相同。
4.尝试通过在user_app_main_loop_callbacks中的.app_before_sleep回调函数中放置app_easy_gap_advertise_stop来停止发布。当我这样做时,应用程序崩溃,广告停止。
5.创建我们自己的app_resume_from_sleep函数来停止发布、更新数据和重新启动发布。当我这样做时,应用程序崩溃,广告停止。
最终,我想要实现的流程是:
1.更新广告数据
2.开始5秒的广告(在发送之间延长睡眠时间)
3.延长睡眠5秒(无广告)
4.重复
你能提供的任何见解我都非常感激。
设备:
嗨jd@expeng,
改变广告字符串是很直接的,只要开始广告,当你想改变字符串的值时,只要停止广告,改变字符串,然后重新开始。因为你已经设置了一个广告间隔,设备将自己唤醒并开始广告,你不需要开始和停止广告每一次你想发送的东西通过空气,除非你想改变每一个广告发射的字符串。请查看SDK中的基本示例以获得更多信息。关于你的期望,你可以做到以下几点:
1)设置广告数据。
2)开始发布并设置一个5秒后的内核定时器(设备将发布5秒)。
3)在定时器的处理程序中,发出一个停止广告,当5秒时间过去时,广告将停止。同样,在计时器处理程序中设置另一个计时器,它将在5秒内流逝,当时间流逝时,再次开始发布广告(当你停止发布或重新启动时,更改adv字符串)。当设备无事可做(没有BLE活动),它将休眠(因为你在延长睡眠模式)。
如果我误解了你的情况,请让我知道,希望以上帮助。
由于MT_dialog
你正确地理解了我。第一步完成了。我陷入了第二步。我如何在SDK5中正确地实现一个内核定时器?为了确保,内核定时器可以将设备从长时间睡眠中唤醒,对吗?我读了常见问题解答,但它不适合我(http://support.dialog-semiconductor.com/faq/how-create-timer-extended-sl..。).内核定时器的实现是在基本项目?如果我忽略了关于内核计时器的文档,请原谅。我相信我已经非常非常接近了。请lmk谢谢
嗨jd@expeng,
在SDK5中更容易使用内核计时器。您所要做的就是设置一个变量,该变量将保存计时器的id,并使用下面所示的函数设置计时器。
Timer_id = app_easy_timer(countdown_time, handler_function);
之后定时器应该开始计数,唤醒设备并执行定时器处理函数中的指令。这个例子实现了一个广告改变设备,你可以在SDK5的ble_examples - ble_app_barebone中找到它。
由于MT_dialog