mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Paint MHDD log to PNG.
This commit is contained in:
@@ -267,7 +267,7 @@ public partial class Dump
|
||||
_skip = blocksToRead;
|
||||
|
||||
mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead,
|
||||
_private);
|
||||
_private, _dimensions);
|
||||
|
||||
ibgLog = new IbgLog(_outputPrefix + ".ibg", ataProfile);
|
||||
|
||||
@@ -330,7 +330,7 @@ public partial class Dump
|
||||
|
||||
if(!error)
|
||||
{
|
||||
mhddLog.Write(i, duration);
|
||||
mhddLog.Write(i, duration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(cmdBuf, i, blocksToRead);
|
||||
@@ -346,7 +346,7 @@ public partial class Dump
|
||||
for(ulong b = i; b < i + _skip; b++)
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
mhddLog.Write(i, duration < 500 ? 65535 : duration);
|
||||
mhddLog.Write(i, duration < 500 ? 65535 : duration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
@@ -534,7 +534,7 @@ public partial class Dump
|
||||
else
|
||||
{
|
||||
mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead,
|
||||
_private);
|
||||
_private, _dimensions);
|
||||
|
||||
ibgLog = new IbgLog(_outputPrefix + ".ibg", ataProfile);
|
||||
|
||||
@@ -595,7 +595,7 @@ public partial class Dump
|
||||
|
||||
if(!error || recoveredError)
|
||||
{
|
||||
mhddLog.Write(currentBlock, duration);
|
||||
mhddLog.Write(currentBlock, duration, 1);
|
||||
ibgLog.Write(currentBlock, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
|
||||
@@ -612,7 +612,7 @@ public partial class Dump
|
||||
else
|
||||
{
|
||||
_resume.BadBlocks.Add(currentBlock);
|
||||
mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration);
|
||||
mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration, 1);
|
||||
|
||||
ibgLog.Write(currentBlock, 0);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
|
||||
@@ -242,7 +242,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i + r, cmdDuration);
|
||||
mhddLog.Write(i + r, cmdDuration, 1);
|
||||
ibgLog.Write(i + r, currentSpeed * 1024);
|
||||
extents.Add(i + r, 1, true);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
@@ -324,7 +324,7 @@ partial class Dump
|
||||
FixOffsetData(offsetBytes, sectorSize, sectorsForOffset, supportedSubchannel, ref blocksToRead,
|
||||
subSize, ref cmdBuf, blockSize, false);
|
||||
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, 1);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
extents.Add(i, blocksToRead, true);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
|
||||
@@ -476,7 +476,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i + r, cmdDuration);
|
||||
mhddLog.Write(i + r, cmdDuration, 1);
|
||||
ibgLog.Write(i + r, currentSpeed * 1024);
|
||||
extents.Add(i + r, 1, true);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
@@ -596,7 +596,7 @@ partial class Dump
|
||||
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
|
||||
mhddLog.Write(i + r, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i + r, cmdDuration < 500 ? 65535 : cmdDuration, 1);
|
||||
|
||||
ibgLog.Write(i + r, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, 1, i + r);
|
||||
@@ -636,7 +636,7 @@ partial class Dump
|
||||
FixOffsetData(offsetBytes, sectorSize, sectorsForOffset, supportedSubchannel, ref blocksToRead,
|
||||
subSize, ref cmdBuf, blockSize, failedCrossingLeadOut);
|
||||
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
extents.Add(i, blocksToRead, true);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
@@ -774,7 +774,7 @@ partial class Dump
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf));
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
|
||||
|
||||
@@ -1112,7 +1112,7 @@ sealed partial class Dump
|
||||
sectorsForOffset = 0;
|
||||
}
|
||||
|
||||
mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private);
|
||||
mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private, _dimensions);
|
||||
ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0008);
|
||||
|
||||
if(_createGraph)
|
||||
|
||||
@@ -145,7 +145,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, 1);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
extents.Add(i, _maximumReadable, true);
|
||||
leadOutExtents.Remove(i);
|
||||
@@ -207,7 +207,7 @@ partial class Dump
|
||||
|
||||
imageWriteDuration += (DateTime.Now - writeStart).TotalSeconds;
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
}
|
||||
@@ -317,7 +317,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, _maximumReadable);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
extents.Add(i, _maximumReadable, true);
|
||||
leadOutExtents.Remove(i);
|
||||
@@ -380,7 +380,7 @@ partial class Dump
|
||||
|
||||
imageWriteDuration += (DateTime.Now - writeStart).TotalSeconds;
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, 1);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ partial class Dump
|
||||
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
|
||||
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
|
||||
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
|
||||
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile);
|
||||
ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
|
||||
|
||||
@@ -418,7 +418,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(readBuffer, i, blocksToRead);
|
||||
@@ -443,7 +443,7 @@ partial class Dump
|
||||
for(ulong b = i; b < i + _skip; b++)
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
|
||||
|
||||
@@ -158,7 +158,7 @@ public partial class Dump
|
||||
|
||||
bool ret;
|
||||
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
|
||||
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile);
|
||||
ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
|
||||
|
||||
@@ -251,7 +251,7 @@ public partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(readBuffer, i, blocksToRead);
|
||||
@@ -278,7 +278,7 @@ public partial class Dump
|
||||
for(ulong b = i; b < i + _skip; b++)
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
|
||||
|
||||
@@ -158,7 +158,7 @@ public partial class Dump
|
||||
|
||||
bool ret;
|
||||
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
|
||||
var ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0010);
|
||||
ret = outputOptical.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
|
||||
|
||||
@@ -265,7 +265,7 @@ public partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputOptical.WriteSectors(readBuffer, i, blocksToRead);
|
||||
@@ -292,7 +292,7 @@ public partial class Dump
|
||||
for(ulong b = i; b < i + _skip; b++)
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
|
||||
|
||||
@@ -208,7 +208,7 @@ partial class Dump
|
||||
}
|
||||
}
|
||||
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(buffer, i, blocksToRead);
|
||||
@@ -249,7 +249,7 @@ partial class Dump
|
||||
for(ulong b = i; b < i + _skip; b++)
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
|
||||
|
||||
@@ -369,7 +369,7 @@ partial class Dump
|
||||
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
|
||||
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
|
||||
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
|
||||
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile);
|
||||
bool imageCreated = false;
|
||||
|
||||
|
||||
@@ -215,7 +215,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(buffer, i, blocksToRead);
|
||||
@@ -239,7 +239,7 @@ partial class Dump
|
||||
for(ulong b = i; b < i + _skip; b++)
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
|
||||
|
||||
@@ -457,7 +457,7 @@ public partial class Dump
|
||||
}
|
||||
}
|
||||
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
|
||||
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sdProfile);
|
||||
|
||||
ret = outputFormat.Create(_outputPath,
|
||||
@@ -665,7 +665,7 @@ public partial class Dump
|
||||
|
||||
if(!error)
|
||||
{
|
||||
mhddLog.Write(i, duration);
|
||||
mhddLog.Write(i, duration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(cmdBuf, i, blocksToRead);
|
||||
@@ -683,7 +683,7 @@ public partial class Dump
|
||||
for(ulong b = i; b < i + _skip; b++)
|
||||
_resume.BadBlocks.Add(b);
|
||||
|
||||
mhddLog.Write(i, duration < 500 ? 65535 : duration);
|
||||
mhddLog.Write(i, duration < 500 ? 65535 : duration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
|
||||
@@ -498,7 +498,7 @@ partial class Dump
|
||||
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
|
||||
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
|
||||
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
|
||||
var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
|
||||
var ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0010);
|
||||
ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
|
||||
|
||||
@@ -654,7 +654,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(readBuffer, i, blocksToRead);
|
||||
@@ -684,7 +684,7 @@ partial class Dump
|
||||
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0,
|
||||
Sense.PrettifySense(senseBuf));
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
|
||||
@@ -733,7 +733,7 @@ partial class Dump
|
||||
if(extentEnd - i < blocksToRead)
|
||||
blocksToRead = (uint)(extentEnd - i) + 1;
|
||||
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
|
||||
// Write empty data
|
||||
@@ -778,7 +778,7 @@ partial class Dump
|
||||
Invoke(string.Format(Localization.Core.Reading_sector_0_of_1_2_MiB_sec, middle + currentSector, totalSize, currentSpeed),
|
||||
(long)(middle + currentSector), (long)totalSize);
|
||||
|
||||
mhddLog.Write(middle + currentSector, cmdDuration);
|
||||
mhddLog.Write(middle + currentSector, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(middle + currentSector, currentSpeed * 1024);
|
||||
|
||||
// Write empty data
|
||||
@@ -855,7 +855,7 @@ partial class Dump
|
||||
if(!sense &&
|
||||
!_dev.Error)
|
||||
{
|
||||
mhddLog.Write(currentSector, cmdDuration);
|
||||
mhddLog.Write(currentSector, cmdDuration, blocksToRead);
|
||||
ibgLog.Write(currentSector, currentSpeed * 1024);
|
||||
DateTime writeStart = DateTime.Now;
|
||||
outputFormat.WriteSectors(readBuffer, currentSector, blocksToRead);
|
||||
@@ -880,7 +880,7 @@ partial class Dump
|
||||
//errored += blocksToRead;
|
||||
//resume.BadBlocks.Add(l1);
|
||||
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf));
|
||||
mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
|
||||
|
||||
ibgLog.Write(l1, 0);
|
||||
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, l1);
|
||||
|
||||
@@ -35,6 +35,8 @@ using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Core.Graphics;
|
||||
using Aaru.Devices;
|
||||
|
||||
namespace Aaru.Core.Logging;
|
||||
@@ -45,6 +47,7 @@ sealed class MhddLog
|
||||
const string MHDD_VER = "VER:2 ";
|
||||
readonly string _logFile;
|
||||
readonly MemoryStream _mhddFs;
|
||||
readonly IMediaGraph _mediaGraph;
|
||||
|
||||
/// <summary>Initializes the MHDD log</summary>
|
||||
/// <param name="outputFile">Log file</param>
|
||||
@@ -53,12 +56,15 @@ sealed class MhddLog
|
||||
/// <param name="blockSize">Bytes per block</param>
|
||||
/// <param name="blocksToRead">How many blocks read at once</param>
|
||||
/// <param name="private">Disable saving paths or serial numbers in log</param>
|
||||
internal MhddLog(string outputFile, Device dev, ulong blocks, ulong blockSize, ulong blocksToRead, bool @private)
|
||||
internal MhddLog(string outputFile, Device dev, ulong blocks, ulong blockSize, ulong blocksToRead, bool @private, uint mediaGraphDimensions = 0)
|
||||
{
|
||||
if(dev == null ||
|
||||
string.IsNullOrEmpty(outputFile))
|
||||
return;
|
||||
|
||||
if(mediaGraphDimensions > 0)
|
||||
_mediaGraph = new BlockMap((int)mediaGraphDimensions, (int)mediaGraphDimensions, blocks);
|
||||
|
||||
_mhddFs = new MemoryStream();
|
||||
_logFile = outputFile;
|
||||
|
||||
@@ -142,7 +148,7 @@ sealed class MhddLog
|
||||
/// <summary>Logs a new read</summary>
|
||||
/// <param name="sector">Starting sector</param>
|
||||
/// <param name="duration">Duration in milliseconds</param>
|
||||
internal void Write(ulong sector, double duration)
|
||||
internal void Write(ulong sector, double duration, uint length = 1)
|
||||
{
|
||||
if(_logFile == null)
|
||||
return;
|
||||
@@ -152,6 +158,28 @@ sealed class MhddLog
|
||||
|
||||
_mhddFs.Write(sectorBytes, 0, 8);
|
||||
_mhddFs.Write(durationBytes, 0, 8);
|
||||
|
||||
switch(duration)
|
||||
{
|
||||
case < 3: _mediaGraph?.PaintSectors(sector, length, 0x00, 0xFF, 0x00);
|
||||
|
||||
break;
|
||||
case >= 3 and < 10: _mediaGraph?.PaintSectors(sector, length, 0x80, 0xFF, 0x00);
|
||||
|
||||
break;
|
||||
case >= 10 and < 50: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0xFF, 0x00);
|
||||
|
||||
break;
|
||||
case >= 50 and < 150: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0xAB, 0x00);
|
||||
|
||||
break;
|
||||
case >= 150 and < 500: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0x56, 0x00);
|
||||
|
||||
break;
|
||||
case >= 500: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0x00, 0x00);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Closes and writes to file the MHDD log</summary>
|
||||
@@ -164,5 +192,7 @@ sealed class MhddLog
|
||||
_mhddFs.WriteTo(fs);
|
||||
_mhddFs.Close();
|
||||
fs.Close();
|
||||
|
||||
_mediaGraph?.WriteTo(Path.GetFileNameWithoutExtension(_logFile) + ".png");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user