你好;我们可以使用DA14585进行扫描并相当广告吗?如果是如何实现它?
嗨btdev,
根据Bluetooth Le规范,无法同时扫描(间隙中心角色)并宣传(间隙外围角色)。由于您使用的是DA14585,您可以执行从外设切换到中央间隙配置的角色,反之亦然。这可以通过将角色设置为GAP_ROLE_ALL来完成,以便您可以进行广告或扫描。不可能同时发生。
谢谢,PM_DIALOG.
嗨,谢谢你的支持。我有个问题。如何在扫描和广告之间切换?
让我们将SDK的BLE_APP_PERITEDAL示例作为起点。默认情况下,DA14585作为外设配置为外设,因此它开始广告(无向)。您可以使用app_easy_timer()和到期后,您应该停止广告。一旦停止,您就可以将设备配置为中心并开始扫描。您可以等待扫描完成(如果在GAP_GEN_DISCOVERY中扫描)或设置额外的计时器并取消扫描过程。扫描完成后,也许您可以再次启动广告。请检查下面的步骤以执行角色切换。
- 将user_gapm_conf结构的.thole成员更改为user_config.h文件中的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();
希望我的建议为您提供帮助!如果您发现任何答案有用,请将其标记为“已接受”。请回复您的反馈意见。
谢谢你的支持。我以前想到了这种算法。但我担心数据丢失
谢谢你接受答案!问候,pm_dialog
嗨btdev,
根据Bluetooth Le规范,无法同时扫描(间隙中心角色)并宣传(间隙外围角色)。由于您使用的是DA14585,您可以执行从外设切换到中央间隙配置的角色,反之亦然。这可以通过将角色设置为GAP_ROLE_ALL来完成,以便您可以进行广告或扫描。不可能同时发生。
谢谢,PM_DIALOG.
嗨,谢谢你的支持。我有个问题。如何在扫描和广告之间切换?
嗨btdev,
让我们将SDK的BLE_APP_PERITEDAL示例作为起点。默认情况下,DA14585作为外设配置为外设,因此它开始广告(无向)。您可以使用app_easy_timer()和到期后,您应该停止广告。一旦停止,您就可以将设备配置为中心并开始扫描。您可以等待扫描完成(如果在GAP_GEN_DISCOVERY中扫描)或设置额外的计时器并取消扫描过程。扫描完成后,也许您可以再次启动广告。请检查下面的步骤以执行角色切换。
- 将user_gapm_conf结构的.thole成员更改为user_config.h文件中的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();
希望我的建议为您提供帮助!如果您发现任何答案有用,请将其标记为“已接受”。请回复您的反馈意见。
谢谢,PM_DIALOG.
谢谢你的支持。我以前想到了这种算法。但我担心数据丢失
谢谢你接受答案!问候,pm_dialog