你好,
我正在尝试连接到不存在的地址:
bd_address_t peer_addr = {
.addr_type = public_address,
.addr = {0 x21 0 x21 0 x21, 0 x21 0 x21 0 x21}
};
ble_gap_connect(&peer_addr,&conn_params);
由于连接应该失败(没有该地址的设备),因此我希望获得一个连接失败事件,如BLE_GAP_CONNECT()的文档说:
This call initiates a direct connection procedure to a specified device. The application will get [...] a ::BLE_EVT_GAP_CONNECTION_COMPLETED event when the connection procedure is completed either successfully or with error.
我的问题是在这个ble_gap_connect()呼叫之后,我没有得到此事件(或根本目的)。但是,我在成功的连接上获取ble_evt_gap_connection_completed事件。
设备:
嗨apoudred,
您能用私人BD地址配置它,并检查是否能够在成功完成连接或未成功完成连接时获取BLE_EVT_GAP_CONNECTION_COMPLETED事件?如果您仍然无法获取此活动,请您能让我知道您在不成功的连接中获取哪个错误?
谢谢,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(),但我没有事件。
- I powered on my peripheral device after 30 seconds. I got the connection successful event on my central device.
这意味着在整个30秒内,中央设备正在尝试连接:它没有超时。
嗨apoudred,
30秒根据BLE规格,在此期间,设备正试图与外设连接。如果您仍然无法获取BLE_EVT_GAP_CONECTION_CHOMPLETED活动,请澄清您吗?
谢谢,PM_DIALOG.
你好pm_dialog,
您的答案似乎是不准确的:如果我等待5分钟打开外围设备(而不是30秒),则中央设备仍然可以在打开外设后进行连接。
您还能将我指出,其中指定30秒的BLE规范吗?
我仍然无法获取ble_evt_gap_connection_Completed事件。ble_gap_connect()永远不会超时。
Best regards,
安迪
嗨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.
你好pm_dialog,
你说“如果你试图连接到无效的BD地址,你永远不会得到ble_evt_gap_connection_completed,只要你从未收到ble_evt_gap_connected”。
但是,如果您查看BLE_GAP_CONNECT()方法的文档,它就说:
"The application will get [...] a ::BLE_EVT_GAP_CONNECTION_COMPLETED event when the connection procedure is completed either successfully或错误(在第二个情况下,未收到:: ble_evt_gap_connected)。“
由于我试图连接到无效的BD地址,因此当连接过程失败时,我应该收到GAP_CONNECTION_COMPLETED。
您说“根据BLE规范,最大超时为30秒”。
如果这是真的,这意味着您的SDK不遵循BLE规格,因为即使在5分钟后也没有任何超时。
Best regards,
安迪
嗨apoudred,
While you are trying to connect to a peripheral with an invalid BD address, the scan procedure will not stop, so you will not get either BLE_EVT_GAP_CONNECTED or BLE_EVT_GAP_CONNECTION_COMPLETED event. If you call explicitly the ble_gap_connect_cancel(), then the scan procedure will stop and you will get the BLE_EVT_GAP_CONNECTION_COMPLETED event with error status 0x12 (terminated by the user). If you don’t stop the scanning procedure explicitly, the central device will continue scanning and you will not get any event. Probably the comments of the ble_gap_connect() function are little bit misleading.
谢谢,PM_DIALOG.
你好pm_dialog,
谢谢您的回答。我将开始一个任务,它会在X秒之后调用ble_gap_connect_cancel()。
安迪