Skip to content

Commit d2c37e9

Browse files
committed
[Updater] Fix diff-header size calculation
With `FLAG_LONG` set, the header size is 5 bytes - 1 command byte - 2 length bytes - 3 address bytes Without `FLAG_LONG` the header size is 4 bytes - 1 command byte - 1 length byte - 3 address bytes
1 parent fea4d88 commit d2c37e9

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

firmware_updater/updater/source/src/main/java/org/selfbus/updater/FlashDiffMode.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ public static ResponseResult doDifferentialFlash(DeviceManagement dm, long start
103103
differ.generateDiff(img1, img2, (outputDiffStream, crc32) -> {
104104

105105
// process compressed page
106-
//TODO check why 5 bytes are added to size in FlashDiff.java / generateDiff(...)
107-
logger.info("Sending new firmware ({} diff bytes)", (outputDiffStream.size() - 5));
106+
logger.info("Sending new firmware ({} diff bytes)", (outputDiffStream.size()));
108107
byte[] buf = new byte[MAX_PAYLOAD];
109108
int i = 0;
110109
while (i < outputDiffStream.size()) {

firmware_updater/updater/source/src/main/java/org/selfbus/updater/tests/flashdiff/FlashDiff.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public void generateDiff(BinImage img1Orig, BinImage img2, FlashProgrammer flash
155155
size += possiblyFinishRawBuffer(rawBuffer, outputDiffStream);
156156
logger.trace("{} bestResult={}", String.format("%08x ", i), bestResult);
157157
i += bestResult.length;
158-
size += 5;
158+
size += 1;
159159
byte cmdByte = (byte)CMD_COPY;
160160
if (bestResult.length <= MAX_LENGTH_SHORT) {
161161
cmdByte = (byte)(cmdByte | FLAG_SHORT | (bestResult.length & 0b111111)); // command + 6 bits of the length
@@ -166,6 +166,7 @@ public void generateDiff(BinImage img1Orig, BinImage img2, FlashProgrammer flash
166166
debug("@ b=%02X i=%d CMD_COPY FLAG_LONG", (cmdByte & 0xff), i);
167167
byte lengthLowByte = (byte)(bestResult.length & 0xff); // 8 low bits of the length
168168
outputDiffStream.add(cmdByte);
169+
size += 1;
169170
outputDiffStream.add(lengthLowByte);
170171
}
171172
// 3 bytes are enough to address ROM or RAM buffer, the highest bit indicates ROM or RAM source
@@ -185,6 +186,7 @@ public void generateDiff(BinImage img1Orig, BinImage img2, FlashProgrammer flash
185186
}
186187
debug("%02X ", (srcData[bestResult.offset + k] & 0xff));
187188
}
189+
size += 3;
188190
addr3 = (byte)(addr3 | addrFromFlag);
189191
outputDiffStream.add(addr3);
190192
outputDiffStream.add(addr2);

0 commit comments

Comments
 (0)