private void DumpClusterMem(IKW1281Dialog kwp1281, uint startAddress, uint length) { UnlockControllerForEepromReadWrite(kwp1281); const byte blockSize = 15; var dumpFileName = _filename ?? $"cluster_mem_${startAddress:X6}.bin"; Logger.WriteLine($"Saving memory dump to {dumpFileName}"); using (var fs = File.Create(dumpFileName, blockSize, FileOptions.WriteThrough)) { for (uint addr = startAddress; addr < startAddress + length; addr += blockSize) { var readLength = (byte)Math.Min(startAddress + length - addr, blockSize); var blockBytes = kwp1281.CustomReadMemory(addr, readLength); if (blockBytes.Count != readLength) { throw new InvalidOperationException( $"Expected {readLength} bytes from CustomReadMemory() but received {blockBytes.Count} bytes"); } fs.Write(blockBytes.ToArray(), 0, blockBytes.Count); fs.Flush(); } } Logger.WriteLine($"Saved memory dump to {dumpFileName}"); }