同时连接两个外设

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

各位,
你好,
我想同时从中央的两个外设连接。我可以连接到一个外围设备,同时扫描其他模块。但是,在检测到另一个后,我无法连接到该。任何建议都受到赞赏。
谢谢你

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

没人知道!?

林奇119
离线
最后一次见到:2年4周前
已加入:2015-05-14 03:23
嗨,也许是BD地址

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

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

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

reza.yazdani67(未验证)
我为

我为start connection命令设置的参数如下:
msg-> nb_peers = 5;
memcpy(&msg->peers[0].addr,&connect\u bdaddr[device\u num],BD\u addr\u LEN);
msg->con\u intv\u min=10;
msg->con\u intv\u max=10;
msg-> ce_len_min = 32;
msg->ce\u len\u max=32;
消息->控制延迟=0;
msg->op.addr\u src=GAPM\u PUBLIC\u addr;
msg->peers[0].addr\u type=GAPM\u PUBLIC\u addr;
msg->superv\u to=100;
消息->扫描间隔=384;
msg-> scan_window = 352;
msg->op.code=GAPM\u CONNECTION\u DIRECT;

reza.yazdani67(未验证)
对话框,

对话框,
你好,
你能给我一些建议吗?
有什么样的代码可以转寄给我吗?
我的电子邮件是reza.yazdani1367@gmail.com..
谢谢你

Joacimwe.
离线
最后一次见到:6个月前1年
格鲁鲁
已加入:2014-01-14 06:45
nb\u对等点应设置为1

对于直接连接,nb\u对等点应设置为1(而不是5)。您确定正在正确分配大小正确的消息对象吗?

您还必须在DA14580_CONFIG中更改#define,其中包含您要支持的最大同时外设数。

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

谢谢你,乔奇姆。
我根据dialog staff(名为RvA)中的一个人在以下链接中看到的一些建议更改了对等点的数量(nb\U对等点):
http://support.dialog-semiconductor.com/connection-multiple-peripherals
我使用的消息分配与dsps应用程序中使用的类似:
msg =(struct gapm_start_connection_cmd *)ke_msg_alloc(gapm_start_connection_cmd,task_gapm,task_app,gapm_start_connection_cmd);
我在da14580\u config.h!中增加同步外设的数量(BLE\u CONNECTION\u MAX\u USER)够吗!?或者我也应该更改其他参数!?
我会做你提到的改变,并让你知道结果很快。我真的很感谢你的帮助,谢谢。

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

我做了所有的改变,所以需要两个外围设备同时连接到一个中心。我还使用了UM-B-011 DA14580 MemoryMaptool来纠正DA14580_CONFIG中的内存映射。但没有什么能解决!我不知道我还应该怎么做。
我应该一个接一个地连接所有的外围设备,对吗!?
有人能帮忙吗?
Dialog,你能给我一些建议吗?

Joacimwe.
离线
最后一次见到:6个月前1年
格鲁鲁
已加入:2014-01-14 06:45
长度可变的消息

具有可变长度的消息(在本例中为对等数)必须按如下方式分配:
keu 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\连接\直接,nb\对等点应为1。

如果您与设置BLE_CONNECTION_MAX_USER一起执行此操作,那应该足够。只需确保启动直接连接两次,首先为第一个外设(其MAC地址投入MSG-> GAP_BDADDR [0]),然后到第二个外围设备(其MAC地址投入MSG-> GAP_BDADDR [0])。请注意,您必须等到第一个已连接,直到您可以启动第二个连接。(等到GAPM_CMP_EVT)。其他BLE芯片支持多个同时挂起的连接,但DA14580似乎似乎没有那样。相反,您可以在出现的一个感兴趣之外扫描多个外围设备并启动直接连接(但是,如果您无法在发音30秒内无法连接,则可能希望对此直接连接进行超时,请返回扫描。

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

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

Joacimwe.
离线
最后一次见到:6个月前1年
格鲁鲁
已加入:2014-01-14 06:45
你应该能够

您应该能够在收到GapM_CMP_EVT(使用“操作参数设置为GAPM_CONNECTION_DIRECT)”后立即连接到第二个外围设备,以便在连接到下一个外设之前,您不必添加一些延迟。GAPC_CONNECTION_REQ_IND之后,通常会立即发送GAPM_CMP_EVT消息。
请注意,Task_App的“状态”在模板项目(空闲,广告,连接,...)中完成的“状态”在中央模式下有多个外设时,并不真正有意义。而是应以某种方式跟踪以某种方式连接的每个外设。

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

谢谢你的建议。
我正在按你说的做,但我无法在连接到第一个设备后立即连接到第二个设备。
我想可能是因为启用了sps配置文件并从第一个连接的设备接收到通知事件,所以我无法立即建立第二个连接。所以,我改变了程序,在第二次连接后启用了概要文件。然而,我无法连接到第二个设备没有一个不可预知的延迟!!!
你知道如何减少延迟或至少有可预测的延迟!?

Joacimwe.
离线
最后一次见到:6个月前1年
格鲁鲁
已加入:2014-01-14 06:45
我以前没见过这个。我

我以前没见过这个。我can connect directly to the second one after GAPM_CMP_EVT...
结果呢?你得到的是一个非零状态码的GAPM\u CMP\u EVT还是什么都没有发生?
你能看到使用智能代码段来测量当前发生了什么吗?

尝试增加连接间隔并减少扫描窗口/间隔,因此DA14580不忙于第一个外设的连接事件,而第二个外围设备扫描。

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

谢谢,我也会检查这个解决方案。
我觉得没有任何事情发生,因为我使用串行监控程序来查看应用程序何时何种以及为什么要将App _Cmp_evt的处理程序。但是我会再次检查,看看我是否错过了某些东西!
我真的很感谢你的帮助。

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

最后,我发现什么是问题,我不能连接到第二个设备后,连接到第一个。
它只是关于App_Connect函数中设置的一些参数!如果我如下更改参数设置并将其他参数设置为默认值,则所有内容都正常工作,根本不会发生不可预测的延迟!

msg=(struct gapm\u start\u connection\u cmd*)KE\u msg\u ALLOC\u DYN(gapm\u start\u connection\u cmd,TASK\u gapm,TASK\u APP,
gapm\u start\u connection\u cmd,sizeof(struct gap\u bdaddr));
msg->nb\u peers=1;
memcpy(&msg->peers[0].addr,connect\u bdaddr[index].addr,BD\u addr\u LEN);
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].addr\u type=GAPM\u PUBLIC\u addr;
msg->superv\u to=APP\u CON\u superv\u to;
msg-> scan_interval = app_con_scan_interval;
msg-> scan_window = app_con_scan_window;
msg->op.code=GAPM\u CONNECTION\u DIRECT;

主题已锁定