From c322f4790aaae2345ec937da7ae741cb07fb075f Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 5 Jul 2026 02:42:48 +0100 Subject: [PATCH] Implement absurd speed for OmniDrive. --- Aaru.Core/Devices/Dumping/CompactDisc/OmniDrive.cs | 11 +++++++++-- Aaru.Core/Devices/Dumping/Dump.cs | 7 +++++-- Aaru/Commands/Media/Dump.cs | 8 +++++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/OmniDrive.cs b/Aaru.Core/Devices/Dumping/CompactDisc/OmniDrive.cs index d13de21e0..56d531e65 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/OmniDrive.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/OmniDrive.cs @@ -108,8 +108,13 @@ partial class Dump double elapsed = 0; var speedSectorCounter = 0; + if(_absurdSpeed) + { + UpdateStatus?.Invoke("[slateblue1]Yes, sir! Setting absurd speed sir![/]"); - if(_hyperSpeed) + _dev.SetCdSpeed(out _, RotationalControl.ClvAndImpureCav, 0xFFFF, 0, _dev.Timeout, out _); + } + else if(_hyperSpeed) { Track t = tracks.FirstOrDefault(t => t.StartSector <= _resume.NextBlock && t.EndSector >= _resume.NextBlock); @@ -199,7 +204,9 @@ partial class Dump if(speedSectorCounter > 1000) { - if(_hyperSpeed) + if(_absurdSpeed) + _dev.SetCdSpeed(out _, RotationalControl.ClvAndImpureCav, 0xFFFF, 0, _dev.Timeout, out _); + else if(_hyperSpeed) { Track t = tracks.FirstOrDefault(t => t.StartSector <= _resume.NextBlock && t.EndSector >= _resume.NextBlock); diff --git a/Aaru.Core/Devices/Dumping/Dump.cs b/Aaru.Core/Devices/Dumping/Dump.cs index 3dd573ce4..39d36004e 100644 --- a/Aaru.Core/Devices/Dumping/Dump.cs +++ b/Aaru.Core/Devices/Dumping/Dump.cs @@ -90,6 +90,7 @@ public partial class Dump readonly bool _force; readonly Dictionary _formatOptions; readonly bool _generateSubchannels; + readonly bool _hyperSpeed; readonly uint _ignoreCdrRunOuts; readonly Stopwatch _imageCloseStopwatch; readonly bool _metadata; @@ -113,13 +114,13 @@ public partial class Dump readonly Stopwatch _trimStopwatch; readonly Stopwatch _writeStopwatch; bool _aborted; + readonly bool _absurdSpeed; int _correctSectors; AaruContext _ctx; // Main database context Database.Models.Device _dbDev; // Device database entry bool _dumpFirstTrackPregap; bool _fixOffset; int _fixedSectors; - readonly bool _hyperSpeed; uint _maximumReadable; // Maximum number of sectors drive can read at once IMediaGraph _mediaGraph; bool _missingTitleKeysDirty; @@ -188,7 +189,8 @@ public partial class Dump bool fixSubchannel, bool fixSubchannelCrc, bool skipCdireadyHole, ErrorLog errorLog, bool generateSubchannels, uint maximumReadable, bool useBufferedReads, bool storeEncrypted, bool titleKeys, uint ignoreCdrRunOuts, bool createGraph, uint dimensions, bool paranoia, - bool cureParanoia, bool bypassWiiDecryption, bool startReverse, int errorRecovery, bool hyperSpeed) + bool cureParanoia, bool bypassWiiDecryption, bool startReverse, int errorRecovery, bool hyperSpeed, + bool absurdSpeed) { _doResume = doResume; _dev = dev; @@ -236,6 +238,7 @@ public partial class Dump _startReverse = startReverse; _errorRecovery = errorRecovery; _hyperSpeed = hyperSpeed; + _absurdSpeed = absurdSpeed; _dumpStopwatch = new Stopwatch(); _sidecarStopwatch = new Stopwatch(); _speedStopwatch = new Stopwatch(); diff --git a/Aaru/Commands/Media/Dump.cs b/Aaru/Commands/Media/Dump.cs index f07febebf..f7c749901 100644 --- a/Aaru/Commands/Media/Dump.cs +++ b/Aaru/Commands/Media/Dump.cs @@ -129,6 +129,7 @@ sealed class DumpMediaCommand : Command AaruLogging.Debug(MODULE_NAME, "--start-reverse={0}", settings.StartReverse); AaruLogging.Debug(MODULE_NAME, "--error-recovery={0}", settings.ErrorRecovery); AaruLogging.Debug(MODULE_NAME, "--hyper-speed={0}", settings.HyperSpeed); + AaruLogging.Debug(MODULE_NAME, "--absurd-speed={0}", settings.AbsurdSpeed); Dictionary parsedOptions = Options.Parse(settings.Options); AaruLogging.Debug(MODULE_NAME, UI.Parsed_options); @@ -552,7 +553,8 @@ sealed class DumpMediaCommand : Command settings.BypassWiiDecryption, settings.StartReverse, settings.ErrorRecovery, - settings.HyperSpeed); + settings.HyperSpeed, + settings.AbsurdSpeed); AnsiConsole.Progress() .AutoClear(true) @@ -836,6 +838,10 @@ sealed class DumpMediaCommand : Command [DefaultValue(false)] [CommandOption("--hyper-speed")] public bool HyperSpeed { get; set; } + [Description("(OmniDrive only) Use maximum speed always")] + [DefaultValue(false)] + [CommandOption("--absurd-speed")] + public bool AbsurdSpeed { get; set; } } #endregion