你好;我们可以使用da14585同时扫描和广告吗?如果是,如何实现?
嗨btdev,
根据蓝牙LE规范,不可能同时扫描(GAP中心角色)和广告(GAP外围角色)。因为使用的是DA14585,所以可以执行从外设到中央间隙配置的角色切换,反之亦然。这可以通过将角色设置为GAP_ROLE_ALL来实现,这样您可以进行广告或扫描。不可能同时做这两件事。
谢谢,PM_Dialog
你好,谢谢你的支持。我有一个问题。如何在扫描和广告之间切换?
让我们以SDK的ble_app_外围示例作为起点。默认情况下,DA14585被配置为外设,因此它开始发布(无定向)广告。您可以使用app_easy_timer(),在它过期时,应该停止广告。一旦停止,您就可以将该设备配置为中心并开始扫描。您可以等待扫描完成(如果在GAP_GEN_DISCOVERY中进行扫描),或者设置额外的计时器并取消扫描过程。当扫描完成后,也许你可以重新开始广告。请检查以下步骤以执行角色转换。
-将user_gapm_conf结构中的.role成员更改为user_config.h文件中的GAP_ROLE_ALL。
-创建一个user_scan_start()函数,以便开始扫描:
(gapm_start_scan_cmd, TASK_GAPM, TASK_APP, gapm_start_scan_cmd);cmd - > op。代码= GAPM_SCAN_ACTIVE;cmd - > op。addr_src = GAPM_STATIC_ADDR;cmd - >间隔= 16384;cmd窗口- > = 16384;cmd - >模式= GAP_GEN_DISCOVERY;cmd - > filt_policy = SCAN_ALLOW_ADV_ALL;cmd - > filter_duplic = SCAN_FILT_DUPLIC_EN; // Send the message ke_msg_send(cmd); // We are now connectable ke_state_set(TASK_APP, APP_CONNECTABLE); }
在user_app_adv_start()函数中有一个计时器,它在大约30秒后启动以停止广告,因此我们将使用它来停止广告。
因此,在定时器adv_data_update_timer_cb()的回调中,调用app_easy_gap_advertising se_stop()函数,而不是更新广告字符串。
在user_app_adv_undirect_complete()函数中调用user_scan_start()函数,以便当设备停止广告时开始扫描。
-为了停止扫描,一个额外的定时器将不会用于取消命令,但扫描本身的超时将被使用。
创建一个函数user_on_scanning_completed()并从该函数调用user_app_adv_start();
希望我的建议对你有帮助!如果你发现任何答案有用,请标记为“接受”。请回来告诉我你的意见。
谢谢你的支持。我之前想到过这个算法。但我担心数据丢失
谢谢你接受我的回答!问候,PM_Dialog
嗨btdev,
根据蓝牙LE规范,不可能同时扫描(GAP中心角色)和广告(GAP外围角色)。因为使用的是DA14585,所以可以执行从外设到中央间隙配置的角色切换,反之亦然。这可以通过将角色设置为GAP_ROLE_ALL来实现,这样您可以进行广告或扫描。不可能同时做这两件事。
谢谢,PM_Dialog
你好,谢谢你的支持。我有一个问题。如何在扫描和广告之间切换?
嗨btdev,
让我们以SDK的ble_app_外围示例作为起点。默认情况下,DA14585被配置为外设,因此它开始发布(无定向)广告。您可以使用app_easy_timer(),在它过期时,应该停止广告。一旦停止,您就可以将该设备配置为中心并开始扫描。您可以等待扫描完成(如果在GAP_GEN_DISCOVERY中进行扫描),或者设置额外的计时器并取消扫描过程。当扫描完成后,也许你可以重新开始广告。请检查以下步骤以执行角色转换。
-将user_gapm_conf结构中的.role成员更改为user_config.h文件中的GAP_ROLE_ALL。
-创建一个user_scan_start()函数,以便开始扫描:
在user_app_adv_start()函数中有一个计时器,它在大约30秒后启动以停止广告,因此我们将使用它来停止广告。
因此,在定时器adv_data_update_timer_cb()的回调中,调用app_easy_gap_advertising se_stop()函数,而不是更新广告字符串。
在user_app_adv_undirect_complete()函数中调用user_scan_start()函数,以便当设备停止广告时开始扫描。
-为了停止扫描,一个额外的定时器将不会用于取消命令,但扫描本身的超时将被使用。
创建一个函数user_on_scanning_completed()并从该函数调用user_app_adv_start();
希望我的建议对你有帮助!如果你发现任何答案有用,请标记为“接受”。请回来告诉我你的意见。
谢谢,PM_Dialog
谢谢你的支持。我之前想到过这个算法。但我担心数据丢失
谢谢你接受我的回答!问候,PM_Dialog