同时与两个外围设备连接

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

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

设备:
reza.yazdani67(未经验证)
没有人有任何想法!?

没有人有任何想法!?

Lyncxy119.
离线
最后一次露面:2年1天前
加入:2015-05-14 03:23
嗨,也许是BD地址

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

reza.yazdani67(未经验证)
谢谢,我使用不同的bd

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

reza.yazdani67(未经验证)
我设置的参数

I for Start Connection命令设置的参数如下:
msg-> nb_peers = 5;
memcpy(&msg->对等体[0] .addr,&connect_bdaddr [device_num],bd_addr_len);
msg-> con_intv_min = 10;
msg-> con_intv_max = 10;
msg-> ce_len_min = 32;
msg-> ce_len_max = 32;
msg-> con_latency = 0;
msg-> op.addr_src = gapm_public_addr;
msg->对等体[0] .addr_type = gapm_public_addr;
msg-> superv_to = 100;
msg-> scan_interval = 384;
msg-> scan_window = 352;
msg-> op.code = gapm_connection_direct;

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

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

Joacimwe.
离线
最后一次露面:1年5个月前
格鲁鲁
加入:2014-01-14 06:45
nb_peers应该设置为1

NB_PEERS应设置为1(而不是5)以进行直接连接。您确定是否正确地将消息对象正确分配,正确尺寸?

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

reza.yazdani67(未经验证)
谢谢Joacimwe。

谢谢Joacimwe。
我根据我在以下链接中看到的对话人员(名为RVA)中的某些人的一些建议来更改对等体(NB_PEERS)的数量:
http://support.dialog-semicondiondiondum/connection- multiple-peripheral.
我使用的消息分配类似于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中的内存映射。但没有什么能解决!我不知道我还应该怎么做。
是正确的,我应该一个接一个地连接到所有外围设备!?
有人可以帮忙吗?
对话,请你给我任何建议吗?

Joacimwe.
离线
最后一次露面:1年5个月前
格鲁鲁
加入: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(结构GAP_BDADDR)),其中NB_PEERS应该与MSG-> NB_PEERS相同的数字。

如上所述http://support.dialog-semicondiondiondum/resource/gap-interface-specifica ...,NB_PEERS为GAPM_CONNECTION_DIRECT为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年5个月前
格鲁鲁
加入:2014-01-14 06:45
你应该能够

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

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

谢谢你的建议。
我正如你所说的那样,但在连接到第一个后,我无法立即连接到第二个设备。
我认为可能是因为能够从第一连接设备从我不能立即有第二连接的第一连接设备接收通知事件。因此,我以第二个连接后启用了配置文件的方式更改了程序。但是,我无法连接到第二个设备而无需不可预测的延迟!
你知道如何减少延迟或至少有可预测的延迟!?

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

我以前没见过这个。在GAPM_CMP_EVT之后,我可以直接连接到第二个...
相反会发生什么?您是否以非零状态代码获得GAPM_CMP_EVT,或者根本没有发生任何事情?
你能看到使用智能片段电流测量来看看发生了什么吗?

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

reza.yazdani67(未经验证)
谢谢,我会检查一下这个

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

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

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

msg =(struct gapm_start_connection_cmd *)ke_msg_alloc_dyn(gapm_start_connection_cmd,task_gapm,task_app,
gapm_start_connection_cmd,sizeof(struct gap_bdaddr));
msg-> nb_peers = 1;
memcpy(&msg->对等体[0] .addr,connect_bdaddr [index] .addr,bd_addr_len);
msg-> con_intv_min = app_con_intv_min;
msg-> con_intv_max = app_con_intv_max;
msg-> op.addr_src = gapm_public_addr;
msg->对等体[0] .addr_type = gapm_public_addr;
msg-> supmen_to = app_con_superv_to;
msg-> scan_interval = app_con_scan_interval;
msg-> scan_window = app_con_scan_window;
msg-> op.code = gapm_connection_direct;

主题锁定