继续 Android 平板 App 控制设备运行的项目。
MTU 是什么
英文全称是,Maximum Transmission Unit。即一次最大可以传输多少字节。
默认情况下是 20 个字节。即,Android App 一次只能从蓝牙控制板那里最多读取 20 个字节的数据。微信小程序中也是同样的状况。
什么情况下需要调大 MTU
例如,一个设备的运行参数多达 50 个,每个运行参数用两个字节表示。 那么即便不使用 CRC 校验码,不使用协议头,要完整读取所有参数都需要 100 个字节。
即需要 5 个 20 字节的数据包才能读完。这样效率太低。
另外一个典型的场景就是 BLE 蓝牙语音对讲。
如何调整 MTU
例如,我想将 MTU 增大到 120 个字节。这里使用 Android Kotlin,只需要发送请求:
gatt.requestMtu(120)
然后,在 BluetoothGattCallback 中监听 MTU 的变化:
override fun onMtuChanged(gatt: BluetoothGatt, mtu: Int, status: Int) {
println("ATT MTU changed to $mtu, success: ${status == BluetoothGatt.GATT_SUCCESS}")
返回结果
ATT MTU changed to 120, success: true
这代表修改成功。
需要注意的是,由于固件原因,这个值不一定能修改成功,所以一定要判断回调中的值。
明天早上要 4:30 起床,送闺女去幼儿园,然后集体去八角会展中心参加幼儿园毕业典礼。今晚就到这里了,睡觉。
参考
- https://punchthrough.com/android-ble-guide/
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式