Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Android 10中的蓝牙LE启用251大小的链路层PDU_Android_Bluetooth Lowenergy - Fatal编程技术网

为Android 10中的蓝牙LE启用251大小的链路层PDU

为Android 10中的蓝牙LE启用251大小的链路层PDU,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我在Arduino Nano上有一个BLE应用程序,它不断地将IMU数据发送到我为Android手机开发的定制应用程序。当我嗅探空中交通时,手机似乎要求链路层PDU大小为27。如果我能够将其增加到251,则需要更少的链路层数据包(从而降低开销)。这款手机是摩托罗拉Edge,它实现了蓝牙5.1。Android版本是10 我在Bluetooth API中未找到任何控制此设置的设置。甚至有可能做到这一点吗 连接后,Arduino(从机)向主机(电话)发送一个包含251个RX/TX八位字节的LL_长度_

我在Arduino Nano上有一个BLE应用程序,它不断地将IMU数据发送到我为Android手机开发的定制应用程序。当我嗅探空中交通时,手机似乎要求链路层PDU大小为27。如果我能够将其增加到251,则需要更少的链路层数据包(从而降低开销)。这款手机是摩托罗拉Edge,它实现了蓝牙5.1。Android版本是10

我在Bluetooth API中未找到任何控制此设置的设置。甚至有可能做到这一点吗

连接后,Arduino(从机)向主机(电话)发送一个包含251个RX/TX八位字节的LL_长度_请求。手机发出的LL_LENGTH_RSP信息在Wireshark中如下图所示,这可能解释了为什么选择PDU大小为27的原因

Frame 294: 29 bytes on wire (232 bits), 29 bytes captured (232 bits)
Bluetooth
Bluetooth Low Energy RF Info
Bluetooth Low Energy Link Layer
    Access Address: 0x88c78ca1
    .... ..00 = Coding Indicator: FEC Block 2 coded using S=8 (0)
    [Master Address: 51:7a:c0:c9:6e:81 (51:7a:c0:c9:6e:81)]
    [Slave Address: ca:8b:68:49:aa:7a (ca:8b:68:49:aa:7a)]
    Data Header: 0x090f
        .... ..11 = LLID: Control PDU (0x3)
        .... .1.. = Next Expected Sequence Number: 1
        .... 1... = Sequence Number: 1 [OK]
        ...0 .... = More Data: False
        000. .... = RFU: 0
        Length: 9
    Control Opcode: LL_LENGTH_RSP (0x15)
    Max RX octets: 251
    Max RX time: 17040 microseconds
    Max TX octets: 27
    Max TX time: 2704 microseconds
    CRC: 0x000000

建立连接后,尝试通过调用来设置MTU。之后您将收到回拨。在MTU请求成功后启动服务发现。

感谢您的回答。我以为我在这么做。在
onServicesDiscovered
回调中,我正在调用
requestMtu(设备,512)
我只是试图更改调用顺序,以便
requestMtu
位于
discoverServices
之前。但我得到了相同的结果,即链路层PDU大小仍然是27字节。D/BluetoothGatt:onConnectionUpdated()-Device=CA:8B:68:49:AA:7A interval=6latency=0 timeout=500 status=0 D/BluetoothGatt:onConfigureMTU()-Device=CA:8B:68:49:AA:7A mtu=512 status=0 W/BleService$gatcallback:ATT mtu更改为512,成功:true D/BluetoothGatt:discoverServices()-设备:CA:8B:68:49:AA:7A D/BluetoothGatt:onSearchComplete()=设备=CA:8B:68:49:AA:7A状态=0