首页 > 作文

mtu设置

更新时间:2023-03-16 07:48:12 阅读: 评论:0

怎么腌鱼-河蟹怎么做好吃

mtu设置
2023年3月16日发(作者:跳绳姿势)

AndroidBLE开发设置MTU

什么是MTU

MTU(MaximumTransmissionUnit),最⼤传输单元,是指⼀种通信协议的某⼀层上⾯所能通过的最⼤数据报⼤⼩(以字节为单位)。⽽在

AndroidBLE开发中,则指每包数据能携带的最⼤字节上限。

为什么要设置MTU

AndroidBLE传送数据时,MTU的默认值是23byte,除掉GATT协议往包头加上的3个字节,留给开发⼈员的就是20byte,也就是说正常情况

下,App通过BLE每包传输的数据最多只能是20byte。当某个功能需要传输⼤量的数据时,⽐如固件升级,我们的固件虽然只有⼏百KB⼤⼩,却

居然要分上万个包,传输需要⼗多分钟,显然效率太低。⽽通过设置MTU,最⾼可以将MTU调整到512Byte,从⽽⼤⼤提⾼数据传输的效率。

前提条件

动态设置MTU,需要传输的双⽅都⽀持才⾏,此外还有⼀些前提条件:

1.软件层⾯,AndroidAPI版本>=21(Android5.0),才⽀持设置MTU。

2.硬件层⾯,蓝⽛4.2及以上的模块,才⽀持设置MTU。

对于第⼀个限制,⽐较好适配,编码时只需要判断⼿机系统版本,API>=21才⾛动态设置MTU的逻辑即可。

对于第⼆个限制,稍微⿇烦,因为⽬前没有接⼝可以查询⼿机蓝⽛的版本,只能在请求设置MTU的回调⾥进⾏判断,如果设置失败,则仍然⾛默

认的逻辑,相当于仍然使⽤默认的20byte。

代码实例

privatevoidtMtu(inttMtu){

BluetoothManagerbluetoothManager=(BluetoothManager)getSystemService(OTH_SERVICE);

BluetoothAdapterbluetoothAdapter=pter();

eScan(Callback(){

@Override

publicvoidonLeScan(BluetoothDevicedevice,intrssi,byte[]scanRecord){

tGatt(,true,newBluetoothGattCallback(){

@Override

publicvoidonServicesDiscovered(BluetoothGattgatt,intstatus){

icesDiscovered(gatt,status);

if(_INT>=N_OP){

if(tMtu>23&&tMtu<512){

tMtu(tMtu);

}

}

}

@Override

publicvoidonMtuChanged(BluetoothGattgatt,intmtu,intstatus){

hanged(gatt,mtu,status);

mMtu=mtu;

if(_SUCCESS==status&&tMtu==mtu){

LogUtils.d("MTUchangesuccess="+mtu);

}el{

LogUtils.d("MTUchangefail!");

}

}

});

}

});

}

本文发布于:2023-03-16 07:48:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d5690308668b287c04afe7af249da5c4.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:mtu设置.doc

本文 PDF 下载地址:mtu设置.pdf

标签:mtu设置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图