嗨,我正在创建基于ble_sleepmode_example的操作。作为我的UNSERSTAND,基本操作就是这样的:
步骤1:将在main_function中调用user_app_init()(在user_callback_config.h中注册)。
步骤2:由于user_app_adf_start()在file user_callback_config.h中的struct user_default_app_operations中注册,因此下一步将调用User_App_Adv_Start()。在这个函数中,广告将是Startd,Course函数Adv_Data_update_Timer_CB()将在10S之后调用以停止广告 - >这是由函数app_easy_timer注册的(app_add_data_update_to,adv_data_update_timer_cb)注册;
步骤3:当广告停止时,将调用User_App_Adv_Undirect_Complete(因为此函数在User_callback_config.h中注册)。在此函数中,ARCH_BLE_EXT_WAKEUP_ON()将配置系统将由配置的外部中断源唤醒;之后,调用app_button_enable()被调用以配置上述外部中断源,并且当中断到来时,该功能将被调用,当系统被唤醒时(我不能在此显示细节代码,导致它很长)
步骤4:在下一次睡眠中,系统不会被BLE定时器唤醒,它只由配置的外部中断源唤醒。如果中断到来,系统将唤醒,并调用User_App_Adv_Start()。- >希望从步骤2重复。
现在,我想修改代码,以便它适合我的项目。我将配置两个按钮:BTN1和BTN2作为唤醒控制器的外部源。BTN1将唤醒系统,以便与其他设备进行广告和连接。使用BTN2,我只想唤醒系统来处理来自传感器的一些数据,而不是宣传,也不会连接其他devcices。因此,如果通过BTN2唤醒系统,我将在函数User_App_Adv_Start()中进行一些修改和禁用2行代码:
----> app_addata_update_timer_used = app_easy_timer(app_addata_update_to,avd_data_update_timer_cb);
----> app_easy_gap_undirected_advertise_start();
您可以在actahed pdf文件中看到picture_1中的细节。
我的唤醒外部中断源配置正常。但是BTN2唤醒操作有问题。在函数app_wakeup_cb()中,它将检查ke_state是否是app_connectable(二进制),它将调用user_app_adv_start(),否则它不会调用user_app_adv_start()。在此之前,我放一个日志,结果始终app_db_init(十进制中1个)。所以我暂时陷入困境,下次操作无法启动。您可以在附加的PDF文件中看到picture_2中的细节。
我怎样才能解决这个问题?请帮忙!!我看着你的意见。
嗨thanhtu131,
感谢您的论坛帖子和您的描述。我建议首先检查UM-B-050:DA1458X软件开发人员指南(SDK5)文档和第8.50节,以更好地了解BLE_APP_SLEEPMODE示例,以及回调函数的序列是什么。
关于BTN2,您是否可以分享唤醒控制器的配置方式?您应该按照BLE_APP_SLEEPMODE示例进行操作,并使用不同的回调函数来修改数据。例如,App_wakeu_cb对于BTN2应该是不同的。
谢谢,PM_DIALOG.
嗨,非常感谢您的建议,它适用于我的项目。