同时连接两个外围设备

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

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

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

没有人知道!?

lyncxy119
离线
最后一次见到:2年5个月前
加入: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_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(未验证)
对话

对话
你好
你能给我一些建议吗?
是否有任何示例代码,您可能会向我转发?
我的电子邮件是reza.yazdani1367@gmail.com..
非常感谢。

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

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

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

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

谢谢你,乔西姆韦。
我根据dialog staff(名为RvA)中的一位人员(我在以下链接中看到)的一些建议更改了对等点(nb_对等点)的数量:
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_config.h!中增加同步外围设备(BLE_CONNECTION_MAX_USER)的数量是否足够?或者我是否也应该更改其他参数!?
我会做你提到的改变,并尽快让你知道结果。我真的很感谢你的帮助,谢谢你。

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

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

Joacimwe.
离线
最后一次见到:1年10个月前
格鲁鲁
加入: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连接到第二个外围模块之前必须等待的时间。由于我已经测试了好几次,我无法测量可预测的时间。所以,我关心的是如何设定这个时间。如果我从一个中心连接到两个模块,我应该定义两个单独的配置文件来处理它们吗!?
我感谢你事先的考虑。

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

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

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

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

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

我以前没见过这个,我can connect directly to the second one after GAPM_CMP_EVT...
会发生什么?你是得到一个状态码为非零的GAPM_CMP_EVT,还是什么都没发生?
您是否可以使用智能代码段查看当前度量以查看发生了什么?

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

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

谢谢,我也会检查这个解决方案。
我觉得没有任何事情发生,因为我使用串行监控程序来查看应用程序何时何种以及为什么要将App _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_interval = app_con_scan_interval;
msg-> scan_window = app_con_scan_window;
msg->op.code=GAPM\u CONNECTION\u DIRECT;

主题锁定