diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs index 3e27ca788..d54d15b1e 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs @@ -115,16 +115,12 @@ namespace Aaru.Core.Devices.Dumping break; case MmcSubchannel.Raw: - supportedPlextorSubchannel = PlextorSubchannel.All; + supportedPlextorSubchannel = PlextorSubchannel.Pack; break; case MmcSubchannel.Q16: supportedPlextorSubchannel = PlextorSubchannel.Q16; - break; - case MmcSubchannel.Rw: - supportedPlextorSubchannel = PlextorSubchannel.Pack; - break; default: supportedPlextorSubchannel = PlextorSubchannel.None; diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs index 9f0f09e0d..542481b57 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs @@ -73,16 +73,12 @@ namespace Aaru.Core.Devices.Dumping break; case MmcSubchannel.Raw: - supportedPlextorSubchannel = PlextorSubchannel.All; + supportedPlextorSubchannel = PlextorSubchannel.Pack; break; case MmcSubchannel.Q16: supportedPlextorSubchannel = PlextorSubchannel.Q16; - break; - case MmcSubchannel.Rw: - supportedPlextorSubchannel = PlextorSubchannel.Pack; - break; default: supportedPlextorSubchannel = PlextorSubchannel.None; diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs index 6e58fa4f9..89693fa49 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Plextor.cs @@ -66,40 +66,29 @@ namespace Aaru.Core.Devices.Dumping uint subSize = supportedPlextorSubchannel == PlextorSubchannel.Q16 ? 16u : 96u; - sense = _dev.PlextorReadCdDa(out byte[] dataBuf, out senseBuf, firstSectorToRead, 2352, blocksToRead, - PlextorSubchannel.None, 0, out cmdDuration); - - if(!sense) + if(supportedPlextorSubchannel == PlextorSubchannel.Q16 || + supportedPlextorSubchannel == PlextorSubchannel.Pack) { - sense = _dev.PlextorReadCdDa(out subBuf, out senseBuf, firstSectorToRead, subSize, blocksToRead, - supportedPlextorSubchannel, 0, out cmdDuration); + sense = _dev.PlextorReadCdDa(out cmdBuf, out senseBuf, firstSectorToRead, 2352 + subSize, blocksToRead, + supportedPlextorSubchannel, _dev.Timeout, out cmdDuration); if(!sense) - { - cmdBuf = new byte[(2352 * blocksToRead) + (subSize * blocksToRead)]; - - for(int b = 0; b < blocksToRead; b++) - { - Array.Copy(dataBuf, 2352 * b, cmdBuf, (2352 + subSize) * b, 2352); - Array.Copy(subBuf, subSize * b, cmdBuf, ((2352 + subSize) * b) + 2352, subSize); - } - return false; - } } // As a workaround for some firmware bugs, seek far away. _dev.PlextorReadCdDa(out _, out senseBuf, firstSectorToRead - 32, blockSize, blocksToRead, supportedPlextorSubchannel, 0, out _); - sense = _dev.PlextorReadCdDa(out dataBuf, out senseBuf, firstSectorToRead, 2352, blocksToRead, + sense = _dev.PlextorReadCdDa(out byte[] dataBuf, out senseBuf, firstSectorToRead, 2352, blocksToRead, PlextorSubchannel.None, 0, out cmdDuration); if(sense) return true; sense = _dev.PlextorReadCdDa(out subBuf, out senseBuf, firstSectorToRead, subSize, blocksToRead, - supportedPlextorSubchannel, 0, out cmdDuration); + supportedPlextorSubchannel == PlextorSubchannel.Pack ? PlextorSubchannel.All + : supportedPlextorSubchannel, 0, out cmdDuration); if(sense) return true; diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs index 97a115a14..f7eb067b4 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs @@ -73,16 +73,12 @@ namespace Aaru.Core.Devices.Dumping break; case MmcSubchannel.Raw: - supportedPlextorSubchannel = PlextorSubchannel.All; + supportedPlextorSubchannel = PlextorSubchannel.Pack; break; case MmcSubchannel.Q16: supportedPlextorSubchannel = PlextorSubchannel.Q16; - break; - case MmcSubchannel.Rw: - supportedPlextorSubchannel = PlextorSubchannel.Pack; - break; default: supportedPlextorSubchannel = PlextorSubchannel.None;