DA14585扫描并发布广告

大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
6个员额/ 0个新员额
最后发表
ltdev
离线
最后看到:1周3天前
加入:2018-11-12 09:19
DA14585扫描并发布广告

你好;da14585可以同时扫描和广告吗?如果是,如何实现它?

设备:
PM_Dialog
离线
最后看到:21小时38分钟前
工作人员
加入:2018-02-08 11:03
嗨btdev,

嗨btdev,

根据蓝牙LE规范,不可能同时扫描(GAP中心角色)和广告(GAP外围角色)。由于您正在使用DA14585,因此可以执行从外围设备到中央GAP配置的角色切换,反之亦然。这可以通过将角色设置为GAP_ROLE_ALL来实现,以便您可以发布或扫描。不可能同时做这两件事。

谢谢,PM_Dialog

ltdev
离线
最后看到:1周3天前
加入:2018-11-12 09:19
谢谢你的支持。我

谢谢你的支持。我有一个问题。我如何在扫描和广告之间切换?

PM_Dialog
离线
最后看到:21小时38分钟前
工作人员
加入:2018-02-08 11:03
嗨btdev,

嗨btdev,

让我们以SDK的ble_app_peripheral示例为起点。默认情况下,DA14585被配置为外设,所以它开始发布(无定向)。您可以使用app_easy_timer(),并在其到期时停止广告。一旦它停止,您就可以将设备配置为Central并开始扫描。您可以等待扫描完成(如果您在GAP_GEN_DISCOVERY中进行扫描),或者设置一个额外的计时器并取消扫描过程。当扫描完成后,也许你可以重新开始做广告。请按以下步骤进行角色转换。

—在“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。代码= 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_advertise_stop()函数而不是更新广告字符串。

—在user_app_adv_undirect_complete()函数中调用user_scan_start()函数,以便当设备停止发布时开始扫描。

为了停止扫描,将不会使用额外的计时器来取消命令,但扫描本身的超时将被使用。

-一旦扫描结束就开始发布,创建函数user_on_scanning_completed(),并从该函数调用user_app_adv_start();

希望我的建议对你有所帮助!如果你发现任何有用的答案,请标记为“接受”。请把你的意见反馈给我。

谢谢,PM_Dialog

ltdev
离线
最后看到:1周3天前
加入:2018-11-12 09:19
谢谢你的支持。我

谢谢你的支持。我之前想到过这个算法。但我担心数据丢失

PM_Dialog
离线
最后看到:21小时38分钟前
工作人员
加入:2018-02-08 11:03
谢谢你接受我的邀请。

谢谢你接受我的回答!问候,PM_Dialog