同时连接两个外设

16个帖子/ 0新
最后发表
匿名(未验证)
同时连接两个外设

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

设备:
雷扎。yazdani67(未验证)
没人知道!?

没人知道!?

lyncxy119
离线
最后看到:2年5个月前
加入:2015-05-14 03:23
嗨,也许是BD的地址

嗨,也许BD地址不应该都一样。

雷扎。yazdani67(未验证)
谢谢,我用的是不同的BD

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

雷扎。yazdani67(未验证)
我设置的参数

start connection命令设置的参数如下:
msg-> nb_peers = 5;
memcpy(味精- >[0]。addr, &connect_bdaddr device_num, BD_ADDR_LEN);
味精- > con_intv_min = 10;
味精- > con_intv_max = 10;
msg-> ce_len_min = 32;
味精- > ce_len_max = 32;
味精- > con_latency = 0;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
味精- >[0]。addr_type = GAPM_PUBLIC_ADDR;
味精- > superv_to = 100;
味精- > scan_interval = 384;
msg-> scan_window = 352;
味精- > op。代码= GAPM_CONNECTION_DIRECT;

雷扎。yazdani67(未验证)
对话框中,

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

Joacimwe.
离线
最后看到:1年10个月前
格鲁鲁
加入:2014-01-14 06:45
Nb_peers应该设置为1

对于直接连接,Nb_peers应该设置为1(而不是5)。您确定正确地分配了消息对象的大小吗?

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

雷扎。yazdani67(未验证)
谢谢Joacimwe。

谢谢Joacimwe。
我根据对话人员(名为RvA)的一些建议更改了对等体的数量(nb_peers),我在以下链接中看到:
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)的数量是否足够?或者我也应该改变其他参数!?
我会按照你说的去做,并尽快让你知道结果。非常感谢你的帮助,谢谢。

雷扎。yazdani67(未验证)
我想我做了所有的改变

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

Joacimwe.
离线
最后看到:1年10个月前
格鲁鲁
加入:2014-01-14 06:45
可变长度消息

可变长度的消息(在本例中是对等体的数量)必须通过KE_MSG_ALLOC_DYN分配,如下所示:
KE_MSG_ALLOC_DYN(GAPM_START_CONNECTION_CMD, TASK_GAPM, TASK_APP, GAPM_START_CONNECTION_CMD, nb_peers * sizeof(struct gap_bdaddr)) where nb_peers应该是msg中放入的相同的数字->nb_peers。

如上所述的http://support.dialog-semiconductor.com/resource/gap-interface-specifica..。,对于GAPM_CONNECTION_DIRECT, nb_peers应为1。

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

雷扎。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的“状态”在模板项目(空闲,广告,连接,...)中完成的“状态”在中央模式下有多个外设时,并不真正有意义。而是应以某种方式跟踪以某种方式连接的每个外设。

雷扎。yazdani67(未验证)
谢谢你的建议。

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

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

我以前没见过这个。在GAPM_CMP_EVT之后,我可以直接连接到第二个...
会发生什么呢?您是否得到一个带有非零状态码的GAPM_CMP_EVT,或者什么都没有发生?
您可以使用Smart Snippets查看当前的度量来查看发生了什么吗?

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

雷扎。yazdani67(未验证)
谢谢,我会检查的

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

雷扎。yazdani67(未验证)
最后,我找到了什么

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

KE_MSG_ALLOC_DYN(gapm_start_connection_cmd, TASK_GAPM, TASK_APP,)
gapm_start_connection_cmd, sizeof (struct gap_bdaddr));
味精- > nb_peers = 1;
memcpy(味精- >[0]。addr, connect_bdaddr(指数)。addr, BD_ADDR_LEN);
msg-> con_intv_min = app_con_intv_min;
msg-> con_intv_max = app_con_intv_max;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
味精- >[0]。addr_type = GAPM_PUBLIC_ADDR;
味精- > superv_to = APP_CON_SUPERV_TO;
msg-> scan_interval = app_con_scan_interval;
msg-> scan_window = app_con_scan_window;
味精- > op。代码= GAPM_CONNECTION_DIRECT;

主题锁定