我的应用程序能够成功连接到BLE外设(OBDII / J1939设备)设备。
2018-01-24 14:58:38,413 INFO LogUtil - GATT Server Status = (0) : BLE_HCI_STATUS_CODE_SUCCESS(0x00)
2018-01-24 14:58:38,414 INFO LogUtil - GATT Server New State = (2) : STATE_CONNECTED
2018-01-24 14:58:38,414 INFO LogUtil - Connected to GATT server.
应用程序开始与设备通信但在一段时间后,它在onConnectionStateChange
的回调实现中的BluetoothGattCallback
中收到GATT服务器断开连接消息。以下是来自应用程序的日志:
2018-01-24 15:07:46,396 INFO LogUtil - GATT Server Status = (40) : BLE_HCI_INSTANT_PASSED(0x28)
2018-01-24 15:07:46,397 INFO LogUtil - GATT Server New State = (0) : STATE_DISCONNECTED
2018-01-24 15:07:46,398 INFO LogUtil - Disconnected from GATT server.
无法找到BLE_HCI_INSTANT_PASSED
状态代码背后的任何原因。
任何有关此方面的帮助都会有所帮助。
答案 0 :(得分:2)
当通过BLE传输数据时,数据传输只能在称为“连接事件”的同步时间点开始。在BLE链路层,可以进行几个与这些同步点相关的特殊请求。他们是:
通过无线方式发送的每个链接层请求都包含要更改的“即时”。 “即时”是将来应用更改的“连接事件”。
在链接层,BLE 可靠。这意味着每个链路层数据包必须由另一方确认。在嘈杂的RF环境中,链路层数据包可能需要重试才能实际发送。这意味着数据包可能在最初预期之后到达许多“连接事件”。
如果在“即时”之后接收到上述一个数据包,则应该应用更改,根据定义,BLE芯片必须断开连接,原因为0x28(即时通过)
有关该主题的其他详细信息,Bluetooth SIG网站提供的Bluetooth Core Specification是一个很好的参考: