我正在使用DA14585芯片在主机和从模式中运行,它会让芯片困惑,有时芯片没有广播(当它不是在大多数时间连接时),所以我应该使用一些API来查询设备是否周期性地广播设备。谢谢!
嗨moiify.
由于您使用的是DA14585,以便执行角色切换,您可以在GAP_ROLE_ALL中的角色设置广告或扫描(您不能同时执行)。但是,您可以在定时器到期时宣传和设置计时器,因此,一旦它停止,您应该停止广告,并且只要您开始扫描,等待扫描完成(如果您在GAP_GEN_DISCOVERY中扫描或设置额外的计时器并取消扫描程序)因此,一旦扫描完成再次启动广告。请检查下面的步骤,以便在SDK的BLE_APP_PHERIALLAL示例中执行它:
- 更改user_config.h文件。将user_gapm_conf的。role成员到gap_role_all。
- 创建user_scan_start()函数,以便启动扫描:
void user_scan_start(void){struct gapm_start_scan_cmd * cmd = ke_msg_alloc(gapm_start_scan_cmd,task_gapm,task_app,gapm_start_scan_cmd);cmd-> op.code = gapm_scan_active;cmd-> op.addr_src = gapm_static_addr;cmd->间隔= 16384;cmd->窗口= 16384;cmd-> mode = gap_gen_discovery;cmd-> filt_policy = scan_allow_adv_all;cmd-> filter_duplic = scan_filt_duplic_en;//发送消息ke_msg_send(cmd);//我们现在是可连接的ke_state_set(task_app,app_connectable); }
- 在user_app_adv_start()函数中,有一个定时器启动,以便在大约30秒后停止广告,因此我们将使用它以停止广告。
- 因此在Timer Adv_Data_update_Timer_CB()的回调中而不是更新广告字符串,请调用app_easy_gap_advertise_stop()函数。
- 在user_app_add_undirect_complete()函数调用user_scan_start()函数,以便在设备停止广告以开始扫描。
- 为了停止扫描,我不会使用额外的计时器来取消命令,但我将使用扫描本身的超时。
- 一旦扫描结束创建函数user_on_scanning_Completed(),以便从该函数启动广告,调用user_app_adv_start();
请尝试上面的步骤,并告诉我它是否正常工作。
嗨moiify.
由于您使用的是DA14585,以便执行角色切换,您可以在GAP_ROLE_ALL中的角色设置广告或扫描(您不能同时执行)。但是,您可以在定时器到期时宣传和设置计时器,因此,一旦它停止,您应该停止广告,并且只要您开始扫描,等待扫描完成(如果您在GAP_GEN_DISCOVERY中扫描或设置额外的计时器并取消扫描程序)因此,一旦扫描完成再次启动广告。请检查下面的步骤,以便在SDK的BLE_APP_PHERIALLAL示例中执行它:
- 更改user_config.h文件。将user_gapm_conf的。role成员到gap_role_all。
- 创建user_scan_start()函数,以便启动扫描:
- 在user_app_adv_start()函数中,有一个定时器启动,以便在大约30秒后停止广告,因此我们将使用它以停止广告。
- 因此在Timer Adv_Data_update_Timer_CB()的回调中而不是更新广告字符串,请调用app_easy_gap_advertise_stop()函数。
- 在user_app_add_undirect_complete()函数调用user_scan_start()函数,以便在设备停止广告以开始扫描。
- 为了停止扫描,我不会使用额外的计时器来取消命令,但我将使用扫描本身的超时。
- 一旦扫描结束创建函数user_on_scanning_Completed(),以便从该函数启动广告,调用user_app_adv_start();
请尝试上面的步骤,并告诉我它是否正常工作。