没有在连接失败时收到的事件ble_evt_gap_connection_completed

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
9个帖子/ 0新
最后一篇
Apoudret.
离线
最后一次露面:1年4个月前
加入:2017-09-22 08:33.
没有在连接失败时收到的事件ble_evt_gap_connection_completed

你好,
我正在尝试连接到不存在的地址:

bd_address_t peer_addr = {
.addr_type = public_address,
.ddr = {0x21,0x21,0x21,0x21,0x21,0x21}
};
ble_gap_connect(&peer_addr,&conn_params);

由于连接应该失败(没有该地址的设备),因此我希望获得一个连接失败事件,如BLE_GAP_CONNECT()的文档说:

此调用将直接连接过程发起到指定的设备。当连接过程完成成功或错误时,应用程序将获得[...] A :: BLE_EVT_GAP_CONNECTION_COMPLETED事件。

我的问题是在这个ble_gap_connect()呼叫之后,我没有得到此事件(或根本目的)。但是,我在成功的连接上获取ble_evt_gap_connection_completed事件。

设备:
PM_DIALOG.
离线
最后一次露面:1天12小时前
职员
加入:2018-02-08 11:03
嗨apoudred,

嗨apoudred,

您能用私人BD地址配置它,并检查是否能够在成功完成连接或未成功完成连接时获取BLE_EVT_GAP_CONNECTION_COMPLETED事件?如果您仍然无法获取此活动,请您能让我知道您在不成功的连接中获取哪个错误?

谢谢,PM_DIALOG.

Apoudret.
离线
最后一次露面:1年4个月前
加入:2017-09-22 08:33.
你好pm_dialog,

你好pm_dialog,

我的初步测试与公共地址有关。
我刚刚尝试使用具有私有地址的设备,我得到了相同的行为:
- 如果地址有效,ble_gap_connect()返回ble_status_ok,我得到gap_connection_completed事件
- 如果地址无效,BLE_GAP_CONNECT()仍然返回OK BLE_STATUS_OK,但我没有得到GAP_CONNECTION_COMPLETED事件

顺便说一句,我刚注意到某事:
- 我的外围设备关闭了。我试图用我的中央设备连接到外围设备。我叫ble_gap_connect(),但我没有事件。
- 30秒后,我在外围设备上电动。我在我的中央设备上得到了成功的事件。
这意味着在整个30秒内,中央设备正在尝试连接:它没有超时。

PM_DIALOG.
离线
最后一次露面:1天12小时前
职员
加入:2018-02-08 11:03
嗨apoudred,

嗨apoudred,

30秒根据BLE规格,在此期间,设备正试图与外设连接。如果您仍然无法获取BLE_EVT_GAP_CONECTION_CHOMPLETED活动,请澄清您吗?

谢谢,PM_DIALOG.

Apoudret.
离线
最后一次露面:1年4个月前
加入:2017-09-22 08:33.
你好pm_dialog,

你好pm_dialog,

您的答案似乎是不准确的:如果我等待5分钟打开外围设备(而不是30秒),则中央设备仍然可以在打开外设后进行连接。
您还能将我指出,其中指定30秒的BLE规范吗?

我仍然无法获取ble_evt_gap_connection_Completed事件。ble_gap_connect()永远不会超时。

此致,
安迪

PM_DIALOG.
离线
最后一次露面:1天12小时前
职员
加入:2018-02-08 11:03
嗨apoudred,

嗨apoudred,

我的道歉,但我不明白30秒的内容。我以为你等待了30秒,直到连接,而不是在30秒后打开外围设备。通常,根据BLE规格,最大超时为30秒,但在您的情况下,我不知道在哪个级别发生了。关于您无法获取BLE_EVT_GAP_CONECTION_COMPLETED事件的事实,首先您必须获取BLE_EVT_GAP_CONCONCTECT,然后将BLE_EVT_GAP_CONNECTION_COMPLETED成功或未成功完成连接过程。因此,如果您尝试连接到无效的BD地址,只要您从未收到BLE_EVT_GAP_CONCENTED,您将永远不会获取BLE_EVT_GAP_CONNECTION_COMPLETED。

谢谢,PM_DIALOG.

Apoudret.
离线
最后一次露面:1年4个月前
加入:2017-09-22 08:33.
你好pm_dialog,

你好pm_dialog,

你说“如果你试图连接到无效的BD地址,你永远不会得到ble_evt_gap_connection_completed,只要你从未收到ble_evt_gap_connected”。

但是,如果您查看BLE_GAP_CONNECT()方法的文档,它就说:
“当成功完成连接过程时,应用程序将获得[...] :: ble_evt_gap_connection_Completed事件或错误(在第二个情况下,未收到:: ble_evt_gap_connected)。“

由于我试图连接到无效的BD地址,因此当连接过程失败时,我应该收到GAP_CONNECTION_COMPLETED。

您说“根据BLE规范,最大超时为30秒”。
如果这是真的,这意味着您的SDK不遵循BLE规格,因为即使在5分钟后也没有任何超时。

此致,
安迪

PM_DIALOG.
离线
最后一次露面:1天12小时前
职员
加入:2018-02-08 11:03
嗨apoudred,

嗨apoudred,

当您尝试使用无效的BD地址连接到外设时,扫描过程将不会停止,因此您将无法获得BLE_EVT_GAP_CONNECTED或BLE_EVT_GAP_CONNECTION_COMPLETED事件。如果您调用显式BLE_GAP_CONNECT_CANCEL(),则扫描过程将停止,并且您将获得BLE_EVT_GAP_CONNECTION_COMPLETED事件,错误状态0x12(用户终止)。如果未明确停止扫描程序,则中央设备将继续扫描,并且您将无法获取任何事件。可能是BLE_GAP_CONNECT()函数的注释几乎没有误导性。

谢谢,PM_DIALOG.

Apoudret.
离线
最后一次露面:1年4个月前
加入:2017-09-22 08:33.
你好pm_dialog,

你好pm_dialog,

谢谢您的回答。我将开始一个任务,它会在X秒之后调用ble_gap_connect_cancel()。

安迪