From 71389c3fcea24a380c5febb3909e37b8a2d95ad6 Mon Sep 17 00:00:00 2001 From: Vitaliy Tomin Date: Tue, 2 Apr 2024 11:31:46 +0800 Subject: [PATCH] huawei: fileupload: Fix for magicwatch 2 * magicwatch2 reporing MTU smaller than SliceSize and upload fail when using slice size --- .../gadgetbridge/devices/huawei/HuaweiPacket.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java index ca85ece45..2db65e5bb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiPacket.java @@ -679,7 +679,8 @@ public class HuaweiPacket { int sliceHeaderLenght =7; int bodyHeaderLength = 2; // sID + cID int footerLength = 2; //CRC16 - int maxBodySize = paramsProvider.getSliceSize() - headerLength - sliceHeaderLenght - footerLength; + int sliceSize = Math.min(paramsProvider.getSliceSize(), paramsProvider.getMtu()); // at least on magicwatch2 slize size reported bigger than MTU and upload fail + int maxBodySize = sliceSize - headerLength - sliceHeaderLenght - footerLength; int packetCount = (int) Math.ceil(((double) fileChunk.length ) / (double) maxBodySize); ByteBuffer buffer = ByteBuffer.wrap(fileChunk); @@ -687,9 +688,11 @@ public class HuaweiPacket { byte fileType = 0x01; //TODO: 1 - watchface, 2 - music int sliceStart = uploadPosition; + + for (int i = 0; i < packetCount; i++) { - short packetSize = (short) Math.min(paramsProvider.getSliceSize(), buffer.remaining() + headerLength + sliceHeaderLenght + footerLength); + short packetSize = (short) Math.min(sliceSize, buffer.remaining() + headerLength + sliceHeaderLenght + footerLength); ByteBuffer packet = ByteBuffer.allocate(packetSize); short contentSize = (short) (packetSize - headerLength - sliceHeaderLenght - footerLength); int start = packet.position();