Skip to content

Commit 4b24d04

Browse files
committed
another try
1 parent 00f28d3 commit 4b24d04

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

src/js/msp/MSPHelper.js

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2456,7 +2456,6 @@ MspHelper.prototype.dataflashRead = function(address, blockSize, onDataCallback)
24562456
1 // allow compression
24572457
];
24582458

2459-
// Ensure MSP object exists
24602459
const mspObj = this.msp || (typeof MSP !== 'undefined' ? MSP : null);
24612460
if (!mspObj) {
24622461
console.error('MSP object not found, cannot read dataflash.');
@@ -2465,29 +2464,35 @@ MspHelper.prototype.dataflashRead = function(address, blockSize, onDataCallback)
24652464
}
24662465

24672466
mspObj.send_message(MSPCodes.MSP_DATAFLASH_READ, outData, false, function(response) {
2468-
const headerSize = 7;
2469-
const chunkAddress = response.data.readU32();
2470-
const dataSize = response.data.readU16();
2471-
const dataCompressionType = response.data.readU8();
2472-
2473-
let payloadView;
2474-
if (dataCompressionType === 0) {
2475-
payloadView = new DataView(response.data.buffer, response.data.byteOffset + headerSize, dataSize);
2476-
} else if (dataCompressionType === 1) {
2477-
const compressedCharCount = response.data.readU16();
2478-
const compressedArray = new Uint8Array(response.data.buffer, response.data.byteOffset + headerSize + 2, dataSize - 2);
2479-
const decompressedArray = huffmanDecodeBuf(compressedArray, compressedCharCount, defaultHuffmanTree, defaultHuffmanLenIndex);
2480-
payloadView = new DataView(decompressedArray.buffer);
2467+
let payloadView = null;
2468+
2469+
if (response && response.data) {
2470+
const headerSize = 7;
2471+
const chunkAddress = response.data.readU32();
2472+
const dataSize = response.data.readU16();
2473+
const dataCompressionType = response.data.readU8();
2474+
2475+
if (chunkAddress === address) {
2476+
if (dataCompressionType === 0) {
2477+
payloadView = new DataView(response.data.buffer, response.data.byteOffset + headerSize, dataSize);
2478+
} else if (dataCompressionType === 1) {
2479+
const compressedCharCount = response.data.readU16();
2480+
const compressedArray = new Uint8Array(response.data.buffer, response.data.byteOffset + headerSize + 2, dataSize - 2);
2481+
const decompressedArray = huffmanDecodeBuf(compressedArray, compressedCharCount, defaultHuffmanTree, defaultHuffmanLenIndex);
2482+
payloadView = new DataView(decompressedArray.buffer);
2483+
}
2484+
} else {
2485+
console.log(`Expected address ${address} but received ${chunkAddress}`);
2486+
}
24812487
}
24822488

2483-
// Always deliver data, even if CRC fails
2489+
// Deliver payloadView if defined, otherwise pass null
24842490
onDataCallback(address, payloadView);
2485-
if (response.crcError) {
2486-
console.log(`CRC error for block at ${address} ignored; data delivered`);
2487-
} else if (chunkAddress !== address) {
2488-
console.log(`Expected address ${address} but received ${chunkAddress}`);
2489-
} else {
2490-
console.log(`Block at ${address} received (${dataSize} bytes)`);
2491+
2492+
if (!response || response.crcError) {
2493+
console.log(`CRC error or missing data at address ${address} - delivering whatever we got`);
2494+
} else if (payloadView) {
2495+
console.log(`Block at ${address} received (${payloadView.byteLength} bytes)`);
24912496
}
24922497
}, true);
24932498
};

0 commit comments

Comments
 (0)