From db03ca31f97dfe17ccbb6925f766febea72a4c06 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 17 Oct 2020 02:15:15 +0100 Subject: [PATCH] Disable FUA to fix reading from old SCSI disks. --- Aaru.Core/Devices/Dumping/CompactDisc/Data.cs | 35 ++++++------------- Aaru.Core/Devices/ReaderSCSI.cs | 12 +++---- Aaru.Core/Devices/Report/Scsi.cs | 12 +++---- 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs index 849e38f28..025c72b5b 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs @@ -292,17 +292,17 @@ namespace Aaru.Core.Devices.Dumping } else if(read16) { - sense = _dev.Read16(out cmdBuf, out senseBuf, 0, false, true, false, firstSectorToRead, blockSize, + sense = _dev.Read16(out cmdBuf, out senseBuf, 0, false, false, false, firstSectorToRead, blockSize, 0, blocksToRead, false, _dev.Timeout, out cmdDuration); } else if(read12) { - sense = _dev.Read12(out cmdBuf, out senseBuf, 0, false, true, false, false, firstSectorToRead, + sense = _dev.Read12(out cmdBuf, out senseBuf, 0, false, false, false, false, firstSectorToRead, blockSize, 0, blocksToRead, false, _dev.Timeout, out cmdDuration); } else if(read10) { - sense = _dev.Read10(out cmdBuf, out senseBuf, 0, false, true, false, false, firstSectorToRead, + sense = _dev.Read10(out cmdBuf, out senseBuf, 0, false, false, false, false, firstSectorToRead, blockSize, 0, (ushort)blocksToRead, _dev.Timeout, out cmdDuration); } else if(read6) @@ -398,18 +398,10 @@ namespace Aaru.Core.Devices.Dumping _outputPlugin.WriteSectorsLong(data, i + r, 1); bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, - desiredSubchannel, sub, - i + r, 1, subLog, isrcs, - (byte)track. - TrackSequence, - ref mcn, tracks, - subchannelExtents, - _fixSubchannelPosition, - _outputPlugin, - _fixSubchannel, - _fixSubchannelCrc, - _dumpLog, UpdateStatus, - smallestPregapLbaPerTrack); + desiredSubchannel, sub, i + r, 1, subLog, isrcs, (byte)track.TrackSequence, + ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, + _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, + smallestPregapLbaPerTrack); // Set tracks and go back if(indexesChanged) @@ -540,16 +532,9 @@ namespace Aaru.Core.Devices.Dumping _outputPlugin.WriteSectorsLong(data, i, blocksToRead); bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, - desiredSubchannel, sub, i, - blocksToRead, subLog, isrcs, - (byte)track.TrackSequence, - ref mcn, tracks, - subchannelExtents, - _fixSubchannelPosition, - _outputPlugin, _fixSubchannel, - _fixSubchannelCrc, _dumpLog, - UpdateStatus, - smallestPregapLbaPerTrack); + desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, (byte)track.TrackSequence, + ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, + _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack); // Set tracks and go back if(indexesChanged) diff --git a/Aaru.Core/Devices/ReaderSCSI.cs b/Aaru.Core/Devices/ReaderSCSI.cs index 60393bda3..74c9a8484 100644 --- a/Aaru.Core/Devices/ReaderSCSI.cs +++ b/Aaru.Core/Devices/ReaderSCSI.cs @@ -81,13 +81,13 @@ namespace Aaru.Core.Devices { _read6 = !_dev.Read6(out _, out senseBuf, lba, LogicalBlockSize, _timeout, out _); - _read10 = !_dev.Read10(out _, out senseBuf, 0, false, true, false, false, lba, LogicalBlockSize, 0, 1, + _read10 = !_dev.Read10(out _, out senseBuf, 0, false, false, false, false, lba, LogicalBlockSize, 0, 1, _timeout, out _); - _read12 = !_dev.Read12(out _, out senseBuf, 0, false, true, false, false, lba, LogicalBlockSize, 0, 1, + _read12 = !_dev.Read12(out _, out senseBuf, 0, false, false, false, false, lba, LogicalBlockSize, 0, 1, false, _timeout, out _); - _read16 = !_dev.Read16(out _, out senseBuf, 0, false, true, false, lba, LogicalBlockSize, 0, 1, false, + _read16 = !_dev.Read16(out _, out senseBuf, 0, false, false, false, lba, LogicalBlockSize, 0, 1, false, _timeout, out _); if(_read6 || @@ -487,7 +487,7 @@ namespace Aaru.Core.Devices if(!sense) { Blocks = (ulong)((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); - LogicalBlockSize = (uint)((cmdBuf[5] << 24) + (cmdBuf[5] << 16) + (cmdBuf[6] << 8) + cmdBuf[7]); + LogicalBlockSize = (uint)((cmdBuf[5] << 24) + (cmdBuf[5] << 16) + (cmdBuf[6] << 8) + cmdBuf[7]); } if(sense || Blocks == 0xFFFFFFFF) @@ -602,13 +602,13 @@ namespace Aaru.Core.Devices else { if(_read16) - sense = _dev.Read16(out buffer, out senseBuf, 0, false, true, false, block, LogicalBlockSize, 0, + sense = _dev.Read16(out buffer, out senseBuf, 0, false, false, false, block, LogicalBlockSize, 0, count, false, _timeout, out duration); else if(_read12) sense = _dev.Read12(out buffer, out senseBuf, 0, false, false, false, false, (uint)block, LogicalBlockSize, 0, count, false, _timeout, out duration); else if(_read10) - sense = _dev.Read10(out buffer, out senseBuf, 0, false, true, false, false, (uint)block, + sense = _dev.Read10(out buffer, out senseBuf, 0, false, false, false, false, (uint)block, LogicalBlockSize, 0, (ushort)count, _timeout, out duration); else if(_read6) sense = _dev.Read6(out buffer, out senseBuf, (uint)block, LogicalBlockSize, (byte)count, _timeout, diff --git a/Aaru.Core/Devices/Report/Scsi.cs b/Aaru.Core/Devices/Report/Scsi.cs index c9ce42e1d..e65e204c3 100644 --- a/Aaru.Core/Devices/Report/Scsi.cs +++ b/Aaru.Core/Devices/Report/Scsi.cs @@ -440,7 +440,7 @@ namespace Aaru.Core.Devices.Report AaruConsole.WriteLine("Trying SCSI READ (10)..."); - mediaTest.SupportsRead10 = !_dev.Read10(out buffer, out senseBuffer, 0, false, true, false, false, 0, + mediaTest.SupportsRead10 = !_dev.Read10(out buffer, out senseBuffer, 0, false, false, false, false, 0, mediaTest.BlockSize ?? 512, 0, 1, _dev.Timeout, out _); AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead10); @@ -448,7 +448,7 @@ namespace Aaru.Core.Devices.Report AaruConsole.WriteLine("Trying SCSI READ (12)..."); - mediaTest.SupportsRead12 = !_dev.Read12(out buffer, out senseBuffer, 0, false, true, false, false, 0, + mediaTest.SupportsRead12 = !_dev.Read12(out buffer, out senseBuffer, 0, false, false, false, false, 0, mediaTest.BlockSize ?? 512, 0, 1, false, _dev.Timeout, out _); AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead12); @@ -456,7 +456,7 @@ namespace Aaru.Core.Devices.Report AaruConsole.WriteLine("Trying SCSI READ (16)..."); - mediaTest.SupportsRead16 = !_dev.Read16(out buffer, out senseBuffer, 0, false, true, false, 0, + mediaTest.SupportsRead16 = !_dev.Read16(out buffer, out senseBuffer, 0, false, false, false, 0, mediaTest.BlockSize ?? 512, 0, 1, false, _dev.Timeout, out _); AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead16); @@ -649,7 +649,7 @@ namespace Aaru.Core.Devices.Report AaruConsole.WriteLine("Trying SCSI READ (10)..."); - capabilities.SupportsRead10 = !_dev.Read10(out buffer, out senseBuffer, 0, false, true, false, false, 0, + capabilities.SupportsRead10 = !_dev.Read10(out buffer, out senseBuffer, 0, false, false, false, false, 0, capabilities.BlockSize ?? 512, 0, 1, _dev.Timeout, out _); AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !capabilities.SupportsRead10); @@ -657,7 +657,7 @@ namespace Aaru.Core.Devices.Report AaruConsole.WriteLine("Trying SCSI READ (12)..."); - capabilities.SupportsRead12 = !_dev.Read12(out buffer, out senseBuffer, 0, false, true, false, false, 0, + capabilities.SupportsRead12 = !_dev.Read12(out buffer, out senseBuffer, 0, false, false, false, false, 0, capabilities.BlockSize ?? 512, 0, 1, false, _dev.Timeout, out _); AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !capabilities.SupportsRead12); @@ -665,7 +665,7 @@ namespace Aaru.Core.Devices.Report AaruConsole.WriteLine("Trying SCSI READ (16)..."); - capabilities.SupportsRead16 = !_dev.Read16(out buffer, out senseBuffer, 0, false, true, false, 0, + capabilities.SupportsRead16 = !_dev.Read16(out buffer, out senseBuffer, 0, false, false, false, 0, capabilities.BlockSize ?? 512, 0, 1, false, _dev.Timeout, out _); AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !capabilities.SupportsRead16);