亲爱的所有,你好,我想同时从一个中心连接两个外围设备。我可以连接一个外设,同时扫描其他模块。然而,在检测到另一个后,我无法连接到那个。任何建议都将不胜感激。谢谢你
没人知道!?
嗨,也许BD地址不应该都一样。
谢谢,我使用了不同的BD地址,但是我还是不能同时连接两个外设。我必须断开其中一个,才能连接到另一个。正如Dialog所说,我可以同时连接6个外围设备。然而,我连其中的两个都联系不上。有人能帮忙吗?当我想要发送start_connection命令时,我应该更改任何参数吗?
start connection命令设置的参数如下:味精- > nb_peers = 5;memcpy(味精- >[0]。addr, &connect_bdaddr device_num, BD_ADDR_LEN);味精- > con_intv_min = 10;味精- > con_intv_max = 10;味精- > 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;味精- > scan_window = 352;味精- > op。代码= GAPM_CONNECTION_DIRECT;
对话框中,你好,你能给我一些建议吗?有样品代码可以转发给我吗?我的电子邮件是reza.yazdani1367@gmail.com.谢谢你!
对于直接连接,Nb_peers应该设置为1(而不是5)。您确定正确地分配了消息对象的大小吗?
您还必须更改da14580_config.h中的#定义,并指定希望支持的同时使用的外设的最大数量。
谢谢Joacimwe。我根据对话人员(名为RvA)的一些建议更改了对等体的数量(nb_peers),我在以下链接中看到:http://support.dialog-semiconductor.com/connection-multiple-peripherals我使用的消息分配类似于在dsps应用程序中使用的:(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)的数量是否足够?或者我也应该改变其他参数!?我会按照你说的去做,并尽快让你知道结果。非常感谢你的帮助,谢谢。
我做了所有我认为需要的改变,让两个外围设备同时连接到一个中心。我还使用UM-B-011 DA14580 MemoryMapTool来纠正da14580_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(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秒内无法连接,则返回扫描)。
谢谢你的帮助。最后,我将两个模块连接到一个中心。我认为问题是我没有等到一个连接完成,并在接收到GAPC_CONNECTION_REQ_IN后开始下一个连接。但是,正如您所说的,我应该在接收到GAPM_CMP_EVT之后开始下一个连接。非常感谢你的建议。我还有另外一个问题,我必须等待BLE central连接到第二个外设模块的时间。由于我已经测试了几次,我无法测量一个可预测的时间。所以,我很担心我该如何安排这个时间。如果我从一个中心连接到两个模块,我应该定义两个单独的配置文件来处理它们吗?我感谢你事先的考虑。
一旦接收到GAPM_CMP_EVT(操作参数设置为GAPM_CONNECTION_DIRECT),您应该能够立即连接到第二个外设,这样在连接到下一个外设之前就不必增加一些延迟。GAPM_CMP_EVT消息通常在GAPC_CONNECTION_REQ_IND之后立即发送。注意,当你有多个外围设备处于中心模式时,TASK_APP的“状态”(idle, advertising, connected,…)在模板项目中是没有意义的。相反,您应该以某种方式跟踪以其他方式连接的每个外围设备。
谢谢你的建议。我照你说的做了,但我无法在连接第一个设备后立即连接第二个设备。我认为这可能是因为启用sps配置文件和接收通知事件从第一个连接的设备,我不能立即有第二个连接。因此,我更改了程序,使配置文件在第二次连接后启用。然而,我无法连接到第二个设备而没有不可预知的延迟!!你知道我怎样才能减少延迟或者至少有一个可预测的延迟吗?
我以前没见过这个。我可以直接连接到GAPM_CMP_EVT之后的第二个…会发生什么呢?您是否得到一个带有非零状态码的GAPM_CMP_EVT,或者什么都没有发生?您可以使用Smart Snippets查看当前的度量来查看发生了什么吗?
尝试增加连接间隔并减少扫描窗口/间隔,这样da14580在扫描第二个外设时就不会忙于处理第一个外设的连接事件。
谢谢,我也会检查这个解决方案。我认为根本不会发生任何事情,因为我使用了一个串行监控程序来查看应用程序何时以及为什么要进入GAPM_CMP_EVT的处理程序。然而,我将再次检查,看看我是否遗漏了什么!非常感谢你的帮助。
最后,我发现了什么问题,我连接第一个设备后,不能连接第二个设备。它只是关于在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);味精- > con_intv_min = APP_CON_INTV_MIN;味精- > 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;味精- > scan_interval = APP_CON_SCAN_INTERVAL;味精- > scan_window = APP_CON_SCAN_WINDOW;味精- > op。代码= GAPM_CONNECTION_DIRECT;
没人知道!?
嗨,也许BD地址不应该都一样。
谢谢,我使用了不同的BD地址,但是我还是不能同时连接两个外设。我必须断开其中一个,才能连接到另一个。
正如Dialog所说,我可以同时连接6个外围设备。然而,我连其中的两个都联系不上。
有人能帮忙吗?当我想要发送start_connection命令时,我应该更改任何参数吗?
start connection命令设置的参数如下:
味精- > nb_peers = 5;
memcpy(味精- >[0]。addr, &connect_bdaddr device_num, BD_ADDR_LEN);
味精- > con_intv_min = 10;
味精- > con_intv_max = 10;
味精- > 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;
味精- > scan_window = 352;
味精- > op。代码= GAPM_CONNECTION_DIRECT;
对话框中,
你好,
你能给我一些建议吗?
有样品代码可以转发给我吗?
我的电子邮件是reza.yazdani1367@gmail.com.
谢谢你!
对于直接连接,Nb_peers应该设置为1(而不是5)。您确定正确地分配了消息对象的大小吗?
您还必须更改da14580_config.h中的#定义,并指定希望支持的同时使用的外设的最大数量。
谢谢Joacimwe。
我根据对话人员(名为RvA)的一些建议更改了对等体的数量(nb_peers),我在以下链接中看到:
http://support.dialog-semiconductor.com/connection-multiple-peripherals
我使用的消息分配类似于在dsps应用程序中使用的:
(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)的数量是否足够?或者我也应该改变其他参数!?
我会按照你说的去做,并尽快让你知道结果。非常感谢你的帮助,谢谢。
我做了所有我认为需要的改变,让两个外围设备同时连接到一个中心。我还使用UM-B-011 DA14580 MemoryMapTool来纠正da14580_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(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秒内无法连接,则返回扫描)。
谢谢你的帮助。
最后,我将两个模块连接到一个中心。
我认为问题是我没有等到一个连接完成,并在接收到GAPC_CONNECTION_REQ_IN后开始下一个连接。但是,正如您所说的,我应该在接收到GAPM_CMP_EVT之后开始下一个连接。非常感谢你的建议。
我还有另外一个问题,我必须等待BLE central连接到第二个外设模块的时间。由于我已经测试了几次,我无法测量一个可预测的时间。所以,我很担心我该如何安排这个时间。如果我从一个中心连接到两个模块,我应该定义两个单独的配置文件来处理它们吗?
我感谢你事先的考虑。
一旦接收到GAPM_CMP_EVT(操作参数设置为GAPM_CONNECTION_DIRECT),您应该能够立即连接到第二个外设,这样在连接到下一个外设之前就不必增加一些延迟。GAPM_CMP_EVT消息通常在GAPC_CONNECTION_REQ_IND之后立即发送。
注意,当你有多个外围设备处于中心模式时,TASK_APP的“状态”(idle, advertising, connected,…)在模板项目中是没有意义的。相反,您应该以某种方式跟踪以其他方式连接的每个外围设备。
谢谢你的建议。
我照你说的做了,但我无法在连接第一个设备后立即连接第二个设备。
我认为这可能是因为启用sps配置文件和接收通知事件从第一个连接的设备,我不能立即有第二个连接。因此,我更改了程序,使配置文件在第二次连接后启用。然而,我无法连接到第二个设备而没有不可预知的延迟!!
你知道我怎样才能减少延迟或者至少有一个可预测的延迟吗?
我以前没见过这个。我可以直接连接到GAPM_CMP_EVT之后的第二个…
会发生什么呢?您是否得到一个带有非零状态码的GAPM_CMP_EVT,或者什么都没有发生?
您可以使用Smart Snippets查看当前的度量来查看发生了什么吗?
尝试增加连接间隔并减少扫描窗口/间隔,这样da14580在扫描第二个外设时就不会忙于处理第一个外设的连接事件。
谢谢,我也会检查这个解决方案。
我认为根本不会发生任何事情,因为我使用了一个串行监控程序来查看应用程序何时以及为什么要进入GAPM_CMP_EVT的处理程序。然而,我将再次检查,看看我是否遗漏了什么!
非常感谢你的帮助。
最后,我发现了什么问题,我连接第一个设备后,不能连接第二个设备。
它只是关于在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);
味精- > con_intv_min = APP_CON_INTV_MIN;
味精- > 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;
味精- > scan_interval = APP_CON_SCAN_INTERVAL;
味精- > scan_window = APP_CON_SCAN_WINDOW;
味精- > op。代码= GAPM_CONNECTION_DIRECT;