mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Wait for device to exist ASC 28h status. This should be trapped by the
OS but it's being so in some corner cases.
This commit is contained in:
@@ -113,6 +113,27 @@ namespace DiscImageChef.Core.Devices.Dumping
|
|||||||
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
||||||
return;
|
return;
|
||||||
}*/
|
}*/
|
||||||
|
// These should be trapped by the OS but seems in some cases they're not
|
||||||
|
else if(decSense.Value.ASC == 0x28)
|
||||||
|
{
|
||||||
|
int leftRetries = 10;
|
||||||
|
while(leftRetries > 0)
|
||||||
|
{
|
||||||
|
DicConsole.WriteLine("\rWaiting for drive to become ready");
|
||||||
|
System.Threading.Thread.Sleep(2000);
|
||||||
|
sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration);
|
||||||
|
if(!sense)
|
||||||
|
break;
|
||||||
|
|
||||||
|
leftRetries--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sense)
|
||||||
|
{
|
||||||
|
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
||||||
|
|||||||
@@ -805,6 +805,23 @@ namespace DiscImageChef.Core.Devices.Report.SCSI
|
|||||||
|
|
||||||
mediaTest.MediaIsRecognized &= !sense;
|
mediaTest.MediaIsRecognized &= !sense;
|
||||||
}
|
}
|
||||||
|
// These should be trapped by the OS but seems in some cases they're not
|
||||||
|
else if(decSense.Value.ASC == 0x28)
|
||||||
|
{
|
||||||
|
int leftRetries = 20;
|
||||||
|
while(leftRetries > 0)
|
||||||
|
{
|
||||||
|
DicConsole.Write("\rWaiting for drive to become ready");
|
||||||
|
System.Threading.Thread.Sleep(2000);
|
||||||
|
sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration);
|
||||||
|
if(!sense)
|
||||||
|
break;
|
||||||
|
|
||||||
|
leftRetries--;
|
||||||
|
}
|
||||||
|
|
||||||
|
mediaTest.MediaIsRecognized &= !sense;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
mediaTest.MediaIsRecognized = false;
|
mediaTest.MediaIsRecognized = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,6 +107,27 @@ namespace DiscImageChef.Core.Devices.Scanning
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// These should be trapped by the OS but seems in some cases they're not
|
||||||
|
else if(decSense.Value.ASC == 0x28)
|
||||||
|
{
|
||||||
|
int leftRetries = 10;
|
||||||
|
while(leftRetries > 0)
|
||||||
|
{
|
||||||
|
DicConsole.WriteLine("\rWaiting for drive to become ready");
|
||||||
|
System.Threading.Thread.Sleep(2000);
|
||||||
|
sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration);
|
||||||
|
if(!sense)
|
||||||
|
break;
|
||||||
|
|
||||||
|
leftRetries--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sense)
|
||||||
|
{
|
||||||
|
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf));
|
||||||
|
|||||||
Reference in New Issue
Block a user