DA14586可以同时用作外围和中心吗?

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
2个帖子/ 0新
最后一篇
Karanshah28.
离线
最后一次露面:1年3个月前
加入:2018-07-14 11:10
DA14586可以同时用作外围和中心吗?

嗨对话小组,

我们计划创建“设备A”(它将具有DA14586控制器),其可以充当外围设备,以便像移动这样的中央设备可以与之通信。

此外,我们还有很少的外围设备,如设备,我们可以称为“设备XYZ”。我们希望与“设备A”与“设备XYZ”通信。

由于“设备XYZ”是外围设备,我们将需要“设备A”才能与它们连接。

这是可以通过DA14586吗?

谢谢,Karan.

设备:
PM_DIALOG.
离线
最后一次露面:13小时5分钟前
职员
加入:2018-02-08 11:03
嗨Karanshah28,

嗨Karanshah28,

DA14585 / 6可以充当外设和中央,通过将设备的间隙角色设置在GAP_ROLE_ALL中而不是一个中央或外围设备,只要您完成您应该能够宣传或扫描。您将无法同时进行两种程序;您将不得不取消扫描,以启动广告,反之亦然。您可以在以下几个步骤中找到,以便在BLE_APP_PERITIELAL示例中实现GAP_ROLE_ALL(您不能同时执行两个),只要定时器经过,设备就会开始通告并设置计时器,广告过程停止。由于它停止,您可以开始扫描,等待扫描完成(如果您在GAP_GEN_DISCOVERY中扫描或设置额外的计时器并取消扫描过程),就在扫描再次启动广告时,请尽快开始扫描。

  1. 更改user_config.h文件user_gapm_conf的.trole成员到gap_role_all。
  2. 创建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_passive;

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);

}

  1. 在演示的user_app_adv_start()函数中,有一个启动的计时器,以便在大约30秒后停止广告,因此我们将使用它以停止广告。
  2. 因此,在Timer adv_data_update_timer_cb()的回调中删除了广告字符串的更新并调用app_easy_gap_advertise_stop()函数。
  3. 在user_app_add_undirect_complete()函数中调用user_scan_start()函数,以便当设备停止广告开始扫描。
  4. 为了停止扫描,我不会使用额外的计时器以取消命令,但我将使用扫描本身的超时。
  5. 为了开始扫描结束时立即启动广告,创建函数user_on_scanning_completed()和从该函数调用user_app_adv_start();

此外,示例:BLE中央安全演示项目将DA14585配置为外设和作为中央设备。请检查位于user_config.h标题文件中的user_gapm_conf结构的角色项。其值是GAP_ROLE_ALL,这意味着设备可以作为外围设备作为外围设备或作为中央(不同时)。

谢谢,PM_DIALOG.