MiEcosystem / mijiaSDK

mijiaSDK新地址:https://github.com/MiEcosystem/MiJiaConnectDemo
102 stars 34 forks source link

固件更新比较慢 #17

Open Tywei24 opened 5 years ago

Tywei24 commented 5 years ago

你好, 在做固件更新中,我用此方法往设备写入数据。 XmBluetoothManager.getInstance().writeNoRsp(mDeviceMac, UUID.fromString(MMCGattAttributes.SENSOR_SERVICE_UUID_OAD), UUID.fromString(MMCGattAttributes.SENSOR_SPOTA_SERV_PATCH_DATA), chunk, new Response.BleWriteResponse() { @Override public void onResponse(int code, Void data) {

                }
            });

但是在广播包它public static final String ACTION_CHARACTER_CHANGED = "com.xiaomi.smarthome.bluetooth.character_changed";接收数据返回的状态中。时间需要100ms左右,我该如何提升更新的速度呢?

Tywei24 commented 5 years ago

这是每次回调过来的时间差值。开始时间在写数据之前,结束时间在回调开始。 01-28 16:37:39.608 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: cur otAcount:75 01-28 16:37:39.609 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: sendBlock75 01-28 16:37:39.704 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: 看下block_num的值2发一个数据的时间95ms 01-28 16:37:39.704 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: cur otAcount:76 01-28 16:37:39.704 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: sendBlock76 01-28 16:37:39.819 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: 看下block_num的值2发一个数据的时间115ms 01-28 16:37:39.819 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: cur otAcount:77 01-28 16:37:39.819 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: sendBlock77 01-28 16:37:39.940 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: 看下block_num的值2发一个数据的时间121ms 01-28 16:37:39.940 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: cur otAcount:78 01-28 16:37:39.940 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: sendBlock78 01-28 16:37:40.054 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: 看下block_num的值2发一个数据的时间114ms 01-28 16:37:40.054 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: cur otAcount:79 01-28 16:37:40.055 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: sendBlock79 01-28 16:37:40.199 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: 看下block_num的值2发一个数据的时间144ms 01-28 16:37:40.199 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: cur otAcount:80 01-28 16:37:40.199 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: sendBlock80 01-28 16:37:40.320 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: 看下block_num的值2发一个数据的时间121ms 01-28 16:37:40.321 5028-5028/com.xiaomi.smarthome:plugin0 E/tywei: cur otAcount:81

M201370367 commented 5 years ago

Tywei24 ,确认下,你说的“时间需要100ms左右”,该时间是从收到广播ACTION_CHARACTER_CHANGED后到onResponse的时间,还是从writeNoRsp开始到onResponse的时间?

Tywei24 commented 5 years ago

从写开始,到收到广播ACTION_CHARACTER_CHANGED的时间

M201370367 commented 5 years ago

可以尝试下减少每次写入的数据size;其他方面来讲,mijiaSDK使用的是原生Android蓝牙的发送接口,目前暂时没有很好的办法在mijiaSDK来优化该时间。

Tywei24 commented 5 years ago

因为不能设置mtu的原因,(大包传入不了)现在每次写入一个数据包,大小为20byte。回调接收正确的状态时,再写入下一个。导致固件更新很慢。(总的数据包有60045byte)

Tywei24 commented 5 years ago

我现在做的是插件,不是mijiaSDK。

wangchongwhut commented 5 years ago

可以做分包处理,每个数据包添加一个标记,使用writeNoRsp方法,写完后不用等返回继续写,最后重试写失败的数据包