收藏
回答

[建议] ble的api 中建议wx.setBLEMTU 这个API 如果完成可以把真实mtu返回

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.setBLEMTU 微信安卓客户端 7.0.18 2.11.0
mtu的支持多大,是受到BLE的从机开发人员定义的,一般不改默认是23,有效数据是23-3 =20 个byte
另外一个常用的是247(默认也是23,需要主机连上后去exchange,小程序中用wx.setBLEMTU),247就是ble4.2 phy最大支持的单包长度,这时候有效数据长度是244,

然而在实际的开发中,很多ble从机的固件的开发人员会把mtu定义在这个之间,比如100,或者200之类,
如果我们按照247去wx.setBLEMTU,这时候往往会失败,但是实际上ble的从机是有把其实际的值发过来的,但是当前的wx.setBLEMTU 返回值并拿不到。

当然,我可以通过二分法多次尝试wx.setBLEMTU 终究可以找到一个最大值,,但是这个交互起来似乎实在是太难受,在极限情况下,比如连接间隔在很大时候,这个交互是非常漫长的。

示例代码:
exchange_mtu(deviceId){
    wx.setBLEMTU({
      //deviceId: that.data.connectedDeviceId,
      deviceId: deviceId,
      mtu247,
      successfunction(res{
        console.log(res)
        console.log("mtu update success");
      },
      fail :function(res{
        console.log(res)
        console.log("mtu update failed");
      },
      completefunction(res{
        console.log(res)
        console.log("mtu update complete");
      }
    })
  },
回答关注问题邀请回答
收藏

2 个回答

  • 小土豆
    小土豆
    2023-09-06

    太奈斯了,超级感谢

    2023-09-06
    有用
    回复
  • cady
    cady
    2021-07-31

    很有帮助,谢谢

    2021-07-31
    有用
    回复
登录 后发表内容
问题标签