Add workaround for device report the AccessTek/Optorite DD0203 drive.

This commit is contained in:
2022-10-27 10:59:41 +01:00
parent 61620a0a12
commit a37e0f3e7e
2 changed files with 62 additions and 32 deletions

View File

@@ -1429,15 +1429,22 @@ public sealed partial class DeviceReport
mediaTest.RWSubchannelData = buffer;
mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, out senseBuffer, 11, 2448, 1,
MmcSectorTypes.Cdda, false, false, false,
MmcHeaderCodes.None, true, false,
MmcErrorField.None, MmcSubchannel.Rw,
_dev.Timeout, out _);
// AccessTek/Optorite DD0203 returns OK but then the firmware dies
if(_dev.Model.StartsWith("DVD RW 4XMax", StringComparison.Ordinal))
mediaTest.CanReadCorrectedSubchannel = false;
else
{
mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, out senseBuffer, 11, 2448, 1,
MmcSectorTypes.Cdda, false, false, false,
MmcHeaderCodes.None, true, false,
MmcErrorField.None, MmcSubchannel.Rw,
_dev.Timeout, out _);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannel);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}",
!mediaTest.CanReadCorrectedSubchannel);
mediaTest.CorrectedSubchannelData = buffer;
mediaTest.CorrectedSubchannelData = buffer;
}
});
Spectre.ProgressSingleSpinner(ctx =>
@@ -1564,15 +1571,22 @@ public sealed partial class DeviceReport
mediaTest.RWSubchannelData = buffer;
mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, out senseBuffer, 16, 2448, 1,
MmcSectorTypes.AllTypes, false, false, true,
MmcHeaderCodes.AllHeaders, true, true,
MmcErrorField.None, MmcSubchannel.Rw,
_dev.Timeout, out _);
// AccessTek/Optorite DD0203 returns OK but then the firmware dies
if(_dev.Model.StartsWith("DVD RW 4XMax", StringComparison.Ordinal))
mediaTest.CanReadCorrectedSubchannel = false;
else
{
mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, out senseBuffer, 16, 2448, 1,
MmcSectorTypes.AllTypes, false, false, true,
MmcHeaderCodes.AllHeaders, true, true,
MmcErrorField.None, MmcSubchannel.Rw,
_dev.Timeout, out _);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannel);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}",
!mediaTest.CanReadCorrectedSubchannel);
mediaTest.CorrectedSubchannelData = buffer;
mediaTest.CorrectedSubchannelData = buffer;
}
});
Spectre.ProgressSingleSpinner(ctx =>
@@ -1627,19 +1641,27 @@ public sealed partial class DeviceReport
true, MmcErrorField.C2Pointers,
MmcSubchannel.Rw, _dev.Timeout, out _);
if(mediaTest.CanReadCorrectedSubchannelWithC2 == false)
mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, out senseBuffer, 16,
2714, 1, MmcSectorTypes.AllTypes,
false, false, true,
MmcHeaderCodes.AllHeaders, true, true,
MmcErrorField.C2PointersAndBlock,
MmcSubchannel.Rw, _dev.Timeout,
out _);
// AccessTek/Optorite DD0203 returns OK but then the firmware dies
if(_dev.Model.StartsWith("DVD RW 4XMax", StringComparison.Ordinal))
mediaTest.CanReadCorrectedSubchannel = false;
else
{
if(mediaTest.CanReadCorrectedSubchannelWithC2 == false)
mediaTest.CanReadCorrectedSubchannelWithC2 = !_dev.ReadCd(out buffer, out senseBuffer,
16, 2714, 1,
MmcSectorTypes.AllTypes, false,
false, true,
MmcHeaderCodes.AllHeaders, true,
true,
MmcErrorField.C2PointersAndBlock,
MmcSubchannel.Rw, _dev.Timeout,
out _);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}",
!mediaTest.CanReadCorrectedSubchannelWithC2);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}",
!mediaTest.CanReadCorrectedSubchannelWithC2);
mediaTest.CorrectedSubchannelWithC2Data = buffer;
mediaTest.CorrectedSubchannelWithC2Data = buffer;
}
}
});
}
@@ -1695,15 +1717,22 @@ public sealed partial class DeviceReport
mediaTest.RWSubchannelData = buffer;
mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, out senseBuffer, 16, 2144, 1,
MmcSectorTypes.AllTypes, false, false, false,
MmcHeaderCodes.None, true, false,
MmcErrorField.None, MmcSubchannel.Rw,
_dev.Timeout, out _);
// AccessTek/Optorite DD0203 returns OK but then the firmware dies
if(_dev.Model.StartsWith("DVD RW 4XMax", StringComparison.Ordinal))
mediaTest.CanReadCorrectedSubchannel = false;
else
{
mediaTest.CanReadCorrectedSubchannel = !_dev.ReadCd(out buffer, out senseBuffer, 16, 2144, 1,
MmcSectorTypes.AllTypes, false, false,
false, MmcHeaderCodes.None, true, false,
MmcErrorField.None, MmcSubchannel.Rw,
_dev.Timeout, out _);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannel);
AaruConsole.DebugWriteLine("SCSI Report", "Sense = {0}",
!mediaTest.CanReadCorrectedSubchannel);
mediaTest.CorrectedSubchannelData = buffer;
mediaTest.CorrectedSubchannelData = buffer;
}
});
Spectre.ProgressSingleSpinner(ctx =>

View File

@@ -465,6 +465,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nuon/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nvme/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=opticals/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Optorite/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=OSTA/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Overmount/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=pangram/@EntryIndexedValue">True</s:Boolean>