亲爱的各位,你好,我想同时从中央计算机连接两个外围设备。我可以连接到一个外设,同时扫描其他模块。但是,在检测到另一个后,我无法连接到它。任何建议都将不胜感激。谢谢
没有人有任何想法!?
嗨,也许BD地址不应该是一样的。
谢谢,我使用不同的BD地址,但仍然无法同时连接到两个外设。我必须从一个断开连接到另一个。正如Dialog所说,我可以同时连接6个外围设备。但是,我连他们两个都联系不上。有人帮忙吗?如果要发送start_connection命令时,我应该更改任何参数吗?
I for Start Connection命令设置的参数如下:msg->nb\u 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\u len\u 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;消息->扫描窗口=352;msg-> op.code = gapm_connection_direct;
对话,你好,你能给我一些建议吗?有什么样的代码可以转寄给我吗?我的电子邮件地址是reza.yazdani1367@gmail.com。谢谢
NB_PEERS应设置为1(而不是5)以进行直接连接。您确定是否正确地将消息对象正确分配,正确尺寸?
您还必须更改da14580_config.h中的#define,使其具有您想要支持的最大并发外围设备数。
谢谢Joacimwe。我根据我在以下链接中看到的对话人员(名为RVA)中的某些人的一些建议来更改对等体(NB_PEERS)的数量:http://support.dialog-semicondiondiondum/connection- multiple-peripheral.我使用的消息分配类似于DSPS应用程序中使用的内容:msg=(struct gapm\u start\u connection\u cmd*)KE\u 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)的数量!?或者我应该改变其他参数!?我会尽快完成您提到的更改,并让您了解结果。我真的很感激你的帮助,谢谢。
我做了所有的改变,我认为是需要有两个外设连接到一个中央同时。我还使用UM-B-011 DA14580 MemoryMapTool来更正DA14580\u config.h中的内存映射。但什么都不管用!我不知道我还能做什么。是正确的,我应该一个接一个地连接到所有外围设备!?有人可以帮忙吗?对话,请你给我任何建议吗?
具有可变长度的消息(在这种情况下,对等体的数量)必须与如下所示的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\u CONNECTION\u MAX\u USER,就足够了。只需确保您启动了两次直接连接,首先是第一个外设(其mac地址放入msg->gap\u bdaddr[0]),然后是第二个外设(其mac地址放入msg->gap\u bdaddr[0])。请注意,必须等到第一个已连接,然后才能启动第二个的连接(等到GAPM\u CMP\u EVT)。其他BLE芯片支持多个同时挂起的连接,但DA14580似乎没有做到这一点。相反,您可以扫描多个外围设备,并在其中一个感兴趣的设备出现时立即启动直接连接(但是您可能希望此直接连接有一个超时时间,如果在30秒内无法连接,请返回扫描)。
谢谢你的帮助。最后,我将两个模块连接到一个中心。我认为问题是我没有等到连接完成并在接收到GAPC_CONNECTION_REQ_IN后启动下一个连接。但是,正如您所说,我应该在收到GAPM_CMP_EVT后开始下一次连接。我非常感谢你的建议。我还有另一个问题关于我必须等到的时间,直到BLE Central可以连接到第二个外围模块。正如我多次测试的那样,我无法衡量可预测的时间。所以,我关心我如何设置这个时序。如果我从一个中央连接到两个模块,我应该定义两个单独的配置文件处理它们!?我非常感谢您提前考虑。
一旦您收到GAPM\u CMP\u EVT(操作参数设置为GAPM\u CONNECTION\u DIRECT),您应该能够立即连接到第二个外设,这样您就不必在连接到下一个外设之前增加一些延迟。GAPM\u CMP\u EVT消息通常在GAPC\u CONNECTION\u REQ\u IND之后立即发送。请注意,当多个外围设备处于中心模式时,任务应用程序在模板项目中完成的“状态”(空闲、广告、已连接…)实际上没有意义。相反,您应该以某种方式跟踪以其他方式连接的每个外围设备。
谢谢你的建议。我正如你所说的那样,但在连接到第一个后,我无法立即连接到第二个设备。我认为可能是因为能够从第一连接设备从我不能立即有第二连接的第一连接设备接收通知事件。因此,我以第二个连接后启用了配置文件的方式更改了程序。但是,我无法连接到第二个设备而无需不可预测的延迟!你知道我怎样才能减少延误,或者至少有一个可预测的延误吗!?
我以前没见过这个。我可以直接连接到GAPM\u CMP\u EVT后的第二个。。。相反会发生什么?您是否以非零状态代码获得GAPM_CMP_EVT,或者根本没有发生任何事情?你能看到使用智能片段电流测量来看看发生了什么吗?
尝试增加连接间隔并缩短扫描窗口/间隔,以便da14580在扫描第二个外设时不忙于处理第一个外设的连接事件。
谢谢,我也会检查这个解决方案。我认为什么都没有发生,因为我使用一个串行监控程序来查看应用程序何时以及为什么会转到GAPM\u CMP\u EVT的处理程序。不过,我会再次检查,看看我是否遗漏了什么!我真的很感激你的帮助。
最后,我发现在连接到第一个后,我无法在第二个设备上连接到第二个设备是什么问题。这只是一些在app\u 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\u intv\u min=APP\u con\u intv\u min;msg->con\u intv\u max=APP\u con\u intv\u max;msg-> op.addr_src = gapm_public_addr;msg->对等体[0] .addr_type = gapm_public_addr;msg-> supmen_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_connection_direct;
没有人有任何想法!?
嗨,也许BD地址不应该是一样的。
谢谢,我使用不同的BD地址,但仍然无法同时连接到两个外设。我必须从一个断开连接到另一个。
正如Dialog所说,我可以同时连接6个外围设备。但是,我连他们两个都联系不上。
有人帮忙吗?如果要发送start_connection命令时,我应该更改任何参数吗?
I for Start Connection命令设置的参数如下:
msg->nb\u 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\u len\u 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;
消息->扫描窗口=352;
msg-> op.code = gapm_connection_direct;
对话,
你好,
你能给我一些建议吗?
有什么样的代码可以转寄给我吗?
我的电子邮件地址是reza.yazdani1367@gmail.com。
谢谢
NB_PEERS应设置为1(而不是5)以进行直接连接。您确定是否正确地将消息对象正确分配,正确尺寸?
您还必须更改da14580_config.h中的#define,使其具有您想要支持的最大并发外围设备数。
谢谢Joacimwe。
我根据我在以下链接中看到的对话人员(名为RVA)中的某些人的一些建议来更改对等体(NB_PEERS)的数量:
http://support.dialog-semicondiondiondum/connection- multiple-peripheral.
我使用的消息分配类似于DSPS应用程序中使用的内容:
msg=(struct gapm\u start\u connection\u cmd*)KE\u 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)的数量!?或者我应该改变其他参数!?
我会尽快完成您提到的更改,并让您了解结果。我真的很感激你的帮助,谢谢。
我做了所有的改变,我认为是需要有两个外设连接到一个中央同时。我还使用UM-B-011 DA14580 MemoryMapTool来更正DA14580\u config.h中的内存映射。但什么都不管用!我不知道我还能做什么。
是正确的,我应该一个接一个地连接到所有外围设备!?
有人可以帮忙吗?
对话,请你给我任何建议吗?
具有可变长度的消息(在这种情况下,对等体的数量)必须与如下所示的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\u CONNECTION\u MAX\u USER,就足够了。只需确保您启动了两次直接连接,首先是第一个外设(其mac地址放入msg->gap\u bdaddr[0]),然后是第二个外设(其mac地址放入msg->gap\u bdaddr[0])。请注意,必须等到第一个已连接,然后才能启动第二个的连接(等到GAPM\u CMP\u EVT)。其他BLE芯片支持多个同时挂起的连接,但DA14580似乎没有做到这一点。相反,您可以扫描多个外围设备,并在其中一个感兴趣的设备出现时立即启动直接连接(但是您可能希望此直接连接有一个超时时间,如果在30秒内无法连接,请返回扫描)。
谢谢你的帮助。
最后,我将两个模块连接到一个中心。
我认为问题是我没有等到连接完成并在接收到GAPC_CONNECTION_REQ_IN后启动下一个连接。但是,正如您所说,我应该在收到GAPM_CMP_EVT后开始下一次连接。我非常感谢你的建议。
我还有另一个问题关于我必须等到的时间,直到BLE Central可以连接到第二个外围模块。正如我多次测试的那样,我无法衡量可预测的时间。所以,我关心我如何设置这个时序。如果我从一个中央连接到两个模块,我应该定义两个单独的配置文件处理它们!?
我非常感谢您提前考虑。
一旦您收到GAPM\u CMP\u EVT(操作参数设置为GAPM\u CONNECTION\u DIRECT),您应该能够立即连接到第二个外设,这样您就不必在连接到下一个外设之前增加一些延迟。GAPM\u CMP\u EVT消息通常在GAPC\u CONNECTION\u REQ\u IND之后立即发送。
请注意,当多个外围设备处于中心模式时,任务应用程序在模板项目中完成的“状态”(空闲、广告、已连接…)实际上没有意义。相反,您应该以某种方式跟踪以其他方式连接的每个外围设备。
谢谢你的建议。
我正如你所说的那样,但在连接到第一个后,我无法立即连接到第二个设备。
我认为可能是因为能够从第一连接设备从我不能立即有第二连接的第一连接设备接收通知事件。因此,我以第二个连接后启用了配置文件的方式更改了程序。但是,我无法连接到第二个设备而无需不可预测的延迟!
你知道我怎样才能减少延误,或者至少有一个可预测的延误吗!?
我以前没见过这个。我可以直接连接到GAPM\u CMP\u EVT后的第二个。。。
相反会发生什么?您是否以非零状态代码获得GAPM_CMP_EVT,或者根本没有发生任何事情?
你能看到使用智能片段电流测量来看看发生了什么吗?
尝试增加连接间隔并缩短扫描窗口/间隔,以便da14580在扫描第二个外设时不忙于处理第一个外设的连接事件。
谢谢,我也会检查这个解决方案。
我认为什么都没有发生,因为我使用一个串行监控程序来查看应用程序何时以及为什么会转到GAPM\u CMP\u EVT的处理程序。不过,我会再次检查,看看我是否遗漏了什么!
我真的很感激你的帮助。
最后,我发现在连接到第一个后,我无法在第二个设备上连接到第二个设备是什么问题。
这只是一些在app\u 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\u intv\u min=APP\u con\u intv\u min;
msg->con\u intv\u max=APP\u con\u intv\u max;
msg-> op.addr_src = gapm_public_addr;
msg->对等体[0] .addr_type = gapm_public_addr;
msg-> supmen_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_connection_direct;