同时连接两个外围设备

16个员额/0个新员额
最后一篇文章
匿名(未验证)
同时连接两个外围设备

亲爱的各位,
你好
我想同时从中央计算机连接两个外围设备。我可以连接到一个外围设备,同时扫描其他模块。然而,在检测到另一个后,我无法连接到它。任何建议都将不胜感激。
谢谢

设备:
reza.yazdani67(未验证)
没有人知道!?

没有人知道!?

lyncxy119
离线
最后一次见到:1年12个月前
加入:2015-05-14 03:23
嗨,也许是BD地址

嗨,也许BD地址不应该完全相同。

reza.yazdani67(未验证)
谢谢,我用不同的BD

谢谢,我使用不同的BD地址,但仍然无法同时连接到两个外围设备。我必须从一个断开连接才能连接到另一个。
正如Dialog所说,我可以同时连接到6个外围设备。然而,我甚至无法连接到其中的两个。
有人能帮忙吗?当我想发送启动连接命令时,我应该更改任何参数吗?

reza.yazdani67(未验证)
我为

我为start connection命令设置的参数如下:
msg->nb_对等点=5;
memcpy(&msg->peers[0].addr,&connect\u bdaddr[device\u num],BD\u addr\u LEN);
msg->con_intv_min=10;
msg->con_intv_max=10;
msg->ce_len_min=32;
msg->ce_len_max=32;
msg->con_延迟=0;
msg->op.addr\u src=GAPM\u PUBLIC\u addr;
msg->peers[0]。地址类型=GAPM\u PUBLIC\u地址;
msg->superv_to=100;
msg->scan_interval=384;
msg->scan_window=352;
msg->op.code=GAPM\u CONNECTION\u DIRECT;

reza.yazdani67(未验证)
对话

对话
你好
你能给我一些建议吗?
有什么样的代码可以转寄给我吗?
我的电子邮件是雷扎。yazdani1367@gmail.com.
非常感谢。

乔西姆韦
离线
最后一次见到:1年5个月前
大师
加入:2014-01-14 06:45
nb_对等点应设置为1

对于直接连接,nb_对等点应设置为1(而不是5)。是否确实使用正确的大小正确分配消息对象?

您还必须更改da14580_config.h中的#define,使其具有您想要支持的最大数量的同时外围设备。

reza.yazdani67(未验证)
谢谢你,乔西姆韦。

谢谢你,乔西姆韦。
我根据dialog staff(名为RvA)中的一位人员(我在以下链接中看到)的一些建议更改了对等点(nb_对等点)的数量:
http://support.dialog-semiconductor.com/connection-multiple-peripherals
我使用的消息分配与dsps应用程序中使用的类似:
msg=(struct gapm\u start\u connection\u cmd*)KE_msg\u ALLOC(gapm\u start\u connection\u cmd、TASK\u gapm、TASK\u APP、gapm\u start\u connection\u cmd);
我在da14580_config.h!中增加同步外围设备(BLE_CONNECTION_MAX_USER)的数量是否足够?或者我是否也应该更改其他参数!?
我会做你提到的改变,并尽快让你知道结果。我真的很感谢你的帮助,谢谢你。

reza.yazdani67(未验证)
我做了我认为所有的改变

我做了所有我认为需要的改变,使两个外围设备同时连接到一个中心。我还使用了UM-B-011 DA14580 MemoryMapTool来更正DA14580_config.h中的内存映射。但什么都不管用!我不知道我还能做什么。
我应该一个接一个地连接所有外围设备,对吗!?
有人能帮忙吗?
Dialog,你能给我一些建议吗?

乔西姆韦
离线
最后一次见到:1年5个月前
大师
加入:2014-01-14 06:45
可变长度的消息

具有可变长度的消息(在本例中为对等数量)必须按如下方式分配:
KE_MSG_ALLOC_DYN(GAPM_START_CONNECTION_CMD,TASK_GAPM,TASK_APP,GAPM_START_CONNECTION_CMD,nb_peers*sizeof(struct gap_bdaddr)),其中nb_peers应与您在MSG->nb_peers中输入的数字相同。

如中所述http://support.dialog-semiconductor.com/resource/gap-interface-specifica...对于GAPM\U直接连接,nb\U对等点应为1。

如果同时设置BLE_CONNECTION_MAX_USER,就足够了。只需确保您启动了两次直接连接,首先是第一个外设(其mac地址放入msg->gap_bdaddr[0]),然后是第二个外设(其mac地址放入msg->gap_bdaddr[0])。请注意,必须等到第一个已连接,然后才能启动第二个的连接。(等待GAPM_CMP_EVT)。其他BLE芯片支持多个同时挂起的连接,但DA14580似乎不支持。相反,您可以扫描多个外围设备,并在一个感兴趣的设备出现时立即启动直接连接(但您可能希望此直接连接有一个超时,如果在30秒内无法连接,则返回扫描)。

reza.yazdani67(未验证)
谢谢你的帮助。

谢谢你的帮助。
最后,我将两个模块连接到一个中央处理器。
我认为问题在于,我没有等到连接完成,在收到GAPC_connection_REQ_IN后才开始下一个连接。但是,正如您所说,我应该在收到GAPM_CMP_EVT后开始下一个连接。我非常感谢您的建议。
我还有另一个问题,关于BLE central连接到第二个外围模块之前必须等待的时间。由于我已经测试了好几次,我无法测量可预测的时间。所以,我关心的是如何设定这个时间。如果我从一个中心连接到两个模块,我应该定义两个单独的配置文件来处理它们吗!?
我感谢你事先的考虑。

乔西姆韦
离线
最后一次见到:1年5个月前
大师
加入:2014-01-14 06:45
你应该能够

一旦收到GAPM_CMP_EVT(操作参数设置为GAPM_CONNECTION_DIRECT),您应该能够立即连接到第二台外设,这样您就不必在连接到下一台外设之前增加延迟。GAPM_CMP_EVT消息通常在GAPC_连接_请求_IND后立即发送。
请注意,当多个外围设备处于中央模式时,TASK_应用程序在模板项目中的“状态”(空闲、广告、已连接等)实际上没有意义。相反,您应该以某种方式跟踪以其他方式连接的每个外围设备。

reza.yazdani67(未验证)
谢谢你的建议。

谢谢你的建议。
我正按照你说的那样做,但在连接到第一台设备后,我无法立即连接到第二台设备。
我想这可能是因为启用了sps配置文件并从第一个连接的设备接收到通知事件,所以我无法立即进行第二次连接。因此,我更改了程序,使配置文件在第二次连接后启用。但是,我无法连接到第二个设备,而没有不可预知的延迟!!!
你知道我怎样才能减少延迟,或者至少有一个可预测的延迟吗!?

乔西姆韦
离线
最后一次见到:1年5个月前
大师
加入:2014-01-14 06:45
我以前没见过这个,我

我以前没见过这个。我可以直接连接到GAPM_CMP_EVT之后的第二个。。。
会发生什么?你是得到一个状态码为非零的GAPM_CMP_EVT,还是什么都没发生?
您是否可以使用智能代码段查看当前度量以查看发生了什么?

尝试增加连接间隔并缩短扫描窗口/间隔,以便da14580在扫描第二个外设时不忙于处理第一个外设的连接事件。

reza.yazdani67(未验证)
谢谢,我查一下

谢谢,我也会检查这个解决方案。
我认为什么都没有发生,因为我使用了一个串行监控程序来查看应用程序何时以及为什么会转到GAPM_CMP_EVT的处理程序。不过,我会再次检查,看看我是否遗漏了什么!
我真的很感谢你的帮助。

reza.yazdani67(未验证)
最后,我找到了什么

最后,我发现了一个问题,即在连接到第一台设备后,我无法立即连接到第二台设备。
这只是一些在app_connect函数中设置的参数!如果我按如下方式更改参数设置,并将其他参数设置为其默认值,则所有操作都正常工作,不会发生任何不可预知的延迟!

msg=(struct gapm\u start\u connection\u cmd*)KE_msg\u ALLOC\u DYN(gapm\u start\u connection\u cmd,TASK\u gapm,TASK\u APP,
gapm_start_connection_cmd,sizeof(struct gap_bdaddr));
msg->nb_peers=1;
memcpy(&msg->peers[0]。地址,连接地址[index]。地址,地址;
msg->con_intv_min=APP_con_intv_min;
msg->con_intv_max=APP_con_intv_max;
msg->op.addr\u src=GAPM\u PUBLIC\u addr;
msg->peers[0]。地址类型=GAPM\u PUBLIC\u地址;
msg->superv_to=APP_CON_superv_to;
msg->scan\u interval=APP\u CON\u scan\u interval;
msg->scan\u window=APP\u CON\u scan\u window;
msg->op.code=GAPM\u CONNECTION\u DIRECT;

主题锁定