From bb2536de2711c2b1e549b08dd3efdd87f6193797 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 28 Apr 2020 20:19:49 +0100 Subject: [PATCH] Use SCSI MEDIUM SCAN to find first readable block. --- Aaru.Core/Devices/ReaderSCSI.cs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Aaru.Core/Devices/ReaderSCSI.cs b/Aaru.Core/Devices/ReaderSCSI.cs index d899b6e67..20313642a 100644 --- a/Aaru.Core/Devices/ReaderSCSI.cs +++ b/Aaru.Core/Devices/ReaderSCSI.cs @@ -63,8 +63,18 @@ namespace Aaru.Core.Devices GetDeviceBlocks(); byte[] senseBuf; - int tries = 0; - uint lba = 0; + int tries = 0; + uint lba = 0; + bool mediumScan = false; + + if(_dev.ScsiType == PeripheralDeviceTypes.OpticalDevice) + { + mediumScan = !_dev.MediumScan(out _, true, false, false, false, false, lba, 1, (uint)Blocks, + out uint foundLba, out _, _timeout, out _); + + if(mediumScan) + lba = foundLba; + } var rnd = new Random(); @@ -90,6 +100,16 @@ namespace Aaru.Core.Devices } lba = (uint)rnd.Next(1, (int)Blocks); + + if(mediumScan) + { + mediumScan = !_dev.MediumScan(out _, true, false, false, false, false, lba, 1, (uint)Blocks, + out uint foundLba, out _, _timeout, out _); + + if(mediumScan) + lba = foundLba; + } + tries++; }