嗨,对话框中,
我们正在DA14583上开发一个应用程序。我们指的是DIALOG_ALL_IN_ONE应用程序。
在这个应用程序中,我们想实现一个功能在其中:-
如果在30秒之前没有写入任何自定义特征,
一、断开设备
2进入睡眠模式。
请提供实现这一目标的步骤。
我们尝试在连接上创建一个计时器,在每个写特征和超时调用“app_easy_gap_disconnect”api上修改它。但问题是,该设备又开始做广告了。
在进一步调试中,我们发现断开例程“user_app_disconnect”调用“user_app_adv_start”api。从“user_app_disconnect”中评论“user_app_adv_start”api,会导致设备持续重启。
1.我们需要关于断开连接(从远程设备或Da14583发起)时发生的事情的完整解释。
2.为什么断开连接后需要开始广告?
3.请提供dialog_all_in_one应用程序所需的修改,以实现上面提到的功能。
问候,
卡兰
设备:
嗨karanshah28,
当DA14580与对端设备建立连接时,会触发user_app_connection()回调函数。因此,在连接时,您可以设置一个计时器(app_easy_timer()),如果它过期,将触发一个回调函数,以便调用app_easy_gap_disconnect(),这是断开连接的适当值。当一个特征被对等设备写入时,您将得到CUSTS1_VAL_WRITE_IND消息,该消息将在user_catch_rest_hndl中处理。因此,如果您编写该特征的值,您将让top cancel计时器执行app_easy_timer_cancel() API。如果该特征没有在30秒内写入,如前所述,外设将使用app_easy_gap_disconnect() API发送一个GAPC_DISCONNECT消息。断开连接时,user_app_disconnect()将被触发,您必须将芯片放入睡眠模式。当设备断开连接时,没有必要重新启动广告,这取决于您的应用程序要求。
谢谢,PM_Dialog
嗨,对话框中,
你能建议我们改变dialog_all_in_one应用程序的代码,这样在断开连接后,广告不会自动启动吗?
当我们在all_in_one_app中尝试时,它在断开连接后发布广告,当它连接到移动设备时不会进入睡眠模式。
问候,卡兰
嗨karanshah28,
正如我在前一篇文章中提到的,当DA14580与对等设备断开连接时,将触发user_app_disconnect()。如果您检查上述函数的源代码,您将看到执行了user_app_adv_start()。请在调试模式下运行您的代码。如果在调用user_app_adv_start()时没有命中断点,请检查哪些值具有状态变量。此外,当设备发布广告时,它会在广告间隔时间进入深度睡眠模式。arch_set_deep_sleep()是在user_app_adv_start()中调用的。通常,芯片会在广告或连接间隔之间进入睡眠模式。请您澄清一下这个问题“断开后它会做广告,连接到移动设备时它不会进入睡眠模式”。
谢谢,PM_Dialog
亲爱的支持团队,
您是正确的,我们也检查了断开设备时user_app_disconnect()会触发并启动advertisement。
这是按照代码,这是工作。
在广告后,当广告定时器到期时进入睡眠模式。这是按照代码工作的。
我们想要实现的是,
当设备与移动设备断开连接时,不应立即启动广告并进入睡眠模式。
所以我们从user_app_disoonnect()中注释了代码user_app_adv_start(),但是有了这个更改,系统就从某处崩溃了。
所以,能否建议适当更改user_app_disconnect()函数,使断开连接后不会启动广告,设备立即进入deep_sleep模式?
提前谢谢,
问候,
卡兰
嗨karanshah28,
为了将设备放入深度睡眠模式,在user_app_disconnect()中,您应该用arch_set_extended_sleep()替换user_app_adv_start()。如果您希望在按下按钮时醒来,您也应该启用按钮。如果您发现任何有用的答案,请标记为“接受”。
谢谢,PM_Dialog
嗨,对话框的团队,
我们尝试了您提出的更改,将user_app_disconnect()中的user_app_adv_start()替换为arch_set_extended_sleep()。我们还启用了按下按钮的唤醒功能。我们的系统开始崩溃。
我们在ble_all_i_one_app中尝试相同的,它似乎进入睡眠模式,但按下按钮它什么也不做。供参考,我们在ble_all_in_one_app中添加了按钮按下逻辑以在睡眠后醒来。
你能不能提供ble_all_in_one_app中的样品,让它在按钮按下时工作,或者建议我们可能缺少什么?
感谢的帮助。
谢谢,卡兰
嗨karanshah28,
你能不能在调试模式下运行你的代码,并澄清它在哪里崩溃?是由于WDOG过期还是NMI,或者你得到了任何断言?ble_app_all_在一个例子的SDK没有任何修改它工作正确吗?
谢谢,PM_Dialog
嗨,对话框的团队,
我们目前无法调试代码,因为我们已经达到了Keil中代码的评估极限,即32KB。
但是,ble_app_all_in_one的SDK示例没有任何修改,使单板进入睡眠模式。但它不再在按键上做广告。
我们想在下一个按钮上做广告。因此,我们按照我在前一个线程中解释的那样修改了代码。但它什么也没做。
谢谢你,卡兰
嗨karanshah28,
如果您想让Keil中的代码超过32KB,您应该购买完整版本的Keil IDE
既然您没有完整的Keil版本,那么您是如何构建您的项目的呢?使用有限版本的Keil,您是否能够正确地构建“All in one”项目?
你怎么知道设备进入睡眠模式?耗电量是多少?该设备开始广告,当弯腰广告进入睡眠模式?请检查一下SPI Flash是否烧坏了,这样设备就会从那里启动并进入睡眠模式。
ble_app_sleepmode实现了这个功能,因此您应该按照我在本例中证明的步骤操作。
谢谢,PM_Dialog