diff --git a/DiscImageChef.Core/Benchmark.cs b/DiscImageChef.Core/Benchmark.cs index 098b61104..8bb31acae 100644 --- a/DiscImageChef.Core/Benchmark.cs +++ b/DiscImageChef.Core/Benchmark.cs @@ -67,35 +67,35 @@ namespace DiscImageChef.Core public static event UpdateProgressHandler UpdateProgressEvent; public static event EndProgressHandler EndProgressEvent; - public static void InitProgress() + static void InitProgress() { - if(InitProgressEvent != null) InitProgressEvent(); + InitProgressEvent?.Invoke(); } - public static void UpdateProgress(string text, int current, int maximum) + static void UpdateProgress(string text, int current, int maximum) { - if(UpdateProgressEvent != null) - UpdateProgressEvent(string.Format(text, current, maximum), current, maximum); + UpdateProgressEvent?.Invoke(string.Format(text, current, maximum), current, maximum); } - public static void EndProgress() + static void EndProgress() { - if(EndProgressEvent != null) EndProgressEvent(); + EndProgressEvent?.Invoke(); } public static BenchmarkResults Do(int bufferSize, int blockSize) { - BenchmarkResults results = new BenchmarkResults(); - results.Entries = new Dictionary(); - results.MinMemory = long.MaxValue; - results.MaxMemory = 0; - results.SeparateTime = 0; + BenchmarkResults results = new BenchmarkResults + { + Entries = new Dictionary(), + MinMemory = long.MaxValue, + MaxMemory = 0, + SeparateTime = 0 + }; MemoryStream ms = new MemoryStream(bufferSize); Random rnd = new Random(); DateTime start; DateTime end; long mem; - object ctx; start = DateTime.Now; InitProgress(); @@ -136,7 +136,7 @@ namespace DiscImageChef.Core results.ReadSpeed = bufferSize / 1048576.0 / (end - start).TotalSeconds; #region Adler32 - ctx = new Adler32Context(); + object ctx = new Adler32Context(); ((Adler32Context)ctx).Init(); ms.Seek(0, SeekOrigin.Begin); mem = GC.GetTotalMemory(false); diff --git a/DiscImageChef.Core/Checksum.cs b/DiscImageChef.Core/Checksum.cs index bbb7e850b..e0086b2d1 100644 --- a/DiscImageChef.Core/Checksum.cs +++ b/DiscImageChef.Core/Checksum.cs @@ -292,89 +292,67 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.All)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.adler32; - chk.Value = adler32Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.adler32, Value = adler32Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Crc16)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.crc16; - chk.Value = crc16Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.crc16, Value = crc16Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Crc32)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.crc32; - chk.Value = crc32Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.crc32, Value = crc32Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Crc64)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.crc64; - chk.Value = crc64Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.crc64, Value = crc64Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Md5)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.md5; - chk.Value = md5Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.md5, Value = md5Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Ripemd160)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.ripemd160; - chk.Value = ripemd160Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.ripemd160, Value = ripemd160Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha1)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha1; - chk.Value = sha1Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha1, Value = sha1Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha256)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha256; - chk.Value = sha256Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha256, Value = sha256Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha384)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha384; - chk.Value = sha384Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha384, Value = sha384Ctx.End()}; chks.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha512)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha512; - chk.Value = sha512Ctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha512, Value = sha512Ctx.End()}; chks.Add(chk); } if(!enabled.HasFlag(EnableChecksum.SpamSum)) return chks; - chk = new ChecksumType(); - chk.type = ChecksumTypeType.spamsum; - chk.Value = ssctx.End(); + chk = new ChecksumType {type = ChecksumTypeType.spamsum, Value = ssctx.End()}; chks.Add(chk); return chks; @@ -394,18 +372,6 @@ namespace DiscImageChef.Core Sha512Context sha512CtxData = null; SpamSumContext ssctxData = null; - AdlerPacket adlerPktData; - Crc16Packet crc16PktData; - Crc32Packet crc32PktData; - Crc64Packet crc64PktData; - Md5Packet md5PktData; - Ripemd160Packet ripemd160PktData; - Sha1Packet sha1PktData; - Sha256Packet sha256PktData; - Sha384Packet sha384PktData; - Sha512Packet sha512PktData; - SpamsumPacket spamsumPktData; - Thread adlerThreadData = new Thread(UpdateAdler); Thread crc16ThreadData = new Thread(UpdateCrc16); Thread crc32ThreadData = new Thread(UpdateCrc32); @@ -421,7 +387,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { adler32CtxData = new Adler32Context(); - adlerPktData = new AdlerPacket(); + AdlerPacket adlerPktData = new AdlerPacket(); adler32CtxData.Init(); adlerPktData.Context = adler32CtxData; adlerPktData.Data = data; @@ -430,7 +396,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - crc16PktData = new Crc16Packet(); + Crc16Packet crc16PktData = new Crc16Packet(); crc16CtxData = new Crc16Context(); crc16CtxData.Init(); crc16PktData.Context = crc16CtxData; @@ -440,7 +406,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - crc32PktData = new Crc32Packet(); + Crc32Packet crc32PktData = new Crc32Packet(); crc32CtxData = new Crc32Context(); crc32CtxData.Init(); crc32PktData.Context = crc32CtxData; @@ -450,7 +416,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - crc64PktData = new Crc64Packet(); + Crc64Packet crc64PktData = new Crc64Packet(); crc64CtxData = new Crc64Context(); crc64CtxData.Init(); crc64PktData.Context = crc64CtxData; @@ -460,7 +426,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - md5PktData = new Md5Packet(); + Md5Packet md5PktData = new Md5Packet(); md5CtxData = new Md5Context(); md5CtxData.Init(); md5PktData.Context = md5CtxData; @@ -470,7 +436,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - ripemd160PktData = new Ripemd160Packet(); + Ripemd160Packet ripemd160PktData = new Ripemd160Packet(); ripemd160CtxData = new Ripemd160Context(); ripemd160CtxData.Init(); ripemd160PktData.Context = ripemd160CtxData; @@ -480,7 +446,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - sha1PktData = new Sha1Packet(); + Sha1Packet sha1PktData = new Sha1Packet(); sha1CtxData = new Sha1Context(); sha1CtxData.Init(); sha1PktData.Context = sha1CtxData; @@ -490,7 +456,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - sha256PktData = new Sha256Packet(); + Sha256Packet sha256PktData = new Sha256Packet(); sha256CtxData = new Sha256Context(); sha256CtxData.Init(); sha256PktData.Context = sha256CtxData; @@ -500,7 +466,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - sha384PktData = new Sha384Packet(); + Sha384Packet sha384PktData = new Sha384Packet(); sha384CtxData = new Sha384Context(); sha384CtxData.Init(); sha384PktData.Context = sha384CtxData; @@ -510,7 +476,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - sha512PktData = new Sha512Packet(); + Sha512Packet sha512PktData = new Sha512Packet(); sha512CtxData = new Sha512Context(); sha512CtxData.Init(); sha512PktData.Context = sha512CtxData; @@ -520,7 +486,7 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.SpamSum)) { - spamsumPktData = new SpamsumPacket(); + SpamsumPacket spamsumPktData = new SpamsumPacket(); ssctxData = new SpamSumContext(); ssctxData.Init(); spamsumPktData.Context = ssctxData; @@ -538,89 +504,67 @@ namespace DiscImageChef.Core if(enabled.HasFlag(EnableChecksum.Adler32)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.adler32; - chk.Value = adler32CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.adler32, Value = adler32CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Crc16)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.crc16; - chk.Value = crc16CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.crc16, Value = crc16CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Crc32)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.crc32; - chk.Value = crc32CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.crc32, Value = crc32CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Crc64)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.crc64; - chk.Value = crc64CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.crc64, Value = crc64CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Md5)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.md5; - chk.Value = md5CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.md5, Value = md5CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Ripemd160)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.ripemd160; - chk.Value = ripemd160CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.ripemd160, Value = ripemd160CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha1)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha1; - chk.Value = sha1CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha1, Value = sha1CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha256)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha256; - chk.Value = sha256CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha256, Value = sha256CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha384)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha384; - chk.Value = sha384CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha384, Value = sha384CtxData.End()}; dataChecksums.Add(chk); } if(enabled.HasFlag(EnableChecksum.Sha512)) { - chk = new ChecksumType(); - chk.type = ChecksumTypeType.sha512; - chk.Value = sha512CtxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.sha512, Value = sha512CtxData.End()}; dataChecksums.Add(chk); } if(!enabled.HasFlag(EnableChecksum.SpamSum)) return dataChecksums; - chk = new ChecksumType(); - chk.type = ChecksumTypeType.spamsum; - chk.Value = ssctxData.End(); + chk = new ChecksumType {type = ChecksumTypeType.spamsum, Value = ssctxData.End()}; dataChecksums.Add(chk); return dataChecksums; diff --git a/DiscImageChef.Core/DataFile.cs b/DiscImageChef.Core/DataFile.cs index 8a626eb1d..e7a7976cf 100644 --- a/DiscImageChef.Core/DataFile.cs +++ b/DiscImageChef.Core/DataFile.cs @@ -46,7 +46,7 @@ namespace DiscImageChef.Core public void Close() { - if(dataFs != null) dataFs.Close(); + dataFs?.Close(); } public int Read(byte[] array, int offset, int count) @@ -92,7 +92,7 @@ namespace DiscImageChef.Core public long Position { - get { return dataFs.Position; } + get => dataFs.Position; } public static void WriteTo(string who, string outputPrefix, string outputSuffix, string what, byte[] data) diff --git a/DiscImageChef.Core/Devices/Dumping/ATA.cs b/DiscImageChef.Core/Devices/Dumping/ATA.cs index 220f8b5fa..c0e612538 100644 --- a/DiscImageChef.Core/Devices/Dumping/ATA.cs +++ b/DiscImageChef.Core/Devices/Dumping/ATA.cs @@ -59,8 +59,6 @@ namespace DiscImageChef.Core.Devices.Dumping ref DumpLog dumpLog, Encoding encoding) { bool aborted; - MhddLog mhddLog; - IbgLog ibgLog; if(dumpRaw) { @@ -75,12 +73,11 @@ namespace DiscImageChef.Core.Devices.Dumping } bool sense; - ushort currentProfile = 0x0001; - uint timeout = 5; - double duration; + const ushort ATA_PROFILE = 0x0001; + const uint TIMEOUT = 5; dumpLog.WriteLine("Requesting ATA IDENTIFY DEVICE."); - sense = dev.AtaIdentify(out byte[] cmdBuf, out AtaErrorRegistersCHS errorChs); + sense = dev.AtaIdentify(out byte[] cmdBuf, out _); if(!sense && Identify.Decode(cmdBuf).HasValue) { Identify.IdentifyDevice? ataIdNullable = Identify.Decode(cmdBuf); @@ -170,7 +167,6 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - Checksum dataChk; aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; @@ -179,7 +175,7 @@ namespace DiscImageChef.Core.Devices.Dumping // Initializate reader dumpLog.WriteLine("Initializing reader."); - Reader ataReader = new Reader(dev, timeout, cmdBuf); + Reader ataReader = new Reader(dev, TIMEOUT, cmdBuf); // Fill reader blocks ulong blocks = ataReader.GetDeviceBlocks(); // Check block sizes @@ -218,7 +214,7 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Device reports {0} bytes per logical block.", blockSize); dumpLog.WriteLine("Device reports {0} bytes per physical block.", physicalsectorsize); - bool removable = false || !dev.IsCompactFlash && + bool removable = !dev.IsCompactFlash && ataId.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit .Removable); DumpHardwareType currentTry = null; @@ -228,12 +224,15 @@ namespace DiscImageChef.Core.Devices.Dumping if(currentTry == null || extents == null) throw new Exception("Could not process resume file, not continuing..."); + MhddLog mhddLog; + IbgLog ibgLog; + double duration; if(ataReader.IsLba) { DicConsole.WriteLine("Reading {0} sectors at a time.", blocksToRead); mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(outputPrefix + ".ibg", currentProfile); + ibgLog = new IbgLog(outputPrefix + ".ibg", ATA_PROFILE); dumpFile = new DataFile(outputPrefix + ".bin"); if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock); @@ -271,8 +270,7 @@ namespace DiscImageChef.Core.Devices.Dumping { for(ulong b = i; b < i + blocksToRead; b++) resume.BadBlocks.Add(b); - if(duration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, duration); + mhddLog.Write(i, duration < 500 ? 65535 : duration); ibgLog.Write(i, 0); dumpFile.Write(new byte[blockSize * blocksToRead]); @@ -348,7 +346,7 @@ namespace DiscImageChef.Core.Devices.Dumping else { mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(outputPrefix + ".ibg", currentProfile); + ibgLog = new IbgLog(outputPrefix + ".ibg", ATA_PROFILE); dumpFile = new DataFile(outputPrefix + ".bin"); ulong currentBlock = 0; @@ -390,8 +388,7 @@ namespace DiscImageChef.Core.Devices.Dumping else { resume.BadBlocks.Add(currentBlock); - if(duration < 500) mhddLog.Write(currentBlock, 65535); - else mhddLog.Write(currentBlock, duration); + mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration); ibgLog.Write(currentBlock, 0); dumpFile.Write(new byte[blockSize]); @@ -416,7 +413,7 @@ namespace DiscImageChef.Core.Devices.Dumping (double)blockSize * (double)(blocks + 1) / 1024 / (totalDuration / 1000)); } - dataChk = new Checksum(); + Checksum dataChk = new Checksum(); dumpFile.Seek(0, SeekOrigin.Begin); blocksToRead = 500; @@ -454,7 +451,6 @@ namespace DiscImageChef.Core.Devices.Dumping PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(encoding); - ImagePlugin imageFormat; FiltersList filtersList = new FiltersList(); Filter inputFilter = filtersList.GetFilter(outputPrefix + ".bin"); @@ -465,7 +461,7 @@ namespace DiscImageChef.Core.Devices.Dumping return; } - imageFormat = ImageFormat.Detect(inputFilter); + ImagePlugin imageFormat = ImageFormat.Detect(inputFilter); PartitionType[] xmlFileSysInfo = null; try { if(!imageFormat.OpenImage(inputFilter)) imageFormat = null; } @@ -503,7 +499,7 @@ namespace DiscImageChef.Core.Devices.Dumping { if(!plugin.Identify(imageFormat, partitions[i])) continue; - plugin.GetInformation(imageFormat, partitions[i], out string foo); + plugin.GetInformation(imageFormat, partitions[i], out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); @@ -538,7 +534,7 @@ namespace DiscImageChef.Core.Devices.Dumping { if(!plugin.Identify(imageFormat, wholePart)) continue; - plugin.GetInformation(imageFormat, wholePart, out string foo); + plugin.GetInformation(imageFormat, wholePart, out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index 67305d216..3a82a1957 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -59,14 +59,11 @@ namespace DiscImageChef.Core.Devices.Dumping ref MediaType dskType, bool separateSubchannel, ref Resume resume, ref DumpLog dumpLog, Alcohol120 alcohol, bool dumpLeadIn) { - MhddLog mhddLog; - IbgLog ibgLog; bool sense = false; ulong blocks; // TODO: Check subchannel support uint blockSize; uint subSize; - byte[] tmpBuf; FullTOC.CDFullTOC? toc = null; DateTime start; DateTime end; @@ -77,9 +74,7 @@ namespace DiscImageChef.Core.Devices.Dumping double minSpeed = double.MaxValue; Checksum dataChk; bool readcd; - byte[] readBuffer; uint blocksToRead = 64; - ulong errored = 0; DataFile dumpFile; bool aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; @@ -87,13 +82,13 @@ namespace DiscImageChef.Core.Devices.Dumping // We discarded all discs that falsify a TOC before requesting a real TOC // No TOC, no CD (or an empty one) dumpLog.WriteLine("Reading full TOC"); - bool tocSense = dev.ReadRawToc(out byte[] cmdBuf, out byte[] senseBuf, 1, dev.Timeout, out double duration); + bool tocSense = dev.ReadRawToc(out byte[] cmdBuf, out byte[] senseBuf, 1, dev.Timeout, out _); if(!tocSense) { toc = FullTOC.Decode(cmdBuf); if(toc.HasValue) { - tmpBuf = new byte[cmdBuf.Length - 2]; + byte[] tmpBuf = new byte[cmdBuf.Length - 2]; Array.Copy(cmdBuf, 2, tmpBuf, 0, cmdBuf.Length - 2); sidecar.OpticalDisc[0].TOC = new DumpType { @@ -105,7 +100,7 @@ namespace DiscImageChef.Core.Devices.Dumping // ATIP exists on blank CDs dumpLog.WriteLine("Reading ATIP"); - sense = dev.ReadAtip(out cmdBuf, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadAtip(out cmdBuf, out senseBuf, dev.Timeout, out _); if(!sense) { ATIP.CDATIP? atip = ATIP.Decode(cmdBuf); @@ -129,7 +124,7 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading Disc Information"); sense = dev.ReadDiscInformation(out cmdBuf, out senseBuf, MmcDiscInformationDataTypes.DiscInformation, dev.Timeout, - out duration); + out _); if(!sense) { DiscInformation.StandardDiscInformation? discInfo = @@ -151,7 +146,7 @@ namespace DiscImageChef.Core.Devices.Dumping int firstTrackLastSession = 0; dumpLog.WriteLine("Reading Session Information"); - sense = dev.ReadSessionInfo(out cmdBuf, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadSessionInfo(out cmdBuf, out senseBuf, dev.Timeout, out _); if(!sense) { Session.CDSessionInfo? session = Session.Decode(cmdBuf); @@ -194,7 +189,7 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading PMA"); - sense = dev.ReadPma(out cmdBuf, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadPma(out cmdBuf, out senseBuf, dev.Timeout, out _); if(!sense) if(PMA.Decode(cmdBuf).HasValue) { @@ -210,7 +205,7 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading CD-Text from Lead-In"); - sense = dev.ReadCdText(out cmdBuf, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadCdText(out cmdBuf, out senseBuf, dev.Timeout, out _); if(!sense) if(CDTextOnLeadIn.Decode(cmdBuf).HasValue) { @@ -319,8 +314,7 @@ namespace DiscImageChef.Core.Devices.Dumping phour = trk.PHOUR; } - if(phour > 0) lastMsf = string.Format("{3:D2}:{0:D2}:{1:D2}:{2:D2}", pmin, psec, pframe, phour); - else lastMsf = $"{pmin:D2}:{psec:D2}:{pframe:D2}"; + lastMsf = phour > 0 ? $"{phour:D2}:{pmin:D2}:{psec:D2}:{pframe:D2}" : $"{pmin:D2}:{psec:D2}:{pframe:D2}"; lastSector = phour * 3600 * 75 + pmin * 60 * 75 + psec * 75 + pframe - 150; } @@ -347,9 +341,7 @@ namespace DiscImageChef.Core.Devices.Dumping pframe -= psec * 75; } - if(phour > 0) - tracks[t - 1].EndMSF = string.Format("{3:D2}:{0:D2}:{1:D2}:{2:D2}", pmin, psec, pframe, phour); - else tracks[t - 1].EndMSF = $"{pmin:D2}:{psec:D2}:{pframe:D2}"; + tracks[t - 1].EndMSF = phour > 0 ? $"{phour:D2}:{pmin:D2}:{psec:D2}:{pframe:D2}" : $"{pmin:D2}:{psec:D2}:{pframe:D2}"; } tracks[tracks.Length - 1].EndMSF = lastMsf; @@ -364,9 +356,9 @@ namespace DiscImageChef.Core.Devices.Dumping if(dumpRaw) throw new NotImplementedException("Raw CD dumping not yet implemented"); // TODO: Check subchannel capabilities - readcd = !dev.ReadCd(out readBuffer, out senseBuf, 0, blockSize, 1, MmcSectorTypes.AllTypes, false, + readcd = !dev.ReadCd(out byte[] readBuffer, out senseBuf, 0, blockSize, 1, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.Raw, dev.Timeout, out duration); + MmcSubchannel.Raw, dev.Timeout, out _); if(readcd) DicConsole.WriteLine("Using MMC READ CD command."); @@ -463,7 +455,7 @@ namespace DiscImageChef.Core.Devices.Dumping { sense = dev.ReadCd(out readBuffer, out senseBuf, 0, blockSize, blocksToRead, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, - true, MmcErrorField.None, MmcSubchannel.Raw, dev.Timeout, out duration); + true, MmcErrorField.None, MmcSubchannel.Raw, dev.Timeout, out _); if(dev.Error || sense) blocksToRead /= 2; } @@ -490,8 +482,8 @@ namespace DiscImageChef.Core.Devices.Dumping alcohol.SetExtension(".bin"); DataFile subFile = null; if(separateSubchannel) subFile = new DataFile(outputPrefix + ".sub"); - mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0008); + MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); + IbgLog ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0008); dumpFile.Seek(resume.NextBlock, (ulong)sectorSize); if(separateSubchannel) subFile.Seek(resume.NextBlock, subSize); @@ -499,7 +491,7 @@ namespace DiscImageChef.Core.Devices.Dumping if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock); start = DateTime.UtcNow; - for(int t = 0; t < tracks.Count(); t++) + for(int t = 0; t < tracks.Length; t++) { dumpLog.WriteLine("Reading track {0}", t); @@ -589,13 +581,11 @@ namespace DiscImageChef.Core.Devices.Dumping } else dumpFile.Write(new byte[blockSize * blocksToRead]); - errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) resume.BadBlocks.Add(b); DicConsole.DebugWriteLine("Dump-Media", "READ error:\n{0}", Sense.PrettifySense(senseBuf)); - if(cmdDuration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); ibgLog.Write(i, 0); dumpLog.WriteLine("Error reading {0} sectors from sector {1}.", blocksToRead, i); @@ -691,8 +681,6 @@ namespace DiscImageChef.Core.Devices.Dumping break; } - double cmdDuration; - DicConsole.Write("\rRetrying sector {0}, pass {1}, {3}{2}", badSector, pass + 1, forward ? "forward" : "reverse", runningPersistent ? "recovering partial data, " : ""); @@ -701,7 +689,7 @@ namespace DiscImageChef.Core.Devices.Dumping { sense = dev.ReadCd(out readBuffer, out senseBuf, (uint)badSector, blockSize, blocksToRead, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, - true, MmcErrorField.None, MmcSubchannel.Raw, dev.Timeout, out cmdDuration); + true, MmcErrorField.None, MmcSubchannel.Raw, dev.Timeout, out double cmdDuration); totalDuration += cmdDuration; } @@ -731,25 +719,12 @@ namespace DiscImageChef.Core.Devices.Dumping goto cdRepeatRetry; } - Modes.DecodedMode? currentMode = null; Modes.ModePage? currentModePage = null; byte[] md6; byte[] md10; if(!runningPersistent && persistent) { - sense = dev.ModeSense6(out readBuffer, out senseBuf, false, ScsiModeSensePageControl.Current, 0x01, - dev.Timeout, out duration); - if(sense) - { - sense = dev.ModeSense10(out readBuffer, out senseBuf, false, ScsiModeSensePageControl.Current, - 0x01, dev.Timeout, out duration); - if(!sense) currentMode = Modes.DecodeMode10(readBuffer, dev.ScsiType); - } - else currentMode = Modes.DecodeMode6(readBuffer, dev.ScsiType); - - if(currentMode.HasValue) currentModePage = currentMode.Value.Pages[0]; - Modes.ModePage_01_MMC pgMmc = new Modes.ModePage_01_MMC {PS = false, ReadRetryCount = 255, Parameter = 0x20}; Modes.DecodedMode md = new Modes.DecodedMode @@ -769,8 +744,8 @@ namespace DiscImageChef.Core.Devices.Dumping md10 = Modes.EncodeMode10(md, dev.ScsiType); dumpLog.WriteLine("Sending MODE SELECT to drive."); - sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out duration); - if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out duration); + sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out _); + if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out _); runningPersistent = true; if(!sense && !dev.Error) @@ -790,8 +765,8 @@ namespace DiscImageChef.Core.Devices.Dumping md10 = Modes.EncodeMode10(md, dev.ScsiType); dumpLog.WriteLine("Sending MODE SELECT to drive."); - sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out duration); - if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out duration); + sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out _); + if(sense) dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out _); } DicConsole.WriteLine(); @@ -807,7 +782,7 @@ namespace DiscImageChef.Core.Devices.Dumping blocksToRead = 500; dumpLog.WriteLine("Checksum starts."); - for(int t = 0; t < tracks.Count(); t++) + for(int t = 0; t < tracks.Length; t++) { Checksum trkChk = new Checksum(); Checksum subChk = new Checksum(); @@ -857,8 +832,7 @@ namespace DiscImageChef.Core.Devices.Dumping } tracks[t].Checksums = trkChk.End().ToArray(); - if(separateSubchannel) tracks[t].SubChannel.Checksums = subChk.End().ToArray(); - else tracks[t].SubChannel.Checksums = tracks[t].Checksums; + tracks[t].SubChannel.Checksums = separateSubchannel ? subChk.End().ToArray() : tracks[t].Checksums; } DicConsole.WriteLine(); @@ -877,7 +851,7 @@ namespace DiscImageChef.Core.Devices.Dumping Value = outputPrefix + ".bin" }; sidecar.OpticalDisc[0].Sessions = toc.Value.LastCompleteSession; - sidecar.OpticalDisc[0].Tracks = new[] {tracks.Count()}; + sidecar.OpticalDisc[0].Tracks = new[] {tracks.Length}; sidecar.OpticalDisc[0].Track = tracks; sidecar.OpticalDisc[0].Dimensions = Dimensions.DimensionsFromMediaType(dskType); Metadata.MediaType.MediaTypeToString(dskType, out string xmlDskTyp, out string xmlDskSubTyp); diff --git a/DiscImageChef.Core/Devices/Dumping/MMC.cs b/DiscImageChef.Core/Devices/Dumping/MMC.cs index 5e697597a..678aa6a15 100644 --- a/DiscImageChef.Core/Devices/Dumping/MMC.cs +++ b/DiscImageChef.Core/Devices/Dumping/MMC.cs @@ -55,11 +55,8 @@ namespace DiscImageChef.Core.Devices.Dumping ref MediaType dskType, bool separateSubchannel, ref Resume resume, ref DumpLog dumpLog, bool dumpLeadIn, Encoding encoding) { - byte[] cmdBuf; - byte[] senseBuf; bool sense; - double duration; - ulong blocks = 0; + ulong blocks; byte[] tmpBuf; bool compactDisc = true; bool isXbox = false; @@ -70,8 +67,8 @@ namespace DiscImageChef.Core.Devices.Dumping // TODO: Log not only what is it reading, but if it was read correctly or not. - sense = dev.GetConfiguration(out cmdBuf, out senseBuf, 0, MmcGetConfigurationRt.Current, dev.Timeout, - out duration); + sense = dev.GetConfiguration(out byte[] cmdBuf, out _, 0, MmcGetConfigurationRt.Current, dev.Timeout, + out _); if(!sense) { Features.SeparatedFeatures ftr = Features.Separate(cmdBuf); @@ -188,8 +185,8 @@ namespace DiscImageChef.Core.Devices.Dumping switch(dskType) { case MediaType.Unknown when blocks > 0: dumpLog.WriteLine("Reading Physical Format Information"); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); if(!sense) { PFI.PhysicalFormatInformation? nintendoPfi = PFI.Decode(cmdBuf); @@ -222,8 +219,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.HDDVDRW: case MediaType.HDDVDRWDL: dumpLog.WriteLine("Reading Physical Format Information"); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); if(!sense) { alcohol.AddPfi(cmdBuf); @@ -259,8 +256,7 @@ namespace DiscImageChef.Core.Devices.Dumping dskType = MediaType.DVDPRWDL; break; case DiskCategory.DVDR: - if(decPfi.PartVersion == 6) dskType = MediaType.DVDRDL; - else dskType = MediaType.DVDR; + dskType = decPfi.PartVersion == 6 ? MediaType.DVDRDL : MediaType.DVDR; break; case DiskCategory.DVDRAM: dskType = MediaType.DVDRAM; @@ -269,8 +265,7 @@ namespace DiscImageChef.Core.Devices.Dumping dskType = MediaType.DVDROM; break; case DiskCategory.DVDRW: - if(decPfi.PartVersion == 3) dskType = MediaType.DVDRWDL; - else dskType = MediaType.DVDRW; + dskType = decPfi.PartVersion == 3 ? MediaType.DVDRWDL : MediaType.DVDRW; break; case DiskCategory.HDDVDR: dskType = MediaType.HDDVDR; @@ -285,8 +280,7 @@ namespace DiscImageChef.Core.Devices.Dumping dskType = MediaType.HDDVDRW; break; case DiskCategory.Nintendo: - if(decPfi.DiscSize == DVDSize.Eighty) dskType = MediaType.GOD; - else dskType = MediaType.WOD; + dskType = decPfi.DiscSize == DVDSize.Eighty ? MediaType.GOD : MediaType.WOD; break; case DiskCategory.UMD: dskType = MediaType.UMD; @@ -296,9 +290,9 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading Disc Manufacturing Information"); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, - out duration); + out _); if(!sense) { if(DMI.IsXbox(cmdBuf) || DMI.IsXbox360(cmdBuf)) @@ -315,7 +309,7 @@ namespace DiscImageChef.Core.Devices.Dumping dskType = MediaType.XGD3; } - sense = dev.ScsiInquiry(out byte[] inqBuf, out senseBuf); + sense = dev.ScsiInquiry(out byte[] inqBuf, out _); if(sense || !Inquiry.Decode(inqBuf).HasValue || Inquiry.Decode(inqBuf).HasValue && @@ -364,9 +358,9 @@ namespace DiscImageChef.Core.Devices.Dumping if(dskType == MediaType.DVDDownload || dskType == MediaType.DVDROM) { dumpLog.WriteLine("Reading Lead-in Copyright Information."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.CopyrightInformation, 0, dev.Timeout, - out duration); + out _); if(!sense) if(CSS_CPRM.DecodeLeadInCopyright(cmdBuf).HasValue) { @@ -394,8 +388,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.DVDROM: case MediaType.HDDVDROM: dumpLog.WriteLine("Reading Burst Cutting Area."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.BurstCuttingArea, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.BurstCuttingArea, 0, dev.Timeout, out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -415,8 +409,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.DVDRAM: case MediaType.HDDVDRAM: dumpLog.WriteLine("Reading Disc Description Structure."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramDds, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.DvdramDds, 0, dev.Timeout, out _); if(!sense) if(DDS.Decode(cmdBuf).HasValue) { @@ -432,9 +426,9 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading Spare Area Information."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.DvdramSpareAreaInformation, 0, dev.Timeout, - out duration); + out _); if(!sense) if(Spare.Decode(cmdBuf).HasValue) { @@ -454,8 +448,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.DVDR: case MediaType.DVDRW: dumpLog.WriteLine("Reading Pre-Recorded Information."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PreRecordedInfo, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.PreRecordedInfo, 0, dev.Timeout, out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -478,9 +472,9 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.DVDRW: case MediaType.HDDVDR: dumpLog.WriteLine("Reading Media Identifier."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.DvdrMediaIdentifier, 0, dev.Timeout, - out duration); + out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -495,9 +489,9 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading Recordable Physical Information."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.DvdrPhysicalInformation, 0, dev.Timeout, - out duration); + out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -518,8 +512,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.DVDPRW: case MediaType.DVDPRWDL: dumpLog.WriteLine("Reading ADdress In Pregroove."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Adip, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.Adip, 0, dev.Timeout, out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -534,8 +528,8 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading Disc Control Blocks."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Dcb, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.Dcb, 0, dev.Timeout, out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -553,9 +547,9 @@ namespace DiscImageChef.Core.Devices.Dumping #region HD DVD-ROM case MediaType.HDDVDROM: dumpLog.WriteLine("Reading Lead-in Copyright Information."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, MmcDiscStructureFormat.HddvdCopyrightInformation, 0, dev.Timeout, - out duration); + out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -577,8 +571,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.BDRXL: case MediaType.BDREXL: dumpLog.WriteLine("Reading Disc Information."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.DiscInformation, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, + MmcDiscStructureFormat.DiscInformation, 0, dev.Timeout, out _); if(!sense) if(DI.Decode(cmdBuf).HasValue) { @@ -594,8 +588,8 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading PAC."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.Pac, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, + MmcDiscStructureFormat.Pac, 0, dev.Timeout, out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -616,8 +610,8 @@ namespace DiscImageChef.Core.Devices.Dumping #region BD-ROM only case MediaType.BDROM: dumpLog.WriteLine("Reading Burst Cutting Area."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdBurstCuttingArea, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, + MmcDiscStructureFormat.BdBurstCuttingArea, 0, dev.Timeout, out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -639,8 +633,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.BDRXL: case MediaType.BDREXL: dumpLog.WriteLine("Reading Disc Definition Structure."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdDds, 0, dev.Timeout, out duration); + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, + MmcDiscStructureFormat.BdDds, 0, dev.Timeout, out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; @@ -655,9 +649,9 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading Spare Area Information."); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, + sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, MmcDiscStructureFormat.BdSpareAreaInformation, 0, dev.Timeout, - out duration); + out _); if(!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; diff --git a/DiscImageChef.Core/Devices/Dumping/SBC.cs b/DiscImageChef.Core/Devices/Dumping/SBC.cs index f571cceac..ff282ea3d 100644 --- a/DiscImageChef.Core/Devices/Dumping/SBC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SBC.cs @@ -60,12 +60,7 @@ namespace DiscImageChef.Core.Devices.Dumping ref MediaType dskType, bool opticalDisc, ref Resume resume, ref DumpLog dumpLog, Encoding encoding, Alcohol120 alcohol = null) { - MhddLog mhddLog; - IbgLog ibgLog; - byte[] cmdBuf; - byte[] senseBuf; bool sense; - double duration; ulong blocks; uint blockSize; uint logicalBlockSize; @@ -73,7 +68,7 @@ namespace DiscImageChef.Core.Devices.Dumping byte scsiMediumType = 0; byte scsiDensityCode = 0; bool containsFloppyPage = false; - ushort currentProfile = 0x0001; + const ushort SBC_PROFILE = 0x0001; DateTime start; DateTime end; double totalDuration = 0; @@ -81,11 +76,8 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - Checksum dataChk; byte[] readBuffer; - uint blocksToRead = 64; - ulong errored = 0; - DataFile dumpFile; + uint blocksToRead; bool aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; @@ -125,25 +117,6 @@ namespace DiscImageChef.Core.Devices.Dumping return; } - if(dskType == MediaType.Unknown) - dskType = MediaTypeFromScsi.Get((byte)dev.ScsiType, dev.Manufacturer, dev.Model, scsiMediumType, - scsiDensityCode, blocks, blockSize); - - // TODO: Solve floppy page resolve - if(dskType == MediaType.Unknown && dev.IsUsb && containsFloppyPage) dskType = MediaType.FlashDrive; - - DicConsole.WriteLine("Media identified as {0}", dskType); - - dumpLog.WriteLine("Device reports {0} blocks ({1} bytes).", blocks, blocks * blockSize); - dumpLog.WriteLine("Device can read {0} blocks at a time.", blocksToRead); - dumpLog.WriteLine("Device reports {0} bytes per logical block.", blockSize); - dumpLog.WriteLine("Device reports {0} bytes per physical block.", scsiReader.LongBlockSize); - dumpLog.WriteLine("SCSI device type: {0}.", dev.ScsiType); - dumpLog.WriteLine("SCSI medium type: {0}.", scsiMediumType); - dumpLog.WriteLine("SCSI density type: {0}.", scsiDensityCode); - dumpLog.WriteLine("SCSI floppy mode page present: {0}.", containsFloppyPage); - dumpLog.WriteLine("Media identified as {0}.", dskType); - if(!opticalDisc) { sidecar.BlockMedia = new BlockMediaType[1]; @@ -169,10 +142,11 @@ namespace DiscImageChef.Core.Devices.Dumping DataFile.WriteTo("SCSI Dump", sidecar.BlockMedia[0].USB.Descriptors.Image, dev.UsbDescriptors); } + byte[] cmdBuf; if(dev.Type == DeviceType.ATAPI) { dumpLog.WriteLine("Requesting ATAPI IDENTIFY PACKET DEVICE."); - sense = dev.AtapiIdentify(out cmdBuf, out AtaErrorRegistersCHS errorRegs); + sense = dev.AtapiIdentify(out cmdBuf, out _); if(!sense) { sidecar.BlockMedia[0].ATA = new ATAType @@ -188,7 +162,7 @@ namespace DiscImageChef.Core.Devices.Dumping } } - sense = dev.ScsiInquiry(out cmdBuf, out senseBuf); + sense = dev.ScsiInquiry(out cmdBuf, out _); if(!sense) { dumpLog.WriteLine("Requesting SCSI INQUIRY."); @@ -204,7 +178,7 @@ namespace DiscImageChef.Core.Devices.Dumping DataFile.WriteTo("SCSI Dump", sidecar.BlockMedia[0].SCSI.Inquiry.Image, cmdBuf); dumpLog.WriteLine("Reading SCSI Extended Vendor Page Descriptors."); - sense = dev.ScsiInquiry(out cmdBuf, out senseBuf, 0x00); + sense = dev.ScsiInquiry(out cmdBuf, out _, 0x00); if(!sense) { byte[] pages = EVPD.DecodePage00(cmdBuf); @@ -215,7 +189,7 @@ namespace DiscImageChef.Core.Devices.Dumping foreach(byte page in pages) { dumpLog.WriteLine("Requesting page {0:X2}h.", page); - sense = dev.ScsiInquiry(out cmdBuf, out senseBuf, page); + sense = dev.ScsiInquiry(out cmdBuf, out _, page); if(sense) continue; EVPDType evpd = new EVPDType @@ -234,11 +208,11 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Requesting MODE SENSE (10)."); - sense = dev.ModeSense10(out cmdBuf, out senseBuf, false, true, ScsiModeSensePageControl.Current, - 0x3F, 0xFF, 5, out duration); + sense = dev.ModeSense10(out cmdBuf, out _, false, true, ScsiModeSensePageControl.Current, + 0x3F, 0xFF, 5, out _); if(!sense || dev.Error) - sense = dev.ModeSense10(out cmdBuf, out senseBuf, false, true, - ScsiModeSensePageControl.Current, 0x3F, 0x00, 5, out duration); + sense = dev.ModeSense10(out cmdBuf, out _, false, true, + ScsiModeSensePageControl.Current, 0x3F, 0x00, 5, out _); Modes.DecodedMode? decMode = null; @@ -256,12 +230,12 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Requesting MODE SENSE (6)."); - sense = dev.ModeSense6(out cmdBuf, out senseBuf, false, ScsiModeSensePageControl.Current, 0x3F, - 0x00, 5, out duration); + sense = dev.ModeSense6(out cmdBuf, out _, false, ScsiModeSensePageControl.Current, 0x3F, + 0x00, 5, out _); if(sense || dev.Error) - sense = dev.ModeSense6(out cmdBuf, out senseBuf, false, ScsiModeSensePageControl.Current, - 0x3F, 0x00, 5, out duration); - if(sense || dev.Error) sense = dev.ModeSense(out cmdBuf, out senseBuf, 5, out duration); + sense = dev.ModeSense6(out cmdBuf, out _, false, ScsiModeSensePageControl.Current, + 0x3F, 0x00, 5, out _); + if(sense || dev.Error) sense = dev.ModeSense(out cmdBuf, out _, 5, out _); if(!sense && !dev.Error) if(Modes.DecodeMode6(cmdBuf, dev.ScsiType).HasValue) @@ -289,15 +263,33 @@ namespace DiscImageChef.Core.Devices.Dumping } } + if(dskType == MediaType.Unknown) + dskType = MediaTypeFromScsi.Get((byte)dev.ScsiType, dev.Manufacturer, dev.Model, scsiMediumType, + scsiDensityCode, blocks, blockSize); + + + dumpLog.WriteLine("Device reports {0} blocks ({1} bytes).", blocks, blocks * blockSize); + dumpLog.WriteLine("Device can read {0} blocks at a time.", blocksToRead); + dumpLog.WriteLine("Device reports {0} bytes per logical block.", blockSize); + dumpLog.WriteLine("Device reports {0} bytes per physical block.", scsiReader.LongBlockSize); + dumpLog.WriteLine("SCSI device type: {0}.", dev.ScsiType); + dumpLog.WriteLine("SCSI medium type: {0}.", scsiMediumType); + dumpLog.WriteLine("SCSI density type: {0}.", scsiDensityCode); + + if(dskType == MediaType.Unknown && dev.IsUsb && containsFloppyPage) dskType = MediaType.FlashDrive; + + DicConsole.WriteLine("Media identified as {0}", dskType); + dumpLog.WriteLine("SCSI floppy mode page present: {0}.", containsFloppyPage); + dumpLog.WriteLine("Media identified as {0}.", dskType); + uint longBlockSize = scsiReader.LongBlockSize; if(dumpRaw) if(blockSize == longBlockSize) { - if(!scsiReader.CanReadRaw) DicConsole.ErrorWriteLine("Device doesn't seem capable of reading raw data from media."); - else - DicConsole - .ErrorWriteLine("Device is capable of reading raw data but I've been unable to guess correct sector size."); + DicConsole.ErrorWriteLine(!scsiReader.CanReadRaw + ? "Device doesn't seem capable of reading raw data from media." + : "Device is capable of reading raw data but I've been unable to guess correct sector size."); if(!force) { @@ -312,10 +304,8 @@ namespace DiscImageChef.Core.Devices.Dumping } else { - if(longBlockSize == 37856 - ) // Only a block will be read, but it contains 16 sectors and command expect sector number not block number - blocksToRead = 16; - else blocksToRead = 1; + // Only a block will be read, but it contains 16 sectors and command expect sector number not block number + blocksToRead = (uint)(longBlockSize == 37856 ? 16 : 1); DicConsole.WriteLine("Reading {0} raw bytes ({1} cooked bytes) per sector.", longBlockSize, blockSize * blocksToRead); physicalBlockSize = longBlockSize; @@ -326,9 +316,9 @@ namespace DiscImageChef.Core.Devices.Dumping string outputExtension = ".bin"; if(opticalDisc && blockSize == 2048) outputExtension = ".iso"; - mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(outputPrefix + ".ibg", currentProfile); - dumpFile = new DataFile(outputPrefix + outputExtension); + MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); + IbgLog ibgLog = new IbgLog(outputPrefix + ".ibg", SBC_PROFILE); + DataFile dumpFile = new DataFile(outputPrefix + outputExtension); start = DateTime.UtcNow; @@ -387,11 +377,9 @@ namespace DiscImageChef.Core.Devices.Dumping // Write empty data dumpFile.Write(new byte[blockSize * blocksToRead]); - errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) resume.BadBlocks.Add(b); - if(cmdDuration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); ibgLog.Write(i, 0); dumpLog.WriteLine("Error reading {0} blocks from block {1}.", blocksToRead, i); @@ -454,25 +442,12 @@ namespace DiscImageChef.Core.Devices.Dumping goto repeatRetry; } - Modes.DecodedMode? currentMode = null; Modes.ModePage? currentModePage = null; byte[] md6; byte[] md10; if(!runningPersistent && persistent) { - sense = dev.ModeSense6(out readBuffer, out senseBuf, false, ScsiModeSensePageControl.Current, 0x01, - dev.Timeout, out duration); - if(sense) - { - sense = dev.ModeSense10(out readBuffer, out senseBuf, false, ScsiModeSensePageControl.Current, - 0x01, dev.Timeout, out duration); - if(!sense) currentMode = Modes.DecodeMode10(readBuffer, dev.ScsiType); - } - else currentMode = Modes.DecodeMode6(readBuffer, dev.ScsiType); - - if(currentMode.HasValue) currentModePage = currentMode.Value.Pages[0]; - if(dev.ScsiType == PeripheralDeviceTypes.MultiMediaDevice) { Modes.ModePage_01_MMC pgMmc = @@ -531,8 +506,8 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Sending MODE SELECT to drive."); - sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out duration); - if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out duration); + sense = dev.ModeSelect(md6, out _, true, false, dev.Timeout, out _); + if(sense) sense = dev.ModeSelect10(md10, out _, true, false, dev.Timeout, out _); runningPersistent = true; if(!sense && !dev.Error) @@ -552,8 +527,8 @@ namespace DiscImageChef.Core.Devices.Dumping md10 = Modes.EncodeMode10(md, dev.ScsiType); dumpLog.WriteLine("Sending MODE SELECT to drive."); - sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out duration); - if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out duration); + sense = dev.ModeSelect(md6, out _, true, false, dev.Timeout, out _); + if(sense) dev.ModeSelect10(md10, out _, true, false, dev.Timeout, out _); } DicConsole.WriteLine(); @@ -563,7 +538,7 @@ namespace DiscImageChef.Core.Devices.Dumping resume.BadBlocks.Sort(); currentTry.Extents = ExtentsConverter.ToMetadata(extents); - dataChk = new Checksum(); + Checksum dataChk = new Checksum(); dumpFile.Seek(0, SeekOrigin.Begin); blocksToRead = 500; @@ -601,7 +576,6 @@ namespace DiscImageChef.Core.Devices.Dumping PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(encoding); - ImagePlugin imageFormat; FiltersList filtersList = new FiltersList(); Filter inputFilter = filtersList.GetFilter(outputPrefix + outputExtension); @@ -611,7 +585,7 @@ namespace DiscImageChef.Core.Devices.Dumping return; } - imageFormat = ImageFormat.Detect(inputFilter); + ImagePlugin imageFormat = ImageFormat.Detect(inputFilter); PartitionType[] xmlFileSysInfo = null; try { if(!imageFormat.OpenImage(inputFilter)) imageFormat = null; } @@ -648,7 +622,7 @@ namespace DiscImageChef.Core.Devices.Dumping { if(!plugin.Identify(imageFormat, partitions[i])) continue; - plugin.GetInformation(imageFormat, partitions[i], out string foo); + plugin.GetInformation(imageFormat, partitions[i], out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); @@ -689,7 +663,7 @@ namespace DiscImageChef.Core.Devices.Dumping { if(!plugin.Identify(imageFormat, wholePart)) continue; - plugin.GetInformation(imageFormat, wholePart, out string foo); + plugin.GetInformation(imageFormat, wholePart, out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); diff --git a/DiscImageChef.Core/Devices/Dumping/SCSI.cs b/DiscImageChef.Core/Devices/Dumping/SCSI.cs index 1ef36b707..5adec3ff3 100644 --- a/DiscImageChef.Core/Devices/Dumping/SCSI.cs +++ b/DiscImageChef.Core/Devices/Dumping/SCSI.cs @@ -50,15 +50,13 @@ namespace DiscImageChef.Core.Devices.Dumping bool dumpRaw, bool persistent, bool stopOnError, bool separateSubchannel, ref Resume resume, ref DumpLog dumpLog, bool dumpLeadIn, Encoding encoding) { - byte[] senseBuf; - bool sense; MediaType dskType = MediaType.Unknown; int resets = 0; if(dev.IsRemovable) { deviceGotReset: - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out double duration); + bool sense = dev.ScsiTestUnitReady(out byte[] senseBuf, dev.Timeout, out _); if(sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuf); @@ -81,7 +79,7 @@ namespace DiscImageChef.Core.Devices.Dumping { DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); if(!sense) break; decSense = Sense.DecodeFixed(senseBuf); @@ -104,7 +102,7 @@ namespace DiscImageChef.Core.Devices.Dumping { DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); if(!sense) break; decSense = Sense.DecodeFixed(senseBuf); @@ -141,7 +139,7 @@ namespace DiscImageChef.Core.Devices.Dumping { DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); if(!sense) break; decSense = Sense.DecodeFixed(senseBuf); diff --git a/DiscImageChef.Core/Devices/Dumping/SSC.cs b/DiscImageChef.Core/Devices/Dumping/SSC.cs index 45a246893..a029acecb 100644 --- a/DiscImageChef.Core/Devices/Dumping/SSC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SSC.cs @@ -53,8 +53,6 @@ namespace DiscImageChef.Core.Devices.Dumping { FixedSense? fxSense; bool aborted; - MhddLog mhddLog; - IbgLog ibgLog; bool sense; ulong blocks = 0; uint blockSize; @@ -66,7 +64,6 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - Checksum dataChk; dev.RequestSense(out byte[] senseBuf, dev.Timeout, out double duration); fxSense = Sense.DecodeFixed(senseBuf, out string strSense); @@ -87,7 +84,7 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Rewinding, please wait..."); DicConsole.Write("Rewinding, please wait..."); // Rewind, let timeout apply - sense = dev.Rewind(out senseBuf, dev.Timeout, out duration); + dev.Rewind(out senseBuf, dev.Timeout, out duration); // Still rewinding? // TODO: Pause? @@ -367,21 +364,17 @@ namespace DiscImageChef.Core.Devices.Dumping } } - Checksum partitionChk; - Checksum fileChk; List partitions = new List(); List files = new List(); - TapeFileType currentTapeFile; - TapePartitionType currentTapePartition; DicConsole.WriteLine(); DataFile dumpFile = new DataFile(outputPrefix + ".bin"); - dataChk = new Checksum(); + Checksum dataChk = new Checksum(); start = DateTime.UtcNow; - mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, 1); - ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0008); + MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, 1); + IbgLog ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0008); - currentTapeFile = new TapeFileType + TapeFileType currentTapeFile = new TapeFileType { Image = new ImageType { @@ -394,8 +387,8 @@ namespace DiscImageChef.Core.Devices.Dumping StartBlock = (long)currentBlock, BlockSize = blockSize }; - fileChk = new Checksum(); - currentTapePartition = new TapePartitionType + Checksum fileChk = new Checksum(); + TapePartitionType currentTapePartition = new TapePartitionType { Image = new ImageType { @@ -407,7 +400,7 @@ namespace DiscImageChef.Core.Devices.Dumping Sequence = currentPartition, StartBlock = (long)currentBlock }; - partitionChk = new Checksum(); + Checksum partitionChk = new Checksum(); aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; @@ -467,7 +460,7 @@ namespace DiscImageChef.Core.Devices.Dumping currentPartitionSize = 0; partitionChk = new Checksum(); DicConsole.WriteLine("Seeking to partition {0}", currentPartition); - sense = dev.Locate(out senseBuf, false, currentPartition, 0, dev.Timeout, out duration); + dev.Locate(out senseBuf, false, currentPartition, 0, dev.Timeout, out duration); totalDuration += duration; } diff --git a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs index aeb19583f..889cef5e1 100644 --- a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs @@ -57,8 +57,6 @@ namespace DiscImageChef.Core.Devices.Dumping ref DumpLog dumpLog, Encoding encoding) { bool aborted; - MhddLog mhddLog; - IbgLog ibgLog; if(dumpRaw) { @@ -73,8 +71,8 @@ namespace DiscImageChef.Core.Devices.Dumping } bool sense; - ushort currentProfile = 0x0001; - uint timeout = 5; + const ushort SD_PROFILE = 0x0001; + const uint TIMEOUT = 5; double duration; CICMMetadataType sidecar = @@ -83,26 +81,21 @@ namespace DiscImageChef.Core.Devices.Dumping uint blocksToRead = 128; uint blockSize = 512; ulong blocks = 0; - byte[] cid; byte[] csd = null; byte[] ocr = null; byte[] ecsd = null; byte[] scr = null; - uint[] response; int physicalBlockSize = 0; bool byteAddressed = true; switch(dev.Type) { case DeviceType.MMC: { - ExtendedCSD ecsdDecoded = new ExtendedCSD(); - CSD csdDecoded = new CSD(); - dumpLog.WriteLine("Reading Extended CSD"); - sense = dev.ReadExtendedCsd(out ecsd, out response, timeout, out duration); + sense = dev.ReadExtendedCsd(out ecsd, out _, TIMEOUT, out duration); if(!sense) { - ecsdDecoded = Decoders.MMC.Decoders.DecodeExtendedCSD(ecsd); + ExtendedCSD ecsdDecoded = Decoders.MMC.Decoders.DecodeExtendedCSD(ecsd); blocksToRead = ecsdDecoded.OptimalReadSize; blocks = ecsdDecoded.SectorCount; blockSize = (uint)(ecsdDecoded.SectorSize == 1 ? 4096 : 512); @@ -114,12 +107,12 @@ namespace DiscImageChef.Core.Devices.Dumping else ecsd = null; dumpLog.WriteLine("Reading CSD"); - sense = dev.ReadCsd(out csd, out response, timeout, out duration); + sense = dev.ReadCsd(out csd, out _, TIMEOUT, out duration); if(!sense) { if(blocks == 0) { - csdDecoded = Decoders.MMC.Decoders.DecodeCSD(csd); + CSD csdDecoded = Decoders.MMC.Decoders.DecodeCSD(csd); blocks = (ulong)((csdDecoded.Size + 1) * Math.Pow(2, csdDecoded.SizeMultiplier + 2)); blockSize = (uint)Math.Pow(2, csdDecoded.ReadBlockLength); } @@ -127,7 +120,7 @@ namespace DiscImageChef.Core.Devices.Dumping else csd = null; dumpLog.WriteLine("Reading OCR"); - sense = dev.ReadOcr(out ocr, out response, timeout, out duration); + sense = dev.ReadOcr(out ocr, out _, TIMEOUT, out duration); if(sense) ocr = null; sidecar.BlockMedia[0].MultiMediaCard = new MultiMediaCardType(); @@ -135,13 +128,11 @@ namespace DiscImageChef.Core.Devices.Dumping } case DeviceType.SecureDigital: { - Decoders.SecureDigital.CSD csdDecoded = new Decoders.SecureDigital.CSD(); - dumpLog.WriteLine("Reading CSD"); - sense = dev.ReadCsd(out csd, out response, timeout, out duration); + sense = dev.ReadCsd(out csd, out _, TIMEOUT, out duration); if(!sense) { - csdDecoded = Decoders.SecureDigital.Decoders.DecodeCSD(csd); + Decoders.SecureDigital.CSD csdDecoded = Decoders.SecureDigital.Decoders.DecodeCSD(csd); blocks = (ulong)(csdDecoded.Structure == 0 ? (csdDecoded.Size + 1) * Math.Pow(2, csdDecoded.SizeMultiplier + 2) : (csdDecoded.Size + 1) * 1024); @@ -152,11 +143,11 @@ namespace DiscImageChef.Core.Devices.Dumping else csd = null; dumpLog.WriteLine("Reading OCR"); - sense = dev.ReadSdocr(out ocr, out response, timeout, out duration); + sense = dev.ReadSdocr(out ocr, out _, TIMEOUT, out duration); if(sense) ocr = null; dumpLog.WriteLine("Reading SCR"); - sense = dev.ReadScr(out scr, out response, timeout, out duration); + sense = dev.ReadScr(out scr, out _, TIMEOUT, out duration); if(sense) scr = null; sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); @@ -165,7 +156,7 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Reading CID"); - sense = dev.ReadCid(out cid, out response, timeout, out duration); + sense = dev.ReadCid(out byte[] cid, out _, TIMEOUT, out duration); if(sense) cid = null; DumpType cidDump = null; @@ -182,7 +173,7 @@ namespace DiscImageChef.Core.Devices.Dumping }; DataFile.WriteTo("MMC/SecureDigital Dump", cidDump.Image, cid); } - ; + if(csd != null) { csdDump = new DumpType @@ -193,7 +184,7 @@ namespace DiscImageChef.Core.Devices.Dumping }; DataFile.WriteTo("MMC/SecureDigital Dump", csdDump.Image, csd); } - ; + if(ecsd != null) { sidecar.BlockMedia[0].MultiMediaCard.ExtendedCSD = new DumpType @@ -205,7 +196,7 @@ namespace DiscImageChef.Core.Devices.Dumping DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].MultiMediaCard.ExtendedCSD.Image, ecsd); } - ; + if(ocr != null) { ocrDump = new DumpType @@ -216,7 +207,7 @@ namespace DiscImageChef.Core.Devices.Dumping }; DataFile.WriteTo("MMC/SecureDigital Dump", ocrDump.Image, ocr); } - ; + if(scr != null) { sidecar.BlockMedia[0].SecureDigital.SCR = new DumpType @@ -227,7 +218,7 @@ namespace DiscImageChef.Core.Devices.Dumping }; DataFile.WriteTo("MMC/SecureDigital Dump", sidecar.BlockMedia[0].SecureDigital.SCR.Image, scr); } - ; + switch(dev.Type) { case DeviceType.MMC: @@ -249,13 +240,10 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - Checksum dataChk; aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; - DataFile dumpFile; - if(blocks == 0) { dumpLog.WriteLine("Cannot get device size."); @@ -266,11 +254,11 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Device reports {0} blocks.", blocks); byte[] cmdBuf; - bool error = true; + bool error; while(true) { - error = dev.Read(out cmdBuf, out response, 0, blockSize, blocksToRead, byteAddressed, timeout, + error = dev.Read(out cmdBuf, out _, 0, blockSize, blocksToRead, byteAddressed, TIMEOUT, out duration); if(error) blocksToRead /= 2; @@ -280,7 +268,6 @@ namespace DiscImageChef.Core.Devices.Dumping if(error) { - blocksToRead = 1; dumpLog.WriteLine("ERROR: Cannot get blocks to read, device error {0}.", dev.LastError); DicConsole.ErrorWriteLine("Device error {0} trying to guess ideal transfer length.", dev.LastError); return; @@ -297,9 +284,9 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.WriteLine("Reading {0} sectors at a time.", blocksToRead); - mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(outputPrefix + ".ibg", currentProfile); - dumpFile = new DataFile(outputPrefix + ".bin"); + MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); + IbgLog ibgLog = new IbgLog(outputPrefix + ".ibg", SD_PROFILE); + DataFile dumpFile = new DataFile(outputPrefix + ".bin"); dumpFile.Seek(resume.NextBlock, blockSize); if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock); @@ -322,7 +309,7 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.Write("\rReading sector {0} of {1} ({2:F3} MiB/sec.)", i, blocks, currentSpeed); - error = dev.Read(out cmdBuf, out response, (uint)i, blockSize, blocksToRead, byteAddressed, timeout, + error = dev.Read(out cmdBuf, out _, (uint)i, blockSize, blocksToRead, byteAddressed, TIMEOUT, out duration); if(!error) @@ -336,8 +323,7 @@ namespace DiscImageChef.Core.Devices.Dumping { for(ulong b = i; b < i + blocksToRead; b++) resume.BadBlocks.Add(b); - if(duration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, duration); + mhddLog.Write(i, duration < 500 ? 65535 : duration); ibgLog.Write(i, 0); dumpFile.Write(new byte[blockSize * blocksToRead]); @@ -380,7 +366,7 @@ namespace DiscImageChef.Core.Devices.Dumping forward ? "forward" : "reverse", runningPersistent ? "recovering partial data, " : ""); - error = dev.Read(out cmdBuf, out response, (uint)badSector, blockSize, 1, byteAddressed, timeout, + error = dev.Read(out cmdBuf, out _, (uint)badSector, blockSize, 1, byteAddressed, TIMEOUT, out duration); totalDuration += duration; @@ -410,7 +396,7 @@ namespace DiscImageChef.Core.Devices.Dumping currentTry.Extents = ExtentsConverter.ToMetadata(extents); - dataChk = new Checksum(); + Checksum dataChk = new Checksum(); dumpFile.Seek(0, SeekOrigin.Begin); blocksToRead = 500; @@ -448,7 +434,6 @@ namespace DiscImageChef.Core.Devices.Dumping PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(encoding); - ImagePlugin imageFormat; FiltersList filtersList = new FiltersList(); Filter inputFilter = filtersList.GetFilter(outputPrefix + ".bin"); @@ -459,7 +444,7 @@ namespace DiscImageChef.Core.Devices.Dumping return; } - imageFormat = ImageFormat.Detect(inputFilter); + ImagePlugin imageFormat = ImageFormat.Detect(inputFilter); PartitionType[] xmlFileSysInfo = null; try { if(!imageFormat.OpenImage(inputFilter)) imageFormat = null; } @@ -496,7 +481,7 @@ namespace DiscImageChef.Core.Devices.Dumping { if(!plugin.Identify(imageFormat, partitions[i])) continue; - plugin.GetInformation(imageFormat, partitions[i], out string foo); + plugin.GetInformation(imageFormat, partitions[i], out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); @@ -527,7 +512,7 @@ namespace DiscImageChef.Core.Devices.Dumping { if(!plugin.Identify(imageFormat, wholePart)) continue; - plugin.GetInformation(imageFormat, wholePart, out string foo); + plugin.GetInformation(imageFormat, wholePart, out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); @@ -555,6 +540,7 @@ namespace DiscImageChef.Core.Devices.Dumping sidecar.BlockMedia[0].Dimensions = Dimensions.DimensionsFromMediaType(CommonTypes.MediaType.SecureDigital); break; } + sidecar.BlockMedia[0].DiskType = xmlDskTyp; sidecar.BlockMedia[0].DiskSubType = xmlDskSubTyp; // TODO: Implement device firmware revision @@ -569,6 +555,7 @@ namespace DiscImageChef.Core.Devices.Dumping case DeviceType.SecureDigital: sidecar.BlockMedia[0].Interface = "SecureDigital"; break; } + sidecar.BlockMedia[0].LogicalBlocks = (long)blocks; sidecar.BlockMedia[0].PhysicalBlockSize = physicalBlockSize > 0 ? physicalBlockSize : (int)blockSize; sidecar.BlockMedia[0].LogicalBlockSize = (int)blockSize; diff --git a/DiscImageChef.Core/Devices/Dumping/XGD.cs b/DiscImageChef.Core/Devices/Dumping/XGD.cs index 0b8632f53..2194b7d64 100644 --- a/DiscImageChef.Core/Devices/Dumping/XGD.cs +++ b/DiscImageChef.Core/Devices/Dumping/XGD.cs @@ -60,13 +60,10 @@ namespace DiscImageChef.Core.Devices.Dumping ref MediaType dskType, ref Resume resume, ref DumpLog dumpLog, Encoding encoding) { - MhddLog mhddLog; - IbgLog ibgLog; bool sense; ulong blocks; - uint blockSize = 2048; + const uint BLOCK_SIZE = 2048; uint blocksToRead = 64; - ulong errored = 0; DateTime start; DateTime end; double totalDuration = 0; @@ -74,13 +71,11 @@ namespace DiscImageChef.Core.Devices.Dumping double currentSpeed = 0; double maxSpeed = double.MinValue; double minSpeed = double.MaxValue; - Checksum dataChk; - DataFile dumpFile; bool aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; dumpLog.WriteLine("Reading Xbox Security Sector."); - sense = dev.KreonExtractSs(out byte[] ssBuf, out byte[] senseBuf, dev.Timeout, out double duration); + sense = dev.KreonExtractSs(out byte[] ssBuf, out byte[] senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot get Xbox Security Sector, not continuing."); @@ -123,7 +118,7 @@ namespace DiscImageChef.Core.Devices.Dumping // Get video partition size DicConsole.DebugWriteLine("Dump-media command", "Getting video partition size"); dumpLog.WriteLine("Locking drive."); - sense = dev.KreonLock(out senseBuf, dev.Timeout, out duration); + sense = dev.KreonLock(out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot lock drive, not continuing."); @@ -132,7 +127,7 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Getting video partition size."); - sense = dev.ReadCapacity(out byte[] readBuffer, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadCapacity(out byte[] readBuffer, out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot get disc capacity."); @@ -143,7 +138,7 @@ namespace DiscImageChef.Core.Devices.Dumping totalSize = (ulong)((readBuffer[0] << 24) + (readBuffer[1] << 16) + (readBuffer[2] << 8) + readBuffer[3]); dumpLog.WriteLine("Reading Physical Format Information."); sense = dev.ReadDiscStructure(out readBuffer, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, 0, out duration); + MmcDiscStructureFormat.PhysicalInformation, 0, 0, out _); if(sense) { dumpLog.WriteLine("Cannot get PFI."); @@ -166,7 +161,7 @@ namespace DiscImageChef.Core.Devices.Dumping l1Video = totalSize - l0Video + 1; dumpLog.WriteLine("Reading Disc Manufacturing Information."); sense = dev.ReadDiscStructure(out readBuffer, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DiscManufacturingInformation, 0, 0, out duration); + MmcDiscStructureFormat.DiscManufacturingInformation, 0, 0, out _); if(sense) { dumpLog.WriteLine("Cannot get DMI."); @@ -187,7 +182,7 @@ namespace DiscImageChef.Core.Devices.Dumping // Get game partition size DicConsole.DebugWriteLine("Dump-media command", "Getting game partition size"); dumpLog.WriteLine("Unlocking drive (Xtreme)."); - sense = dev.KreonUnlockXtreme(out senseBuf, dev.Timeout, out duration); + sense = dev.KreonUnlockXtreme(out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot unlock drive, not continuing."); @@ -196,7 +191,7 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Getting game partition size."); - sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot get disc capacity."); @@ -211,7 +206,7 @@ namespace DiscImageChef.Core.Devices.Dumping // Get middle zone size DicConsole.DebugWriteLine("Dump-media command", "Getting middle zone size"); dumpLog.WriteLine("Unlocking drive (Wxripper)."); - sense = dev.KreonUnlockWxripper(out senseBuf, dev.Timeout, out duration); + sense = dev.KreonUnlockWxripper(out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot unlock drive, not continuing."); @@ -220,7 +215,7 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Getting disc size."); - sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot get disc capacity."); @@ -231,7 +226,7 @@ namespace DiscImageChef.Core.Devices.Dumping totalSize = (ulong)((readBuffer[0] << 24) + (readBuffer[1] << 16) + (readBuffer[2] << 8) + readBuffer[3]); dumpLog.WriteLine("Reading Physical Format Information."); sense = dev.ReadDiscStructure(out readBuffer, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, 0, out duration); + MmcDiscStructureFormat.PhysicalInformation, 0, 0, out _); if(sense) { dumpLog.WriteLine("Cannot get PFI."); @@ -256,7 +251,7 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading Disc Manufacturing Information."); sense = dev.ReadDiscStructure(out readBuffer, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DiscManufacturingInformation, 0, 0, out duration); + MmcDiscStructureFormat.DiscManufacturingInformation, 0, 0, out _); if(sense) { dumpLog.WriteLine("Cannot get DMI."); @@ -292,8 +287,8 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Total 0 size: {0} sectors", totalSize); dumpLog.WriteLine("Real layer break: {0}", layerBreak); - bool read12 = !dev.Read12(out readBuffer, out senseBuf, 0, false, true, false, false, 0, blockSize, 0, 1, - false, dev.Timeout, out duration); + bool read12 = !dev.Read12(out readBuffer, out senseBuf, 0, false, true, false, false, 0, BLOCK_SIZE, 0, 1, + false, dev.Timeout, out _); if(!read12) { dumpLog.WriteLine("Cannot read medium, aborting scan..."); @@ -308,8 +303,8 @@ namespace DiscImageChef.Core.Devices.Dumping { if(read12) { - sense = dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, 0, blockSize, 0, - blocksToRead, false, dev.Timeout, out duration); + sense = dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, 0, BLOCK_SIZE, 0, + blocksToRead, false, dev.Timeout, out _); if(sense || dev.Error) blocksToRead /= 2; } @@ -326,9 +321,9 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading {0} sectors at a time.", blocksToRead); DicConsole.WriteLine("Reading {0} sectors at a time.", blocksToRead); - mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0010); - dumpFile = new DataFile(outputPrefix + ".iso"); + MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, BLOCK_SIZE, blocksToRead); + IbgLog ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0010); + DataFile dumpFile = new DataFile(outputPrefix + ".iso"); start = DateTime.UtcNow; @@ -342,7 +337,7 @@ namespace DiscImageChef.Core.Devices.Dumping throw new Exception("Could not process resume file, not continuing..."); ulong currentSector = resume.NextBlock; - dumpFile.Seek(resume.NextBlock, blockSize); + dumpFile.Seek(resume.NextBlock, BLOCK_SIZE); if(resume.NextBlock > 0) dumpLog.WriteLine("Resuming from block {0}.", resume.NextBlock); dumpLog.WriteLine("Reading game partition."); @@ -402,7 +397,7 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.Write("\rReading sector {0} of {1} ({2:F3} MiB/sec.)", i, totalSize, currentSpeed); - sense = dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, (uint)i, blockSize, + sense = dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, (uint)i, BLOCK_SIZE, 0, blocksToRead, false, dev.Timeout, out cmdDuration); totalDuration += cmdDuration; @@ -419,15 +414,13 @@ namespace DiscImageChef.Core.Devices.Dumping if(stopOnError) return; // TODO: Return more cleanly // Write empty data - dumpFile.Write(new byte[blockSize * blocksToRead]); + dumpFile.Write(new byte[BLOCK_SIZE * blocksToRead]); - errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) resume.BadBlocks.Add(b); DicConsole.DebugWriteLine("Dump-Media", "READ error:\n{0}", Sense.PrettifySense(senseBuf)); - if(cmdDuration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); ibgLog.Write(i, 0); @@ -437,7 +430,7 @@ namespace DiscImageChef.Core.Devices.Dumping foreach(string senseLine in senseLines) dumpLog.WriteLine(senseLine); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + currentSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (cmdDuration / 1000); blocksToRead = saveBlocksToRead; currentSector = i + 1; resume.NextBlock = currentSector; @@ -485,7 +478,7 @@ namespace DiscImageChef.Core.Devices.Dumping mhddLog.Write(middle + currentSector, cmdDuration); ibgLog.Write(middle + currentSector, currentSpeed * 1024); - dumpFile.Write(new byte[blockSize * blocksToRead]); + dumpFile.Write(new byte[BLOCK_SIZE * blocksToRead]); extents.Add(currentSector, blocksToRead, true); currentSector += blocksToRead; @@ -495,7 +488,7 @@ namespace DiscImageChef.Core.Devices.Dumping blocksToRead = saveBlocksToRead; dumpLog.WriteLine("Locking drive."); - sense = dev.KreonLock(out senseBuf, dev.Timeout, out duration); + sense = dev.KreonLock(out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot lock drive, not continuing."); @@ -503,7 +496,7 @@ namespace DiscImageChef.Core.Devices.Dumping return; } - sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out _); if(sense) { DicConsole.ErrorWriteLine("Cannot get disc capacity."); @@ -531,7 +524,7 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.Write("\rReading sector {0} of {1} ({2:F3} MiB/sec.)", currentSector, totalSize, currentSpeed); - sense = dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, (uint)l1, blockSize, 0, + sense = dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, (uint)l1, BLOCK_SIZE, 0, blocksToRead, false, dev.Timeout, out cmdDuration); totalDuration += cmdDuration; @@ -548,15 +541,14 @@ namespace DiscImageChef.Core.Devices.Dumping if(stopOnError) return; // TODO: Return more cleanly // Write empty data - dumpFile.Write(new byte[blockSize * blocksToRead]); + dumpFile.Write(new byte[BLOCK_SIZE * blocksToRead]); // TODO: Handle errors in video partition //errored += blocksToRead; //resume.BadBlocks.Add(l1); DicConsole.DebugWriteLine("Dump-Media", "READ error:\n{0}", Sense.PrettifySense(senseBuf)); - if(cmdDuration < 500) mhddLog.Write(l1, 65535); - else mhddLog.Write(l1, cmdDuration); + mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration); ibgLog.Write(l1, 0); dumpLog.WriteLine("Error reading {0} blocks from block {1}.", blocksToRead, l1); @@ -566,13 +558,13 @@ namespace DiscImageChef.Core.Devices.Dumping foreach(string senseLine in senseLines) dumpLog.WriteLine(senseLine); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + currentSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (cmdDuration / 1000); currentSector += blocksToRead; resume.NextBlock = currentSector; } dumpLog.WriteLine("Unlocking drive (Wxripper)."); - sense = dev.KreonUnlockWxripper(out senseBuf, dev.Timeout, out duration); + sense = dev.KreonUnlockWxripper(out senseBuf, dev.Timeout, out _); if(sense) { dumpLog.WriteLine("Cannot unlock drive, not continuing."); @@ -580,7 +572,7 @@ namespace DiscImageChef.Core.Devices.Dumping return; } - sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out duration); + sense = dev.ReadCapacity(out readBuffer, out senseBuf, dev.Timeout, out _); if(sense) { DicConsole.ErrorWriteLine("Cannot get disc capacity."); @@ -590,11 +582,11 @@ namespace DiscImageChef.Core.Devices.Dumping end = DateTime.UtcNow; DicConsole.WriteLine(); mhddLog.Close(); - ibgLog.Close(dev, blocks, blockSize, (end - start).TotalSeconds, currentSpeed * 1024, - blockSize * (double)(blocks + 1) / 1024 / (totalDuration / 1000), devicePath); + ibgLog.Close(dev, blocks, BLOCK_SIZE, (end - start).TotalSeconds, currentSpeed * 1024, + BLOCK_SIZE * (double)(blocks + 1) / 1024 / (totalDuration / 1000), devicePath); dumpLog.WriteLine("Dump finished in {0} seconds.", (end - start).TotalSeconds); dumpLog.WriteLine("Average dump speed {0:F3} KiB/sec.", - (double)blockSize * (double)(blocks + 1) / 1024 / (totalDuration / 1000)); + (double)BLOCK_SIZE * (double)(blocks + 1) / 1024 / (totalDuration / 1000)); #region Error handling if(resume.BadBlocks.Count > 0 && !aborted) @@ -627,17 +619,17 @@ namespace DiscImageChef.Core.Devices.Dumping runningPersistent ? "recovering partial data, " : ""); sense = dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, (uint)badSector, - blockSize, 0, 1, false, dev.Timeout, out cmdDuration); + BLOCK_SIZE, 0, 1, false, dev.Timeout, out cmdDuration); totalDuration += cmdDuration; if(!sense && !dev.Error) { resume.BadBlocks.Remove(badSector); extents.Add(badSector); - dumpFile.WriteAt(readBuffer, badSector, blockSize); + dumpFile.WriteAt(readBuffer, badSector, BLOCK_SIZE); dumpLog.WriteLine("Correctly retried block {0} in pass {1}.", badSector, pass); } - else if(runningPersistent) dumpFile.WriteAt(readBuffer, badSector, blockSize); + else if(runningPersistent) dumpFile.WriteAt(readBuffer, badSector, BLOCK_SIZE); } if(pass < retryPasses && !aborted && resume.BadBlocks.Count > 0) @@ -649,25 +641,12 @@ namespace DiscImageChef.Core.Devices.Dumping goto repeatRetry; } - Modes.DecodedMode? currentMode = null; Modes.ModePage? currentModePage = null; byte[] md6; byte[] md10; if(!runningPersistent && persistent) { - sense = dev.ModeSense6(out readBuffer, out senseBuf, false, ScsiModeSensePageControl.Current, 0x01, - dev.Timeout, out duration); - if(sense) - { - sense = dev.ModeSense10(out readBuffer, out senseBuf, false, ScsiModeSensePageControl.Current, - 0x01, dev.Timeout, out duration); - if(!sense) currentMode = Modes.DecodeMode10(readBuffer, dev.ScsiType); - } - else currentMode = Modes.DecodeMode6(readBuffer, dev.ScsiType); - - if(currentMode.HasValue) currentModePage = currentMode.Value.Pages[0]; - if(dev.ScsiType == PeripheralDeviceTypes.MultiMediaDevice) { Modes.ModePage_01_MMC pgMmc = @@ -726,8 +705,8 @@ namespace DiscImageChef.Core.Devices.Dumping } dumpLog.WriteLine("Sending MODE SELECT to drive."); - sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out duration); - if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out duration); + sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out _); + if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out _); runningPersistent = true; if(!sense && !dev.Error) @@ -747,8 +726,8 @@ namespace DiscImageChef.Core.Devices.Dumping md10 = Modes.EncodeMode10(md, dev.ScsiType); dumpLog.WriteLine("Sending MODE SELECT to drive."); - sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out duration); - if(sense) sense = dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out duration); + sense = dev.ModeSelect(md6, out senseBuf, true, false, dev.Timeout, out _); + if(sense) dev.ModeSelect10(md10, out senseBuf, true, false, dev.Timeout, out _); } DicConsole.WriteLine(); @@ -758,7 +737,7 @@ namespace DiscImageChef.Core.Devices.Dumping resume.BadBlocks.Sort(); currentTry.Extents = ExtentsConverter.ToMetadata(extents); - dataChk = new Checksum(); + Checksum dataChk = new Checksum(); dumpFile.Seek(0, SeekOrigin.Begin); blocksToRead = 500; @@ -778,15 +757,15 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.Write("\rChecksumming sector {0} of {1} ({2:F3} MiB/sec.)", i, blocks, currentSpeed); DateTime chkStart = DateTime.UtcNow; - byte[] dataToCheck = new byte[blockSize * blocksToRead]; - dumpFile.Read(dataToCheck, 0, (int)(blockSize * blocksToRead)); + byte[] dataToCheck = new byte[BLOCK_SIZE * blocksToRead]; + dumpFile.Read(dataToCheck, 0, (int)(BLOCK_SIZE * blocksToRead)); dataChk.Update(dataToCheck); DateTime chkEnd = DateTime.UtcNow; double chkDuration = (chkEnd - chkStart).TotalMilliseconds; totalChkDuration += chkDuration; - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + currentSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (chkDuration / 1000); } DicConsole.WriteLine(); @@ -794,11 +773,10 @@ namespace DiscImageChef.Core.Devices.Dumping end = DateTime.UtcNow; dumpLog.WriteLine("Checksum finished in {0} seconds.", (end - start).TotalSeconds); dumpLog.WriteLine("Average checksum speed {0:F3} KiB/sec.", - (double)blockSize * (double)(blocks + 1) / 1024 / (totalChkDuration / 1000)); + (double)BLOCK_SIZE * (double)(blocks + 1) / 1024 / (totalChkDuration / 1000)); PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(encoding); - ImagePlugin imageFormat; FiltersList filtersList = new FiltersList(); Filter inputFilter = filtersList.GetFilter(outputPrefix + ".iso"); @@ -808,7 +786,7 @@ namespace DiscImageChef.Core.Devices.Dumping return; } - imageFormat = ImageFormat.Detect(inputFilter); + ImagePlugin imageFormat = ImageFormat.Detect(inputFilter); PartitionType[] xmlFileSysInfo = null; try { if(!imageFormat.OpenImage(inputFilter)) imageFormat = null; } @@ -845,7 +823,7 @@ namespace DiscImageChef.Core.Devices.Dumping { if(!plugin.Identify(imageFormat, partitions[i])) continue; - plugin.GetInformation(imageFormat, partitions[i], out string foo); + plugin.GetInformation(imageFormat, partitions[i], out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); @@ -879,14 +857,14 @@ namespace DiscImageChef.Core.Devices.Dumping List lstFs = new List(); Partition wholePart = - new Partition {Name = "Whole device", Length = blocks, Size = blocks * blockSize}; + new Partition {Name = "Whole device", Length = blocks, Size = blocks * BLOCK_SIZE}; foreach(Filesystem plugin in plugins.PluginsList.Values) try { if(!plugin.Identify(imageFormat, wholePart)) continue; - plugin.GetInformation(imageFormat, wholePart, out string foo); + plugin.GetInformation(imageFormat, wholePart, out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); dumpLog.WriteLine("Filesystem {0} found.", plugin.XmlFSType.Type); @@ -932,7 +910,7 @@ namespace DiscImageChef.Core.Devices.Dumping sidecar.OpticalDisc[0].Track = new TrackType[1]; sidecar.OpticalDisc[0].Track[0] = new TrackType { - BytesPerSector = (int)blockSize, + BytesPerSector = (int)BLOCK_SIZE, Checksums = sidecar.OpticalDisc[0].Checksums, EndSector = (long)(blocks - 1), Image = @@ -944,7 +922,7 @@ namespace DiscImageChef.Core.Devices.Dumping Value = sidecar.OpticalDisc[0].Image.Value }, Sequence = new TrackSequenceType {Session = 1, TrackNumber = 1}, - Size = (long)(totalSize * blockSize), + Size = (long)(totalSize * BLOCK_SIZE), StartSector = 0 }; if(xmlFileSysInfo != null) sidecar.OpticalDisc[0].Track[0].FileSystemInformation = xmlFileSysInfo; diff --git a/DiscImageChef.Core/Devices/Reader.cs b/DiscImageChef.Core/Devices/Reader.cs index 21fc5232f..d7633715f 100644 --- a/DiscImageChef.Core/Devices/Reader.cs +++ b/DiscImageChef.Core/Devices/Reader.cs @@ -42,7 +42,7 @@ namespace DiscImageChef.Core.Devices uint timeout; internal string ErrorMessage { get; private set; } - internal ulong Blocks { get; set; } + internal ulong Blocks { get; private set; } internal uint BlocksToRead { get; private set; } internal uint LogicalBlockSize { get; private set; } internal uint PhysicalBlockSize { get; private set; } @@ -50,11 +50,11 @@ namespace DiscImageChef.Core.Devices internal bool CanReadRaw { get; private set; } internal bool CanSeek { - get { return ataSeek || seek6 || seek10; } + get => ataSeek || seek6 || seek10; } internal bool CanSeekLba { - get { return ataSeekLba || seek6 || seek10; } + get => ataSeekLba || seek6 || seek10; } internal Reader(Device dev, uint timeout, byte[] identification, bool raw = false) diff --git a/DiscImageChef.Core/Devices/ReaderATA.cs b/DiscImageChef.Core/Devices/ReaderATA.cs index bc285e138..7c69ffd89 100644 --- a/DiscImageChef.Core/Devices/ReaderATA.cs +++ b/DiscImageChef.Core/Devices/ReaderATA.cs @@ -103,39 +103,32 @@ namespace DiscImageChef.Core.Devices bool AtaFindReadCommand() { - byte[] cmdBuf; - bool sense; - AtaErrorRegistersCHS errorChs; - AtaErrorRegistersLBA28 errorLba; - AtaErrorRegistersLBA48 errorLba48; - double duration; - - sense = dev.Read(out cmdBuf, out errorChs, false, 0, 0, 1, 1, timeout, out duration); + bool sense = dev.Read(out byte[] cmdBuf, out AtaErrorRegistersCHS errorChs, false, 0, 0, 1, 1, timeout, out _); ataRead = !sense && (errorChs.status & 0x27) == 0 && errorChs.error == 0 && cmdBuf.Length > 0; - sense = dev.Read(out cmdBuf, out errorChs, true, 0, 0, 1, 1, timeout, out duration); + sense = dev.Read(out cmdBuf, out errorChs, true, 0, 0, 1, 1, timeout, out _); ataReadRetry = !sense && (errorChs.status & 0x27) == 0 && errorChs.error == 0 && cmdBuf.Length > 0; - sense = dev.ReadDma(out cmdBuf, out errorChs, false, 0, 0, 1, 1, timeout, out duration); + sense = dev.ReadDma(out cmdBuf, out errorChs, false, 0, 0, 1, 1, timeout, out _); ataReadDma = !sense && (errorChs.status & 0x27) == 0 && errorChs.error == 0 && cmdBuf.Length > 0; - sense = dev.ReadDma(out cmdBuf, out errorChs, true, 0, 0, 1, 1, timeout, out duration); + sense = dev.ReadDma(out cmdBuf, out errorChs, true, 0, 0, 1, 1, timeout, out _); ataReadDmaRetry = !sense && (errorChs.status & 0x27) == 0 && errorChs.error == 0 && cmdBuf.Length > 0; - sense = dev.Read(out cmdBuf, out errorLba, false, 0, 1, timeout, out duration); + sense = dev.Read(out cmdBuf, out AtaErrorRegistersLBA28 errorLba, false, 0, 1, timeout, out _); ataReadLba = !sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0; - sense = dev.Read(out cmdBuf, out errorLba, true, 0, 1, timeout, out duration); + sense = dev.Read(out cmdBuf, out errorLba, true, 0, 1, timeout, out _); ataReadRetryLba = !sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0; - sense = dev.ReadDma(out cmdBuf, out errorLba, false, 0, 1, timeout, out duration); + sense = dev.ReadDma(out cmdBuf, out errorLba, false, 0, 1, timeout, out _); ataReadDmaLba = !sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0; - sense = dev.ReadDma(out cmdBuf, out errorLba, true, 0, 1, timeout, out duration); + sense = dev.ReadDma(out cmdBuf, out errorLba, true, 0, 1, timeout, out _); ataReadDmaRetryLba = !sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0; - sense = dev.Read(out cmdBuf, out errorLba48, 0, 1, timeout, out duration); + sense = dev.Read(out cmdBuf, out AtaErrorRegistersLBA48 errorLba48, 0, 1, timeout, out _); ataReadLba48 = !sense && (errorLba48.status & 0x27) == 0 && errorLba48.error == 0 && cmdBuf.Length > 0; - sense = dev.ReadDma(out cmdBuf, out errorLba48, 0, 1, timeout, out duration); + sense = dev.ReadDma(out cmdBuf, out errorLba48, 0, 1, timeout, out _); ataReadDmaLba48 = !sense && (errorLba48.status & 0x27) == 0 && errorLba48.error == 0 && cmdBuf.Length > 0; - sense = dev.Seek(out errorChs, 0, 0, 1, timeout, out duration); + sense = dev.Seek(out errorChs, 0, 0, 1, timeout, out _); ataSeek = !sense && (errorChs.status & 0x27) == 0 && errorChs.error == 0; - sense = dev.Seek(out errorLba, 0, timeout, out duration); + sense = dev.Seek(out errorLba, 0, timeout, out _); ataSeekLba = !sense && (errorLba.status & 0x27) == 0 && errorChs.error == 0; if(IsLba) @@ -217,44 +210,46 @@ namespace DiscImageChef.Core.Devices return false; } - byte[] cmdBuf; - bool sense; - AtaErrorRegistersLBA28 errorLba; - AtaErrorRegistersLBA48 errorLba48; - double duration; bool error = true; while(IsLba) { + byte[] cmdBuf; + bool sense; + AtaErrorRegistersLBA48 errorLba48; if(ataReadDmaLba48) { - sense = dev.ReadDma(out cmdBuf, out errorLba48, 0, (byte)BlocksToRead, timeout, out duration); + sense = dev.ReadDma(out cmdBuf, out errorLba48, 0, (byte)BlocksToRead, timeout, out _); error = !(!sense && (errorLba48.status & 0x27) == 0 && errorLba48.error == 0 && cmdBuf.Length > 0); } else if(ataReadLba48) { - sense = dev.Read(out cmdBuf, out errorLba48, 0, (byte)BlocksToRead, timeout, out duration); + sense = dev.Read(out cmdBuf, out errorLba48, 0, (byte)BlocksToRead, timeout, out _); error = !(!sense && (errorLba48.status & 0x27) == 0 && errorLba48.error == 0 && cmdBuf.Length > 0); } - else if(ataReadDmaRetryLba) + else { - sense = dev.ReadDma(out cmdBuf, out errorLba, true, 0, (byte)BlocksToRead, timeout, out duration); - error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); - } - else if(ataReadDmaLba) - { - sense = dev.ReadDma(out cmdBuf, out errorLba, false, 0, (byte)BlocksToRead, timeout, out duration); - error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); - } - else if(ataReadRetryLba) - { - sense = dev.Read(out cmdBuf, out errorLba, true, 0, (byte)BlocksToRead, timeout, out duration); - error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); - } - else if(ataReadLba) - { - sense = dev.Read(out cmdBuf, out errorLba, false, 0, (byte)BlocksToRead, timeout, out duration); - error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); + AtaErrorRegistersLBA28 errorLba; + if(ataReadDmaRetryLba) + { + sense = dev.ReadDma(out cmdBuf, out errorLba, true, 0, (byte)BlocksToRead, timeout, out _); + error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); + } + else if(ataReadDmaLba) + { + sense = dev.ReadDma(out cmdBuf, out errorLba, false, 0, (byte)BlocksToRead, timeout, out _); + error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); + } + else if(ataReadRetryLba) + { + sense = dev.Read(out cmdBuf, out errorLba, true, 0, (byte)BlocksToRead, timeout, out _); + error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); + } + else if(ataReadLba) + { + sense = dev.Read(out cmdBuf, out errorLba, false, 0, (byte)BlocksToRead, timeout, out _); + error = !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0 && cmdBuf.Length > 0); + } } if(error) BlocksToRead /= 2; @@ -372,17 +367,13 @@ namespace DiscImageChef.Core.Devices bool AtaSeek(ulong block, out double duration) { - AtaErrorRegistersLBA28 errorLba; - - bool sense = dev.Seek(out errorLba, (uint)block, timeout, out duration); + bool sense = dev.Seek(out AtaErrorRegistersLBA28 errorLba, (uint)block, timeout, out duration); return !(!sense && (errorLba.status & 0x27) == 0 && errorLba.error == 0); } bool AtaSeekChs(ushort cylinder, byte head, byte sector, out double duration) { - AtaErrorRegistersCHS errorChs; - - bool sense = dev.Seek(out errorChs, cylinder, head, sector, timeout, out duration); + bool sense = dev.Seek(out AtaErrorRegistersCHS errorChs, cylinder, head, sector, timeout, out duration); return !(!sense && (errorChs.status & 0x27) == 0 && errorChs.error == 0); } } diff --git a/DiscImageChef.Core/Devices/ReaderSCSI.cs b/DiscImageChef.Core/Devices/ReaderSCSI.cs index 5dc5905e3..33a18fdc6 100644 --- a/DiscImageChef.Core/Devices/ReaderSCSI.cs +++ b/DiscImageChef.Core/Devices/ReaderSCSI.cs @@ -60,24 +60,20 @@ namespace DiscImageChef.Core.Devices bool ScsiFindReadCommand() { - byte[] readBuffer; - byte[] senseBuf; - double duration; + read6 = !dev.Read6(out _, out byte[] senseBuf, 0, LogicalBlockSize, timeout, out _); - read6 = !dev.Read6(out readBuffer, out senseBuf, 0, LogicalBlockSize, timeout, out duration); + read10 = !dev.Read10(out _, out senseBuf, 0, false, true, false, false, 0, LogicalBlockSize, 0, 1, + timeout, out _); - read10 = !dev.Read10(out readBuffer, out senseBuf, 0, false, true, false, false, 0, LogicalBlockSize, 0, 1, - timeout, out duration); + read12 = !dev.Read12(out _, out senseBuf, 0, false, true, false, false, 0, LogicalBlockSize, 0, 1, false, + timeout, out _); - read12 = !dev.Read12(out readBuffer, out senseBuf, 0, false, true, false, false, 0, LogicalBlockSize, 0, 1, false, - timeout, out duration); + read16 = !dev.Read16(out _, out senseBuf, 0, false, true, false, 0, LogicalBlockSize, 0, 1, false, + timeout, out _); - read16 = !dev.Read16(out readBuffer, out senseBuf, 0, false, true, false, 0, LogicalBlockSize, 0, 1, false, - timeout, out duration); + seek6 = !dev.Seek6(out senseBuf, 0, timeout, out _); - seek6 = !dev.Seek6(out senseBuf, 0, timeout, out duration); - - seek10 = !dev.Seek10(out senseBuf, 0, timeout, out duration); + seek10 = !dev.Seek10(out senseBuf, 0, timeout, out _); if(!read6 && !read10 && !read12 && !read16) { @@ -102,7 +98,6 @@ namespace DiscImageChef.Core.Devices if(CanReadRaw) { bool testSense; - FixedSense? decSense; CanReadRaw = false; if(dev.ScsiType != PeripheralDeviceTypes.MultiMediaDevice) @@ -126,8 +121,9 @@ namespace DiscImageChef.Core.Devices } }*/ - testSense = dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, 0xFFFF, timeout, - out duration); + testSense = dev.ReadLong10(out _, out senseBuf, false, false, 0, 0xFFFF, timeout, + out _); + FixedSense? decSense; if(testSense && !dev.Error) { decSense = Sense.DecodeFixed(senseBuf); @@ -139,8 +135,8 @@ namespace DiscImageChef.Core.Devices if(decSense.Value.InformationValid && decSense.Value.ILI) { LongBlockSize = 0xFFFF - (decSense.Value.Information & 0xFFFF); - readLong10 = !dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, - (ushort)LongBlockSize, timeout, out duration); + readLong10 = !dev.ReadLong10(out _, out senseBuf, false, false, 0, + (ushort)LongBlockSize, timeout, out _); } } } @@ -157,8 +153,8 @@ namespace DiscImageChef.Core.Devices 600, 610, 630 }) { - testSense = dev.ReadLong16(out readBuffer, out senseBuf, false, 0, testSize, timeout, - out duration); + testSense = dev.ReadLong16(out _, out senseBuf, false, 0, testSize, timeout, + out _); if(!testSense && !dev.Error) { readLong16 = true; @@ -167,8 +163,8 @@ namespace DiscImageChef.Core.Devices break; } - testSense = dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, testSize, - timeout, out duration); + testSense = dev.ReadLong10(out _, out senseBuf, false, false, 0, testSize, + timeout, out _); if(testSense || dev.Error) continue; readLong10 = true; @@ -185,8 +181,8 @@ namespace DiscImageChef.Core.Devices 1200 }) { - testSense = dev.ReadLong16(out readBuffer, out senseBuf, false, 0, testSize, timeout, - out duration); + testSense = dev.ReadLong16(out _, out senseBuf, false, 0, testSize, timeout, + out _); if(!testSense && !dev.Error) { readLong16 = true; @@ -195,8 +191,8 @@ namespace DiscImageChef.Core.Devices break; } - testSense = dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, testSize, - timeout, out duration); + testSense = dev.ReadLong10(out _, out senseBuf, false, false, 0, testSize, + timeout, out _); if(testSense || dev.Error) continue; readLong10 = true; @@ -206,8 +202,8 @@ namespace DiscImageChef.Core.Devices } else if(LogicalBlockSize == 2048) { - testSense = dev.ReadLong16(out readBuffer, out senseBuf, false, 0, 2380, timeout, - out duration); + testSense = dev.ReadLong16(out _, out senseBuf, false, 0, 2380, timeout, + out _); if(!testSense && !dev.Error) { readLong16 = true; @@ -216,8 +212,8 @@ namespace DiscImageChef.Core.Devices } else { - testSense = dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, 2380, timeout, - out duration); + testSense = dev.ReadLong10(out _, out senseBuf, false, false, 0, 2380, timeout, + out _); if(!testSense && !dev.Error) { readLong10 = true; @@ -228,8 +224,8 @@ namespace DiscImageChef.Core.Devices } else if(LogicalBlockSize == 4096) { - testSense = dev.ReadLong16(out readBuffer, out senseBuf, false, 0, 4760, timeout, - out duration); + testSense = dev.ReadLong16(out _, out senseBuf, false, 0, 4760, timeout, + out _); if(!testSense && !dev.Error) { readLong16 = true; @@ -238,8 +234,8 @@ namespace DiscImageChef.Core.Devices } else { - testSense = dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, 4760, timeout, - out duration); + testSense = dev.ReadLong10(out _, out senseBuf, false, false, 0, 4760, timeout, + out _); if(!testSense && !dev.Error) { readLong10 = true; @@ -250,8 +246,8 @@ namespace DiscImageChef.Core.Devices } else if(LogicalBlockSize == 8192) { - testSense = dev.ReadLong16(out readBuffer, out senseBuf, false, 0, 9424, timeout, - out duration); + testSense = dev.ReadLong16(out _, out senseBuf, false, 0, 9424, timeout, + out _); if(!testSense && !dev.Error) { readLong16 = true; @@ -260,8 +256,8 @@ namespace DiscImageChef.Core.Devices } else { - testSense = dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, 9424, timeout, - out duration); + testSense = dev.ReadLong10(out _, out senseBuf, false, false, 0, 9424, timeout, + out _); if(!testSense && !dev.Error) { readLong10 = true; @@ -273,8 +269,8 @@ namespace DiscImageChef.Core.Devices if(!CanReadRaw && dev.Manufacturer == "SYQUEST") { - testSense = dev.SyQuestReadLong10(out readBuffer, out senseBuf, 0, 0xFFFF, timeout, - out duration); + testSense = dev.SyQuestReadLong10(out _, out senseBuf, 0, 0xFFFF, timeout, + out _); if(testSense) { decSense = Sense.DecodeFixed(senseBuf); @@ -287,14 +283,14 @@ namespace DiscImageChef.Core.Devices { LongBlockSize = 0xFFFF - (decSense.Value.Information & 0xFFFF); syqReadLong10 = - !dev.SyQuestReadLong10(out readBuffer, out senseBuf, 0, LongBlockSize, - timeout, out duration); + !dev.SyQuestReadLong10(out _, out senseBuf, 0, LongBlockSize, + timeout, out _); } } else { - testSense = dev.SyQuestReadLong6(out readBuffer, out senseBuf, 0, 0xFFFF, timeout, - out duration); + testSense = dev.SyQuestReadLong6(out _, out senseBuf, 0, 0xFFFF, timeout, + out _); if(testSense) { decSense = Sense.DecodeFixed(senseBuf); @@ -307,8 +303,8 @@ namespace DiscImageChef.Core.Devices { LongBlockSize = 0xFFFF - (decSense.Value.Information & 0xFFFF); syqReadLong6 = - !dev.SyQuestReadLong6(out readBuffer, out senseBuf, 0, - LongBlockSize, timeout, out duration); + !dev.SyQuestReadLong6(out _, out senseBuf, 0, + LongBlockSize, timeout, out _); } } } @@ -317,8 +313,8 @@ namespace DiscImageChef.Core.Devices if(!CanReadRaw && LogicalBlockSize == 256) { - testSense = dev.SyQuestReadLong6(out readBuffer, out senseBuf, 0, 262, timeout, - out duration); + testSense = dev.SyQuestReadLong6(out _, out senseBuf, 0, 262, timeout, + out _); if(!testSense && !dev.Error) { syqReadLong6 = true; @@ -333,11 +329,11 @@ namespace DiscImageChef.Core.Devices switch(dev.Manufacturer) { case "HL-DT-ST": hldtstReadRaw = - !dev.HlDtStReadRawDvd(out readBuffer, out senseBuf, 0, 1, timeout, out duration); + !dev.HlDtStReadRawDvd(out _, out senseBuf, 0, 1, timeout, out _); break; case "PLEXTOR": plextorReadRaw = - !dev.PlextorReadRawDvd(out readBuffer, out senseBuf, 0, 1, timeout, out duration); + !dev.PlextorReadRawDvd(out _, out senseBuf, 0, 1, timeout, out _); break; } @@ -350,8 +346,8 @@ namespace DiscImageChef.Core.Devices // READ LONG (10) for some DVD drives if(!CanReadRaw && dev.Manufacturer == "MATSHITA") { - testSense = dev.ReadLong10(out readBuffer, out senseBuf, false, false, 0, 37856, timeout, - out duration); + testSense = dev.ReadLong10(out _, out senseBuf, false, false, 0, 37856, timeout, + out _); if(!testSense && !dev.Error) { readLongDvd = true; @@ -382,12 +378,9 @@ namespace DiscImageChef.Core.Devices bool ScsiGetBlockSize() { bool sense; - byte[] cmdBuf; - byte[] senseBuf; - double duration; Blocks = 0; - sense = dev.ReadCapacity(out cmdBuf, out senseBuf, timeout, out duration); + sense = dev.ReadCapacity(out byte[] cmdBuf, out byte[] senseBuf, timeout, out _); if(!sense) { Blocks = (ulong)((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); @@ -396,7 +389,7 @@ namespace DiscImageChef.Core.Devices if(sense || Blocks == 0xFFFFFFFF) { - sense = dev.ReadCapacity16(out cmdBuf, out senseBuf, timeout, out duration); + sense = dev.ReadCapacity16(out cmdBuf, out senseBuf, timeout, out _); if(sense && Blocks == 0) if(dev.ScsiType != PeripheralDeviceTypes.MultiMediaDevice) @@ -424,35 +417,32 @@ namespace DiscImageChef.Core.Devices bool ScsiGetBlocksToRead(uint startWithBlocks) { - byte[] readBuffer; - byte[] senseBuf; - double duration; BlocksToRead = startWithBlocks; while(true) { if(read16) { - dev.Read16(out readBuffer, out senseBuf, 0, false, true, false, 0, LogicalBlockSize, 0, - BlocksToRead, false, timeout, out duration); + dev.Read16(out _, out _, 0, false, true, false, 0, LogicalBlockSize, 0, + BlocksToRead, false, timeout, out _); if(dev.Error) BlocksToRead /= 2; } else if(read12) { - dev.Read12(out readBuffer, out senseBuf, 0, false, false, false, false, 0, LogicalBlockSize, 0, - BlocksToRead, false, timeout, out duration); + dev.Read12(out _, out _, 0, false, false, false, false, 0, LogicalBlockSize, 0, + BlocksToRead, false, timeout, out _); if(dev.Error) BlocksToRead /= 2; } else if(read10) { - dev.Read10(out readBuffer, out senseBuf, 0, false, true, false, false, 0, LogicalBlockSize, 0, - (ushort)BlocksToRead, timeout, out duration); + dev.Read10(out _, out _, 0, false, true, false, false, 0, LogicalBlockSize, 0, + (ushort)BlocksToRead, timeout, out _); if(dev.Error) BlocksToRead /= 2; } else if(read6) { - dev.Read6(out readBuffer, out senseBuf, 0, LogicalBlockSize, (byte)BlocksToRead, timeout, - out duration); + dev.Read6(out _, out _, 0, LogicalBlockSize, (byte)BlocksToRead, timeout, + out _); if(dev.Error) BlocksToRead /= 2; } @@ -468,8 +458,8 @@ namespace DiscImageChef.Core.Devices bool ScsiReadBlocks(out byte[] buffer, ulong block, uint count, out double duration) { - bool sense = false; - byte[] senseBuf = null; + bool sense; + byte[] senseBuf; buffer = null; duration = 0; @@ -519,12 +509,11 @@ namespace DiscImageChef.Core.Devices bool ScsiSeek(ulong block, out double duration) { - byte[] senseBuf; bool sense = true; duration = 0; - if(seek6) sense = dev.Seek6(out senseBuf, (uint)block, timeout, out duration); - else if(seek10) sense = dev.Seek10(out senseBuf, (uint)block, timeout, out duration); + if(seek6) sense = dev.Seek6(out _, (uint)block, timeout, out duration); + else if(seek10) sense = dev.Seek10(out _, (uint)block, timeout, out duration); return sense; } diff --git a/DiscImageChef.Core/Devices/Report/ATA.cs b/DiscImageChef.Core/Devices/Report/ATA.cs index a6d9d97ba..b559b1aad 100644 --- a/DiscImageChef.Core/Devices/Report/ATA.cs +++ b/DiscImageChef.Core/Devices/Report/ATA.cs @@ -45,21 +45,17 @@ namespace DiscImageChef.Core.Devices.Report { if(report == null) return; - AtaErrorRegistersCHS errorRegs; - byte[] buffer; - double duration; - uint timeout = 5; - ConsoleKeyInfo pressedKey; + const uint TIMEOUT = 5; if(dev.IsUsb) Usb.Report(dev, ref report, debug, ref removable); - if(dev.IsFireWire) FireWire.Report(dev, ref report, debug, ref removable); + if(dev.IsFireWire) FireWire.Report(dev, ref report, ref removable); - if(dev.IsPcmcia) Pcmcia.Report(dev, ref report, debug, ref removable); + if(dev.IsPcmcia) Pcmcia.Report(dev, ref report); DicConsole.WriteLine("Querying ATA IDENTIFY..."); - dev.AtaIdentify(out buffer, out errorRegs, timeout, out duration); + dev.AtaIdentify(out byte[] buffer, out _, TIMEOUT, out _); if(!Identify.Decode(buffer).HasValue) return; @@ -67,6 +63,7 @@ namespace DiscImageChef.Core.Devices.Report if(ataIdNullable != null) { Identify.IdentifyDevice ataId = ataIdNullable.Value; + ConsoleKeyInfo pressedKey; if((ushort)ataId.GeneralConfiguration == 0x848A) { report.CompactFlash = true; @@ -92,7 +89,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Please remove any media from the device and press any key when it is out."); System.Console.ReadKey(true); DicConsole.WriteLine("Querying ATA IDENTIFY..."); - dev.AtaIdentify(out buffer, out errorRegs, timeout, out duration); + dev.AtaIdentify(out buffer, out _, TIMEOUT, out _); ataId = Identify.Decode(buffer).Value; } @@ -521,7 +518,7 @@ namespace DiscImageChef.Core.Devices.Report mediaTest.MediaIsRecognized = true; DicConsole.WriteLine("Querying ATA IDENTIFY..."); - dev.AtaIdentify(out buffer, out errorRegs, timeout, out duration); + dev.AtaIdentify(out buffer, out _, TIMEOUT, out _); if(Identify.Decode(buffer).HasValue) { @@ -540,10 +537,12 @@ namespace DiscImageChef.Core.Devices.Report if(ataId.Cylinders > 0 && ataId.Heads > 0 && ataId.SectorsPerTrack > 0) { - mediaTest.CHS = new chsType(); - mediaTest.CHS.Cylinders = ataId.Cylinders; - mediaTest.CHS.Heads = ataId.Heads; - mediaTest.CHS.Sectors = ataId.SectorsPerTrack; + mediaTest.CHS = new chsType + { + Cylinders = ataId.Cylinders, + Heads = ataId.Heads, + Sectors = ataId.SectorsPerTrack + }; mediaTest.Blocks = (ulong)(ataId.Cylinders * ataId.Heads * ataId.SectorsPerTrack); mediaTest.BlocksSpecified = true; } @@ -551,10 +550,12 @@ namespace DiscImageChef.Core.Devices.Report if(ataId.CurrentCylinders > 0 && ataId.CurrentHeads > 0 && ataId.CurrentSectorsPerTrack > 0) { - mediaTest.CurrentCHS = new chsType(); - mediaTest.CurrentCHS.Cylinders = ataId.CurrentCylinders; - mediaTest.CurrentCHS.Heads = ataId.CurrentHeads; - mediaTest.CurrentCHS.Sectors = ataId.CurrentSectorsPerTrack; + mediaTest.CurrentCHS = new chsType + { + Cylinders = ataId.CurrentCylinders, + Heads = ataId.CurrentHeads, + Sectors = ataId.CurrentSectorsPerTrack + }; if(mediaTest.Blocks == 0) mediaTest.Blocks = (ulong)(ataId.CurrentCylinders * ataId.CurrentHeads * @@ -676,16 +677,11 @@ namespace DiscImageChef.Core.Devices.Report mediaTest.SupportsReadLongRetrySpecified = true; mediaTest.SupportsSeekSpecified = true; - AtaErrorRegistersCHS errorChs; - AtaErrorRegistersLBA28 errorLba; - AtaErrorRegistersLBA48 errorLba48; - - byte[] readBuf; ulong checkCorrectRead = BitConverter.ToUInt64(buffer, 0); bool sense; DicConsole.WriteLine("Trying READ SECTOR(S) in CHS mode..."); - sense = dev.Read(out readBuf, out errorChs, false, 0, 0, 1, 1, timeout, out duration); + sense = dev.Read(out byte[] readBuf, out AtaErrorRegistersCHS errorChs, false, 0, 0, 1, 1, TIMEOUT, out _); mediaTest.SupportsRead = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; @@ -698,7 +694,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ SECTOR(S) RETRY in CHS mode..."); - sense = dev.Read(out readBuf, out errorChs, true, 0, 0, 1, 1, timeout, out duration); + sense = dev.Read(out readBuf, out errorChs, true, 0, 0, 1, 1, TIMEOUT, out _); mediaTest.SupportsReadRetry = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; @@ -711,8 +707,8 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ DMA in CHS mode..."); - sense = dev.ReadDma(out readBuf, out errorChs, false, 0, 0, 1, 1, timeout, - out duration); + sense = dev.ReadDma(out readBuf, out errorChs, false, 0, 0, 1, 1, TIMEOUT, + out _); mediaTest.SupportsReadDma = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; @@ -725,7 +721,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ DMA RETRY in CHS mode..."); - sense = dev.ReadDma(out readBuf, out errorChs, true, 0, 0, 1, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorChs, true, 0, 0, 1, 1, TIMEOUT, out _); mediaTest.SupportsReadDmaRetry = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; @@ -738,7 +734,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying SEEK in CHS mode..."); - sense = dev.Seek(out errorChs, 0, 0, 1, timeout, out duration); + sense = dev.Seek(out errorChs, 0, 0, 1, TIMEOUT, out _); mediaTest.SupportsSeek = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0; DicConsole.DebugWriteLine("ATA Report", @@ -746,7 +742,7 @@ namespace DiscImageChef.Core.Devices.Report errorChs.status, errorChs.error); DicConsole.WriteLine("Trying READ SECTOR(S) in LBA mode..."); - sense = dev.Read(out readBuf, out errorLba, false, 0, 1, timeout, out duration); + sense = dev.Read(out readBuf, out AtaErrorRegistersLBA28 errorLba, false, 0, 1, TIMEOUT, out _); mediaTest.SupportsReadLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; @@ -759,7 +755,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ SECTOR(S) RETRY in LBA mode..."); - sense = dev.Read(out readBuf, out errorLba, true, 0, 1, timeout, out duration); + sense = dev.Read(out readBuf, out errorLba, true, 0, 1, TIMEOUT, out _); mediaTest.SupportsReadRetryLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; @@ -772,7 +768,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ DMA in LBA mode..."); - sense = dev.ReadDma(out readBuf, out errorLba, false, 0, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorLba, false, 0, 1, TIMEOUT, out _); mediaTest.SupportsReadDmaLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; @@ -785,7 +781,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ DMA RETRY in LBA mode..."); - sense = dev.ReadDma(out readBuf, out errorLba, true, 0, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorLba, true, 0, 1, TIMEOUT, out _); mediaTest.SupportsReadDmaRetryLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; @@ -798,7 +794,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying SEEK in LBA mode..."); - sense = dev.Seek(out errorLba, 0, timeout, out duration); + sense = dev.Seek(out errorLba, 0, TIMEOUT, out _); mediaTest.SupportsSeekLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0; DicConsole.DebugWriteLine("ATA Report", @@ -806,7 +802,7 @@ namespace DiscImageChef.Core.Devices.Report errorChs.status, errorChs.error); DicConsole.WriteLine("Trying READ SECTOR(S) in LBA48 mode..."); - sense = dev.Read(out readBuf, out errorLba48, 0, 1, timeout, out duration); + sense = dev.Read(out readBuf, out AtaErrorRegistersLBA48 errorLba48, 0, 1, TIMEOUT, out _); mediaTest.SupportsReadLba48 = !sense && (errorLba48.status & 0x01) != 0x01 && errorLba48.error == 0 && readBuf.Length > 0; @@ -819,7 +815,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ DMA in LBA48 mode..."); - sense = dev.ReadDma(out readBuf, out errorLba48, 0, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorLba48, 0, 1, TIMEOUT, out _); mediaTest.SupportsReadDmaLba48 = !sense && (errorLba48.status & 0x01) != 0x01 && errorLba48.error == 0 && readBuf.Length > 0; @@ -833,7 +829,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG in CHS mode..."); sense = dev.ReadLong(out readBuf, out errorChs, false, 0, 0, 1, mediaTest.LongBlockSize, - timeout, out duration); + TIMEOUT, out _); mediaTest.SupportsReadLong = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; @@ -847,7 +843,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG RETRY in CHS mode..."); sense = dev.ReadLong(out readBuf, out errorChs, true, 0, 0, 1, mediaTest.LongBlockSize, - timeout, out duration); + TIMEOUT, out _); mediaTest.SupportsReadLongRetry = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; @@ -861,7 +857,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG in LBA mode..."); sense = dev.ReadLong(out readBuf, out errorLba, false, 0, mediaTest.LongBlockSize, - timeout, out duration); + TIMEOUT, out _); mediaTest.SupportsReadLongLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; @@ -875,7 +871,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG RETRY in LBA mode..."); sense = dev.ReadLong(out readBuf, out errorLba, true, 0, mediaTest.LongBlockSize, - timeout, out duration); + TIMEOUT, out _); mediaTest.SupportsReadLongRetryLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; @@ -911,10 +907,12 @@ namespace DiscImageChef.Core.Devices.Report if(ataId.Cylinders > 0 && ataId.Heads > 0 && ataId.SectorsPerTrack > 0) { - report.ATA.ReadCapabilities.CHS = new chsType(); - report.ATA.ReadCapabilities.CHS.Cylinders = ataId.Cylinders; - report.ATA.ReadCapabilities.CHS.Heads = ataId.Heads; - report.ATA.ReadCapabilities.CHS.Sectors = ataId.SectorsPerTrack; + report.ATA.ReadCapabilities.CHS = new chsType + { + Cylinders = ataId.Cylinders, + Heads = ataId.Heads, + Sectors = ataId.SectorsPerTrack + }; report.ATA.ReadCapabilities.Blocks = (ulong)(ataId.Cylinders * ataId.Heads * ataId.SectorsPerTrack); report.ATA.ReadCapabilities.BlocksSpecified = true; @@ -922,10 +920,12 @@ namespace DiscImageChef.Core.Devices.Report if(ataId.CurrentCylinders > 0 && ataId.CurrentHeads > 0 && ataId.CurrentSectorsPerTrack > 0) { - report.ATA.ReadCapabilities.CurrentCHS = new chsType(); - report.ATA.ReadCapabilities.CurrentCHS.Cylinders = ataId.CurrentCylinders; - report.ATA.ReadCapabilities.CurrentCHS.Heads = ataId.CurrentHeads; - report.ATA.ReadCapabilities.CurrentCHS.Sectors = ataId.CurrentSectorsPerTrack; + report.ATA.ReadCapabilities.CurrentCHS = new chsType + { + Cylinders = ataId.CurrentCylinders, + Heads = ataId.CurrentHeads, + Sectors = ataId.CurrentSectorsPerTrack + }; report.ATA.ReadCapabilities.Blocks = (ulong)(ataId.CurrentCylinders * ataId.CurrentHeads * ataId.CurrentSectorsPerTrack); report.ATA.ReadCapabilities.BlocksSpecified = true; @@ -1044,16 +1044,11 @@ namespace DiscImageChef.Core.Devices.Report report.ATA.ReadCapabilities.SupportsReadLongRetrySpecified = true; report.ATA.ReadCapabilities.SupportsSeekSpecified = true; - AtaErrorRegistersCHS errorChs; - AtaErrorRegistersLBA28 errorLba; - AtaErrorRegistersLBA48 errorLba48; - - byte[] readBuf; ulong checkCorrectRead = BitConverter.ToUInt64(buffer, 0); bool sense; DicConsole.WriteLine("Trying READ SECTOR(S) in CHS mode..."); - sense = dev.Read(out readBuf, out errorChs, false, 0, 0, 1, 1, timeout, out duration); + sense = dev.Read(out byte[] readBuf, out AtaErrorRegistersCHS errorChs, false, 0, 0, 1, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsRead = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1064,7 +1059,7 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying READ SECTOR(S) RETRY in CHS mode..."); - sense = dev.Read(out readBuf, out errorChs, true, 0, 0, 1, 1, timeout, out duration); + sense = dev.Read(out readBuf, out errorChs, true, 0, 0, 1, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadRetry = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1075,7 +1070,7 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying READ DMA in CHS mode..."); - sense = dev.ReadDma(out readBuf, out errorChs, false, 0, 0, 1, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorChs, false, 0, 0, 1, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadDma = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1086,7 +1081,7 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying READ DMA RETRY in CHS mode..."); - sense = dev.ReadDma(out readBuf, out errorChs, true, 0, 0, 1, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorChs, true, 0, 0, 1, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadDmaRetry = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1097,14 +1092,14 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying SEEK in CHS mode..."); - sense = dev.Seek(out errorChs, 0, 0, 1, timeout, out duration); + sense = dev.Seek(out errorChs, 0, 0, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsSeek = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0; DicConsole.DebugWriteLine("ATA Report", "Sense = {0}, Status = 0x{1:X2}, Error = 0x{2:X2}", sense, errorChs.status, errorChs.error); DicConsole.WriteLine("Trying READ SECTOR(S) in LBA mode..."); - sense = dev.Read(out readBuf, out errorLba, false, 0, 1, timeout, out duration); + sense = dev.Read(out readBuf, out AtaErrorRegistersLBA28 errorLba, false, 0, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1115,7 +1110,7 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying READ SECTOR(S) RETRY in LBA mode..."); - sense = dev.Read(out readBuf, out errorLba, true, 0, 1, timeout, out duration); + sense = dev.Read(out readBuf, out errorLba, true, 0, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadRetryLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1126,7 +1121,7 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying READ DMA in LBA mode..."); - sense = dev.ReadDma(out readBuf, out errorLba, false, 0, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorLba, false, 0, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadDmaLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1137,7 +1132,7 @@ namespace DiscImageChef.Core.Devices.Report readBuf); DicConsole.WriteLine("Trying READ DMA RETRY in LBA mode..."); - sense = dev.ReadDma(out readBuf, out errorLba, true, 0, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorLba, true, 0, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadDmaRetryLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1148,14 +1143,14 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying SEEK in LBA mode..."); - sense = dev.Seek(out errorLba, 0, timeout, out duration); + sense = dev.Seek(out errorLba, 0, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsSeekLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0; DicConsole.DebugWriteLine("ATA Report", "Sense = {0}, Status = 0x{1:X2}, Error = 0x{2:X2}", sense, errorLba.status, errorLba.error); DicConsole.WriteLine("Trying READ SECTOR(S) in LBA48 mode..."); - sense = dev.Read(out readBuf, out errorLba48, 0, 1, timeout, out duration); + sense = dev.Read(out readBuf, out AtaErrorRegistersLBA48 errorLba48, 0, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadLba48 = !sense && (errorLba48.status & 0x01) != 0x01 && errorLba48.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1166,7 +1161,7 @@ namespace DiscImageChef.Core.Devices.Report "read results", readBuf); DicConsole.WriteLine("Trying READ DMA in LBA48 mode..."); - sense = dev.ReadDma(out readBuf, out errorLba48, 0, 1, timeout, out duration); + sense = dev.ReadDma(out readBuf, out errorLba48, 0, 1, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadDmaLba48 = !sense && (errorLba48.status & 0x01) != 0x01 && errorLba48.error == 0 && readBuf.Length > 0; DicConsole.DebugWriteLine("ATA Report", @@ -1178,7 +1173,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG in CHS mode..."); sense = dev.ReadLong(out readBuf, out errorChs, false, 0, 0, 1, - report.ATA.ReadCapabilities.LongBlockSize, timeout, out duration); + report.ATA.ReadCapabilities.LongBlockSize, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadLong = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; @@ -1191,7 +1186,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG RETRY in CHS mode..."); sense = dev.ReadLong(out readBuf, out errorChs, true, 0, 0, 1, - report.ATA.ReadCapabilities.LongBlockSize, timeout, out duration); + report.ATA.ReadCapabilities.LongBlockSize, TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadLongRetry = !sense && (errorChs.status & 0x01) != 0x01 && errorChs.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; @@ -1204,7 +1199,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG in LBA mode..."); sense = dev.ReadLong(out readBuf, out errorLba, false, 0, report.ATA.ReadCapabilities.LongBlockSize, - timeout, out duration); + TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadLongLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; @@ -1217,7 +1212,7 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Trying READ LONG RETRY in LBA mode..."); sense = dev.ReadLong(out readBuf, out errorLba, true, 0, report.ATA.ReadCapabilities.LongBlockSize, - timeout, out duration); + TIMEOUT, out _); report.ATA.ReadCapabilities.SupportsReadLongRetryLba = !sense && (errorLba.status & 0x01) != 0x01 && errorLba.error == 0 && readBuf.Length > 0 && BitConverter.ToUInt64(readBuf, 0) != checkCorrectRead; diff --git a/DiscImageChef.Core/Devices/Report/ATAPI.cs b/DiscImageChef.Core/Devices/Report/ATAPI.cs index 6e12c580f..379917712 100644 --- a/DiscImageChef.Core/Devices/Report/ATAPI.cs +++ b/DiscImageChef.Core/Devices/Report/ATAPI.cs @@ -43,14 +43,11 @@ namespace DiscImageChef.Core.Devices.Report { if(report == null) return; - byte[] buffer; - double duration; - uint timeout = 5; + const uint TIMEOUT = 5; DicConsole.WriteLine("Querying ATAPI IDENTIFY..."); - AtaErrorRegistersCHS errorRegs; - dev.AtapiIdentify(out buffer, out errorRegs, timeout, out duration); + dev.AtapiIdentify(out byte[] buffer, out _, TIMEOUT, out _); if(!Identify.Decode(buffer).HasValue) return; diff --git a/DiscImageChef.Core/Devices/Report/FireWire.cs b/DiscImageChef.Core/Devices/Report/FireWire.cs index 3c5347b09..bf7658855 100644 --- a/DiscImageChef.Core/Devices/Report/FireWire.cs +++ b/DiscImageChef.Core/Devices/Report/FireWire.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Core.Devices.Report { static class FireWire { - internal static void Report(Device dev, ref DeviceReport report, bool debug, ref bool removable) + internal static void Report(Device dev, ref DeviceReport report, ref bool removable) { if(report == null) return; @@ -53,11 +53,13 @@ namespace DiscImageChef.Core.Devices.Report if(pressedKey.Key != ConsoleKey.Y) return; - report.FireWire = new firewireType(); - report.FireWire.Manufacturer = dev.FireWireVendorName; - report.FireWire.Product = dev.FireWireModelName; - report.FireWire.ProductID = dev.FireWireModel; - report.FireWire.VendorID = dev.FireWireVendor; + report.FireWire = new firewireType + { + Manufacturer = dev.FireWireVendorName, + Product = dev.FireWireModelName, + ProductID = dev.FireWireModel, + VendorID = dev.FireWireVendor + }; pressedKey = new ConsoleKeyInfo(); while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) diff --git a/DiscImageChef.Core/Devices/Report/PCMCIA.cs b/DiscImageChef.Core/Devices/Report/PCMCIA.cs index 8625d9063..791ef8b0d 100644 --- a/DiscImageChef.Core/Devices/Report/PCMCIA.cs +++ b/DiscImageChef.Core/Devices/Report/PCMCIA.cs @@ -38,10 +38,9 @@ namespace DiscImageChef.Core.Devices.Report { static class Pcmcia { - internal static void Report(Device dev, ref DeviceReport report, bool debug, ref bool removable) + internal static void Report(Device dev, ref DeviceReport report) { - report.PCMCIA = new pcmciaType(); - report.PCMCIA.CIS = dev.Cis; + report.PCMCIA = new pcmciaType {CIS = dev.Cis}; Tuple[] tuples = CIS.GetTuples(dev.Cis); if(tuples == null) return; diff --git a/DiscImageChef.Core/Devices/Report/SCSI/General.cs b/DiscImageChef.Core/Devices/Report/SCSI/General.cs index 1549aa5d4..b81a739a1 100644 --- a/DiscImageChef.Core/Devices/Report/SCSI/General.cs +++ b/DiscImageChef.Core/Devices/Report/SCSI/General.cs @@ -48,18 +48,15 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { if(report == null) return; - byte[] senseBuffer; - byte[] buffer; - double duration; bool sense; - uint timeout = 5; + const uint TIMEOUT = 5; ConsoleKeyInfo pressedKey; if(dev.IsUsb) Usb.Report(dev, ref report, debug, ref removable); - if(dev.IsFireWire) FireWire.Report(dev, ref report, debug, ref removable); + if(dev.IsFireWire) FireWire.Report(dev, ref report, ref removable); - if(dev.IsPcmcia) Pcmcia.Report(dev, ref report, debug, ref removable); + if(dev.IsPcmcia) Pcmcia.Report(dev, ref report); if(!dev.IsUsb && !dev.IsFireWire && dev.IsRemovable) { @@ -77,7 +74,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(dev.Type == DeviceType.ATAPI) Atapi.Report(dev, ref report, debug, ref removable); DicConsole.WriteLine("Querying SCSI INQUIRY..."); - sense = dev.ScsiInquiry(out buffer, out senseBuffer); + sense = dev.ScsiInquiry(out byte[] buffer, out byte[] senseBuffer); report.SCSI = new scsiType(); @@ -192,9 +189,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI sense = dev.ScsiInquiry(out buffer, out senseBuffer, page); if(sense) continue; - pageType evpd = new pageType(); - evpd.page = page; - evpd.value = buffer; + pageType evpd = new pageType {page = page, value = buffer}; evpds.Add(evpd); } @@ -206,15 +201,16 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { switch(dev.ScsiType) { case PeripheralDeviceTypes.MultiMediaDevice: - dev.AllowMediumRemoval(out senseBuffer, timeout, out duration); - dev.EjectTray(out senseBuffer, timeout, out duration); + dev.AllowMediumRemoval(out senseBuffer, TIMEOUT, out _); + dev.EjectTray(out senseBuffer, TIMEOUT, out _); break; case PeripheralDeviceTypes.SequentialAccess: - dev.SpcAllowMediumRemoval(out senseBuffer, timeout, out duration); + dev.SpcAllowMediumRemoval(out senseBuffer, TIMEOUT, out _); DicConsole.WriteLine("Asking drive to unload tape (can take a few minutes)..."); - dev.Unload(out senseBuffer, timeout, out duration); + dev.Unload(out senseBuffer, TIMEOUT, out _); break; } + DicConsole.WriteLine("Please remove any media from the device and press any key when it is out."); System.Console.ReadKey(true); } @@ -224,12 +220,12 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (10)..."); sense = dev.ModeSense10(out byte[] mode10Buffer, out senseBuffer, false, true, - ScsiModeSensePageControl.Default, 0x3F, 0xFF, timeout, out duration); + ScsiModeSensePageControl.Default, 0x3F, 0xFF, TIMEOUT, out _); if(sense || dev.Error) { DicConsole.WriteLine("Querying all mode pages using SCSI MODE SENSE (10)..."); sense = dev.ModeSense10(out mode10Buffer, out senseBuffer, false, true, - ScsiModeSensePageControl.Default, 0x3F, 0x00, timeout, out duration); + ScsiModeSensePageControl.Default, 0x3F, 0x00, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense10 = true; @@ -246,16 +242,16 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (6)..."); sense = dev.ModeSense6(out byte[] mode6Buffer, out senseBuffer, false, ScsiModeSensePageControl.Default, - 0x3F, 0xFF, timeout, out duration); + 0x3F, 0xFF, TIMEOUT, out _); if(sense || dev.Error) { DicConsole.WriteLine("Querying all mode pages using SCSI MODE SENSE (6)..."); sense = dev.ModeSense6(out mode6Buffer, out senseBuffer, false, ScsiModeSensePageControl.Default, 0x3F, - 0x00, timeout, out duration); + 0x00, TIMEOUT, out _); if(sense || dev.Error) { DicConsole.WriteLine("Querying SCSI MODE SENSE (6)..."); - sense = dev.ModeSense(out mode6Buffer, out senseBuffer, timeout, out duration); + sense = dev.ModeSense(out mode6Buffer, out senseBuffer, TIMEOUT, out _); } } else report.SCSI.SupportsModeSubpages = true; @@ -272,10 +268,12 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(decMode.HasValue) { - report.SCSI.ModeSense = new modeType(); - report.SCSI.ModeSense.BlankCheckEnabled = decMode.Value.Header.EBC; - report.SCSI.ModeSense.DPOandFUA = decMode.Value.Header.DPOFUA; - report.SCSI.ModeSense.WriteProtected = decMode.Value.Header.WriteProtected; + report.SCSI.ModeSense = new modeType + { + BlankCheckEnabled = decMode.Value.Header.EBC, + DPOandFUA = decMode.Value.Header.DPOFUA, + WriteProtected = decMode.Value.Header.WriteProtected + }; if(decMode.Value.Header.BufferedMode > 0) { @@ -294,10 +292,12 @@ namespace DiscImageChef.Core.Devices.Report.SCSI List modePages = new List(); foreach(Modes.ModePage page in decMode.Value.Pages) { - modePageType modePage = new modePageType(); - modePage.page = page.Page; - modePage.subpage = page.Subpage; - modePage.value = page.PageResponse; + modePageType modePage = new modePageType + { + page = page.Page, + subpage = page.Subpage, + value = page.PageResponse + }; modePages.Add(modePage); if(modePage.page == 0x2A && modePage.subpage == 0x00) cdromMode = Modes.DecodeModePage_2A(page.PageResponse); @@ -347,7 +347,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.ModelSpecified = true; mediaTest.MediaIsRecognized = true; - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); @@ -359,7 +359,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(!sense) break; leftRetries--; @@ -374,7 +374,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(!sense) break; leftRetries--; @@ -392,7 +392,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.SupportsReadCapacity16Specified = true; DicConsole.WriteLine("Querying SCSI READ CAPACITY..."); - sense = dev.ReadCapacity(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ReadCapacity(out buffer, out senseBuffer, TIMEOUT, out _); if(!sense && !dev.Error) { mediaTest.SupportsReadCapacity = true; @@ -406,7 +406,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI READ CAPACITY (16)..."); - sense = dev.ReadCapacity16(out buffer, out buffer, timeout, out duration); + sense = dev.ReadCapacity16(out buffer, out buffer, TIMEOUT, out _); if(!sense && !dev.Error) { mediaTest.SupportsReadCapacity16 = true; @@ -425,8 +425,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying SCSI MODE SENSE (10)..."); sense = dev.ModeSense10(out buffer, out senseBuffer, false, true, - ScsiModeSensePageControl.Current, 0x3F, 0x00, timeout, - out duration); + ScsiModeSensePageControl.Current, 0x3F, 0x00, TIMEOUT, + out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense10 = true; @@ -435,7 +435,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI MODE SENSE..."); - sense = dev.ModeSense(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ModeSense(out buffer, out senseBuffer, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense6 = true; @@ -464,7 +464,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (6)..."); mediaTest.SupportsRead = !dev.Read6(out buffer, out senseBuffer, 0, mediaTest.BlockSize, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead); if(debug) DataFile.WriteTo("SCSI Report", "read6", @@ -474,7 +474,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (10)..."); mediaTest.SupportsRead10 = !dev.Read10(out buffer, out senseBuffer, 0, false, true, false, false, 0, - mediaTest.BlockSize, 0, 1, timeout, out duration); + mediaTest.BlockSize, 0, 1, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead10); if(debug) DataFile.WriteTo("SCSI Report", "read10", @@ -484,7 +484,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (12)..."); mediaTest.SupportsRead12 = !dev.Read12(out buffer, out senseBuffer, 0, false, true, false, false, 0, - mediaTest.BlockSize, 0, 1, false, timeout, out duration); + mediaTest.BlockSize, 0, 1, false, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead12); if(debug) DataFile.WriteTo("SCSI Report", "read12", @@ -494,7 +494,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (16)..."); mediaTest.SupportsRead16 = !dev.Read16(out buffer, out senseBuffer, 0, false, true, false, 0, - mediaTest.BlockSize, 0, 1, false, timeout, out duration); + mediaTest.BlockSize, 0, 1, false, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead16); if(debug) DataFile.WriteTo("SCSI Report", "read16", @@ -503,8 +503,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.LongBlockSize = mediaTest.BlockSize; DicConsole.WriteLine("Trying SCSI READ LONG (10)..."); - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, TIMEOUT, + out _); if(sense && !dev.Error) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); @@ -535,7 +535,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI }) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - testSize, timeout, out duration); + testSize, TIMEOUT, out _); if(sense || dev.Error) continue; mediaTest.SupportsReadLong = true; @@ -553,7 +553,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI }) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - testSize, timeout, out duration); + testSize, TIMEOUT, out _); if(sense || dev.Error) continue; mediaTest.SupportsReadLong = true; @@ -564,7 +564,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI else if(mediaTest.BlockSize == 2048) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 2380, - timeout, out duration); + TIMEOUT, out _); if(!sense && !dev.Error) { mediaTest.SupportsReadLong = true; @@ -575,7 +575,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI else if(mediaTest.BlockSize == 4096) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 4760, - timeout, out duration); + TIMEOUT, out _); if(!sense && !dev.Error) { mediaTest.SupportsReadLong = true; @@ -586,7 +586,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI else if(mediaTest.BlockSize == 8192) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 9424, - timeout, out duration); + TIMEOUT, out _); if(!sense && !dev.Error) { mediaTest.SupportsReadLong = true; @@ -608,11 +608,11 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(pressedKey.Key == ConsoleKey.Y) { - for(ushort i = (ushort)mediaTest.BlockSize; true; i++) + for(ushort i = (ushort)mediaTest.BlockSize; ; i++) { DicConsole.Write("\rTrying to READ LONG with a size of {0} bytes...", i); sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, i, - timeout, out duration); + TIMEOUT, out _); if(!sense) { mediaTest.LongBlockSize = i; @@ -631,7 +631,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.LongBlockSize != mediaTest.BlockSize) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - (ushort)mediaTest.LongBlockSize, timeout, out duration); + (ushort)mediaTest.LongBlockSize, TIMEOUT, out _); if(!sense) DataFile.WriteTo("SCSI Report", "readlong10", "_debug_" + mediaTest.MediumTypeName + ".bin", "read results", @@ -641,7 +641,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.CanReadMediaSerialSpecified = true; DicConsole.WriteLine("Trying SCSI READ MEDIA SERIAL NUMBER..."); mediaTest.CanReadMediaSerial = - !dev.ReadMediaSerialNumber(out buffer, out senseBuffer, timeout, out duration); + !dev.ReadMediaSerialNumber(out buffer, out senseBuffer, TIMEOUT, out _); } mediaTests.Add(mediaTest); @@ -659,7 +659,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI report.SCSI.ReadCapabilities.SupportsReadCapacity16Specified = true; DicConsole.WriteLine("Querying SCSI READ CAPACITY..."); - sense = dev.ReadCapacity(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ReadCapacity(out buffer, out senseBuffer, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.ReadCapabilities.SupportsReadCapacity = true; @@ -672,7 +672,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI READ CAPACITY (16)..."); - sense = dev.ReadCapacity16(out buffer, out buffer, timeout, out duration); + sense = dev.ReadCapacity16(out buffer, out buffer, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.ReadCapabilities.SupportsReadCapacity16 = true; @@ -690,7 +690,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying SCSI MODE SENSE (10)..."); sense = dev.ModeSense10(out buffer, out senseBuffer, false, true, ScsiModeSensePageControl.Current, - 0x3F, 0x00, timeout, out duration); + 0x3F, 0x00, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense10 = true; @@ -699,7 +699,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI MODE SENSE..."); - sense = dev.ModeSense(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ModeSense(out buffer, out senseBuffer, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense6 = true; @@ -729,7 +729,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (6)..."); report.SCSI.ReadCapabilities.SupportsRead = !dev.Read6(out buffer, out senseBuffer, 0, report.SCSI.ReadCapabilities.BlockSize, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !report.SCSI.ReadCapabilities.SupportsRead); if(debug) DataFile.WriteTo("SCSI Report", "read6", @@ -739,7 +739,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (10)..."); report.SCSI.ReadCapabilities.SupportsRead10 = !dev.Read10(out buffer, out senseBuffer, 0, false, true, false, false, 0, - report.SCSI.ReadCapabilities.BlockSize, 0, 1, timeout, out duration); + report.SCSI.ReadCapabilities.BlockSize, 0, 1, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !report.SCSI.ReadCapabilities.SupportsRead10); if(debug) @@ -750,7 +750,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (12)..."); report.SCSI.ReadCapabilities.SupportsRead12 = !dev.Read12(out buffer, out senseBuffer, 0, false, true, false, false, 0, - report.SCSI.ReadCapabilities.BlockSize, 0, 1, false, timeout, out duration); + report.SCSI.ReadCapabilities.BlockSize, 0, 1, false, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !report.SCSI.ReadCapabilities.SupportsRead12); if(debug) @@ -761,7 +761,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (16)..."); report.SCSI.ReadCapabilities.SupportsRead16 = !dev.Read16(out buffer, out senseBuffer, 0, false, true, false, 0, - report.SCSI.ReadCapabilities.BlockSize, 0, 1, false, timeout, out duration); + report.SCSI.ReadCapabilities.BlockSize, 0, 1, false, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !report.SCSI.ReadCapabilities.SupportsRead16); if(debug) @@ -771,7 +771,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI report.SCSI.ReadCapabilities.LongBlockSize = report.SCSI.ReadCapabilities.BlockSize; DicConsole.WriteLine("Trying SCSI READ LONG (10)..."); - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, timeout, out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, TIMEOUT, out _); if(sense && !dev.Error) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); @@ -802,8 +802,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 600, 610, 630 }) { - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, testSize, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, testSize, TIMEOUT, + out _); if(sense || dev.Error) continue; report.SCSI.ReadCapabilities.SupportsReadLong = true; @@ -820,8 +820,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 1200 }) { - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, testSize, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, testSize, TIMEOUT, + out _); if(sense || dev.Error) continue; report.SCSI.ReadCapabilities.SupportsReadLong = true; @@ -831,8 +831,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } else if(report.SCSI.ReadCapabilities.BlockSize == 2048) { - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 2380, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 2380, TIMEOUT, + out _); if(!sense && !dev.Error) { report.SCSI.ReadCapabilities.SupportsReadLong = true; @@ -842,8 +842,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } else if(report.SCSI.ReadCapabilities.BlockSize == 4096) { - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 4760, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 4760, TIMEOUT, + out _); if(!sense && !dev.Error) { report.SCSI.ReadCapabilities.SupportsReadLong = true; @@ -853,8 +853,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } else if(report.SCSI.ReadCapabilities.BlockSize == 8192) { - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 9424, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 9424, TIMEOUT, + out _); if(!sense && !dev.Error) { report.SCSI.ReadCapabilities.SupportsReadLong = true; @@ -877,11 +877,11 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(pressedKey.Key == ConsoleKey.Y) { - for(ushort i = (ushort)report.SCSI.ReadCapabilities.BlockSize; true; i++) + for(ushort i = (ushort)report.SCSI.ReadCapabilities.BlockSize; ; i++) { DicConsole.Write("\rTrying to READ LONG with a size of {0} bytes...", i); - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, i, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, i, TIMEOUT, + out _); if(!sense) { if(debug) @@ -909,8 +909,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI report.SCSI.ReadCapabilities.LongBlockSize != report.SCSI.ReadCapabilities.BlockSize) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - (ushort)report.SCSI.ReadCapabilities.LongBlockSize, timeout, - out duration); + (ushort)report.SCSI.ReadCapabilities.LongBlockSize, TIMEOUT, + out _); if(!sense) DataFile.WriteTo("SCSI Report", "readlong10", "_debug_" + report.SCSI.Inquiry.ProductIdentification + ".bin", diff --git a/DiscImageChef.Core/Devices/Report/SCSI/MMC.cs b/DiscImageChef.Core/Devices/Report/SCSI/MMC.cs index a557f5f9e..c59e62feb 100644 --- a/DiscImageChef.Core/Devices/Report/SCSI/MMC.cs +++ b/DiscImageChef.Core/Devices/Report/SCSI/MMC.cs @@ -50,13 +50,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { if(report == null) return; - byte[] senseBuffer; - byte[] buffer; - double duration; bool sense; - uint timeout = 5; - ConsoleKeyInfo pressedKey; - Modes.DecodedMode? decMode; + const uint TIMEOUT = 5; report.SCSI.MultiMediaDevice = new mmcType(); @@ -163,7 +158,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying MMC GET CONFIGURATION..."); - sense = dev.GetConfiguration(out buffer, out senseBuffer, timeout, out duration); + sense = dev.GetConfiguration(out byte[] buffer, out byte[] senseBuffer, TIMEOUT, out _); if(!sense) { @@ -558,35 +553,32 @@ namespace DiscImageChef.Core.Devices.Report.SCSI Features.Decode_010C(desc.Data); if(ftr010C.HasValue) { - string syear, smonth, sday, shour, sminute, ssecond; - byte[] temp; - - temp = new byte[4]; + byte[] temp = new byte[4]; temp[0] = (byte)((ftr010C.Value.Century & 0xFF00) >> 8); temp[1] = (byte)(ftr010C.Value.Century & 0xFF); temp[2] = (byte)((ftr010C.Value.Year & 0xFF00) >> 8); temp[3] = (byte)(ftr010C.Value.Year & 0xFF); - syear = Encoding.ASCII.GetString(temp); + string syear = Encoding.ASCII.GetString(temp); temp = new byte[2]; temp[0] = (byte)((ftr010C.Value.Month & 0xFF00) >> 8); temp[1] = (byte)(ftr010C.Value.Month & 0xFF); - smonth = Encoding.ASCII.GetString(temp); + string smonth = Encoding.ASCII.GetString(temp); temp = new byte[2]; temp[0] = (byte)((ftr010C.Value.Day & 0xFF00) >> 8); temp[1] = (byte)(ftr010C.Value.Day & 0xFF); - sday = Encoding.ASCII.GetString(temp); + string sday = Encoding.ASCII.GetString(temp); temp = new byte[2]; temp[0] = (byte)((ftr010C.Value.Hour & 0xFF00) >> 8); temp[1] = (byte)(ftr010C.Value.Hour & 0xFF); - shour = Encoding.ASCII.GetString(temp); + string shour = Encoding.ASCII.GetString(temp); temp = new byte[2]; temp[0] = (byte)((ftr010C.Value.Minute & 0xFF00) >> 8); temp[1] = (byte)(ftr010C.Value.Minute & 0xFF); - sminute = Encoding.ASCII.GetString(temp); + string sminute = Encoding.ASCII.GetString(temp); temp = new byte[2]; temp[0] = (byte)((ftr010C.Value.Second & 0xFF00) >> 8); temp[1] = (byte)(ftr010C.Value.Second & 0xFF); - ssecond = Encoding.ASCII.GetString(temp); + string ssecond = Encoding.ASCII.GetString(temp); try { @@ -598,7 +590,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI report.SCSI.MultiMediaDevice.Features.FirmwareDateSpecified = true; } #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body - catch { } + catch { // ignored + } #pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body } } @@ -737,7 +730,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI List mediaTests = new List(); foreach(string mediaType in mediaTypes) { - pressedKey = new ConsoleKeyInfo(); + ConsoleKeyInfo pressedKey = new ConsoleKeyInfo(); while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Do you have a {0} disc that you can insert in the drive? (Y/N): ", mediaType); @@ -747,16 +740,15 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(pressedKey.Key == ConsoleKey.Y) { - dev.AllowMediumRemoval(out senseBuffer, timeout, out duration); - dev.EjectTray(out senseBuffer, timeout, out duration); + dev.AllowMediumRemoval(out senseBuffer, TIMEOUT, out _); + dev.EjectTray(out senseBuffer, TIMEOUT, out _); DicConsole.WriteLine("Please insert it in the drive and press any key when it is ready."); System.Console.ReadKey(true); - testedMediaType mediaTest = new testedMediaType(); - mediaTest.MediumTypeName = mediaType; - mediaTest.MediaIsRecognized = true; + testedMediaType mediaTest = + new testedMediaType {MediumTypeName = mediaType, MediaIsRecognized = true}; - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); @@ -768,7 +760,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(!sense) break; leftRetries--; @@ -783,7 +775,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(!sense) break; leftRetries--; @@ -799,7 +791,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(!sense) break; leftRetries--; @@ -817,7 +809,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.SupportsReadCapacity16Specified = true; DicConsole.WriteLine("Querying SCSI READ CAPACITY..."); - sense = dev.ReadCapacity(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ReadCapacity(out buffer, out senseBuffer, TIMEOUT, out _); if(!sense && !dev.Error) { mediaTest.SupportsReadCapacity = true; @@ -830,7 +822,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI READ CAPACITY (16)..."); - sense = dev.ReadCapacity16(out buffer, out buffer, timeout, out duration); + sense = dev.ReadCapacity16(out buffer, out buffer, TIMEOUT, out _); if(!sense && !dev.Error) { mediaTest.SupportsReadCapacity16 = true; @@ -844,11 +836,11 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.BlockSizeSpecified = true; } - decMode = null; + Modes.DecodedMode? decMode = null; DicConsole.WriteLine("Querying SCSI MODE SENSE (10)..."); sense = dev.ModeSense10(out buffer, out senseBuffer, false, true, - ScsiModeSensePageControl.Current, 0x3F, 0x00, timeout, out duration); + ScsiModeSensePageControl.Current, 0x3F, 0x00, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense10 = true; @@ -856,7 +848,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(debug) mediaTest.ModeSense10Data = buffer; } DicConsole.WriteLine("Querying SCSI MODE SENSE..."); - sense = dev.ModeSense(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ModeSense(out buffer, out senseBuffer, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense6 = true; @@ -883,7 +875,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.CanReadFullTOCSpecified = true; DicConsole.WriteLine("Querying CD TOC..."); mediaTest.CanReadTOC = - !dev.ReadTocPmaAtip(out buffer, out senseBuffer, false, 0, 0, timeout, out duration); + !dev.ReadTocPmaAtip(out buffer, out senseBuffer, false, 0, 0, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadTOC); if(debug) DataFile.WriteTo("SCSI Report", "readtoc", @@ -892,7 +884,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying CD Full TOC..."); mediaTest.CanReadFullTOC = - !dev.ReadRawToc(out buffer, out senseBuffer, 1, timeout, out duration); + !dev.ReadRawToc(out buffer, out senseBuffer, 1, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadFullTOC); if(debug) DataFile.WriteTo("SCSI Report", "readfulltoc", @@ -906,14 +898,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.CanReadATIPSpecified = true; mediaTest.CanReadPMASpecified = true; DicConsole.WriteLine("Querying CD ATIP..."); - mediaTest.CanReadATIP = !dev.ReadAtip(out buffer, out senseBuffer, timeout, out duration); + mediaTest.CanReadATIP = !dev.ReadAtip(out buffer, out senseBuffer, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadATIP); if(debug) DataFile.WriteTo("SCSI Report", "atip", "_debug_" + report.SCSI.Inquiry.ProductIdentification + "_" + mediaType + ".bin", "read results", buffer); DicConsole.WriteLine("Querying CD PMA..."); - mediaTest.CanReadPMA = !dev.ReadPma(out buffer, out senseBuffer, timeout, out duration); + mediaTest.CanReadPMA = !dev.ReadPma(out buffer, out senseBuffer, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPMA); if(debug) DataFile.WriteTo("SCSI Report", "pma", @@ -929,8 +921,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD PFI..."); mediaTest.CanReadPFI = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.PhysicalInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPFI); if(debug) DataFile.WriteTo("SCSI Report", "pfi", @@ -939,8 +931,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD DMI..."); mediaTest.CanReadDMI = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DiscManufacturingInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.DiscManufacturingInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadDMI); if(debug) DataFile.WriteTo("SCSI Report", "dmi", @@ -954,8 +946,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD CMI..."); mediaTest.CanReadCMI = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.CopyrightInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.CopyrightInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCMI); if(debug) DataFile.WriteTo("SCSI Report", "cmi", @@ -970,8 +962,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD BCA..."); mediaTest.CanReadBCA = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.BurstCuttingArea, 0, timeout, - out duration); + MmcDiscStructureFormat.BurstCuttingArea, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadBCA); if(debug) DataFile.WriteTo("SCSI Report", "bca", @@ -981,7 +973,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD AACS..."); mediaTest.CanReadAACS = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdAacs, 0, timeout, out duration); + MmcDiscStructureFormat.DvdAacs, 0, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadAACS); if(debug) DataFile.WriteTo("SCSI Report", "aacs", @@ -993,8 +985,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying BD BCA..."); mediaTest.CanReadBCA = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdBurstCuttingArea, 0, timeout, - out duration); + MmcDiscStructureFormat.BdBurstCuttingArea, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadBCA); if(debug) DataFile.WriteTo("SCSI Report", "bdbca", @@ -1007,7 +999,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.CanReadSpareAreaInformationSpecified = true; mediaTest.CanReadDDS = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramDds, 0, timeout, out duration); + MmcDiscStructureFormat.DvdramDds, 0, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadDDS); if(debug) DataFile.WriteTo("SCSI Report", "dds", @@ -1015,8 +1007,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaType + ".bin", "read results", buffer); mediaTest.CanReadSpareAreaInformation = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramSpareAreaInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.DvdramSpareAreaInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadSpareAreaInformation); if(debug) @@ -1033,7 +1025,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying BD DDS..."); mediaTest.CanReadDDS = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdDds, 0, timeout, out duration); + MmcDiscStructureFormat.BdDds, 0, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadDDS); if(debug) DataFile.WriteTo("SCSI Report", "bddds", @@ -1042,8 +1034,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying BD SAI..."); mediaTest.CanReadSpareAreaInformation = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdSpareAreaInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.BdSpareAreaInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadSpareAreaInformation); if(debug) @@ -1058,8 +1050,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD PRI..."); mediaTest.CanReadPRI = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PreRecordedInfo, 0, timeout, - out duration); + MmcDiscStructureFormat.PreRecordedInfo, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPRI); if(debug) DataFile.WriteTo("SCSI Report", "pri", @@ -1074,8 +1066,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD Media ID..."); mediaTest.CanReadMediaID = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrMediaIdentifier, 0, timeout, - out duration); + MmcDiscStructureFormat.DvdrMediaIdentifier, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadMediaID); if(debug) DataFile.WriteTo("SCSI Report", "mediaid", @@ -1084,8 +1076,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD Embossed PFI..."); mediaTest.CanReadRecordablePFI = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrPhysicalInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.DvdrPhysicalInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadRecordablePFI); if(debug) DataFile.WriteTo("SCSI Report", "epfi", @@ -1100,7 +1092,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD ADIP..."); mediaTest.CanReadADIP = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Adip, 0, timeout, out duration); + MmcDiscStructureFormat.Adip, 0, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadADIP); if(debug) DataFile.WriteTo("SCSI Report", "adip", @@ -1109,7 +1101,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD DCB..."); mediaTest.CanReadDCB = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Dcb, 0, timeout, out duration); + MmcDiscStructureFormat.Dcb, 0, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadDCB); if(debug) DataFile.WriteTo("SCSI Report", "dcb", @@ -1123,8 +1115,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying HD DVD CMI..."); mediaTest.CanReadHDCMI = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.HddvdCopyrightInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.HddvdCopyrightInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadHDCMI); if(debug) DataFile.WriteTo("SCSI Report", "hdcmi", @@ -1138,8 +1130,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying DVD Layer Capacity..."); mediaTest.CanReadLayerCapacity = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrLayerCapacity, 0, timeout, - out duration); + MmcDiscStructureFormat.DvdrLayerCapacity, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadLayerCapacity); if(debug) DataFile.WriteTo("SCSI Report", "layer", @@ -1154,8 +1146,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying BD Disc Information..."); mediaTest.CanReadDiscInformation = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.DiscInformation, 0, timeout, - out duration); + MmcDiscStructureFormat.DiscInformation, 0, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadDiscInformation); if(debug) DataFile.WriteTo("SCSI Report", "di", @@ -1164,7 +1156,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Querying BD PAC..."); mediaTest.CanReadPAC = !dev.ReadDiscStructure(out buffer, out senseBuffer, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.Pac, 0, timeout, out duration); + MmcDiscStructureFormat.Pac, 0, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPAC); if(debug) DataFile.WriteTo("SCSI Report", "pac", @@ -1179,7 +1171,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying SCSI READ (6)..."); mediaTest.SupportsRead = - !dev.Read6(out buffer, out senseBuffer, 0, 2048, timeout, out duration); + !dev.Read6(out buffer, out senseBuffer, 0, 2048, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead); if(debug) DataFile.WriteTo("SCSI Report", "read6", @@ -1187,7 +1179,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI ".bin", "read results", buffer); DicConsole.WriteLine("Trying SCSI READ (10)..."); mediaTest.SupportsRead10 = !dev.Read10(out buffer, out senseBuffer, 0, false, true, false, - false, 0, 2048, 0, 1, timeout, out duration); + false, 0, 2048, 0, 1, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead10); if(debug) DataFile.WriteTo("SCSI Report", "read10", @@ -1195,7 +1187,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI ".bin", "read results", buffer); DicConsole.WriteLine("Trying SCSI READ (12)..."); mediaTest.SupportsRead12 = !dev.Read12(out buffer, out senseBuffer, 0, false, true, false, - false, 0, 2048, 0, 1, false, timeout, out duration); + false, 0, 2048, 0, 1, false, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead12); if(debug) DataFile.WriteTo("SCSI Report", "read12", @@ -1203,7 +1195,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI ".bin", "read results", buffer); DicConsole.WriteLine("Trying SCSI READ (16)..."); mediaTest.SupportsRead16 = !dev.Read16(out buffer, out senseBuffer, 0, false, true, false, 0, - 2048, 0, 1, false, timeout, out duration); + 2048, 0, 1, false, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsRead16); if(debug) DataFile.WriteTo("SCSI Report", "read16", @@ -1248,8 +1240,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.SupportsReadCd = !dev.ReadCd(out buffer, out senseBuffer, 0, 2352, 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, - MmcErrorField.None, MmcSubchannel.None, timeout, - out duration); + MmcErrorField.None, MmcSubchannel.None, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsReadCd); if(debug) DataFile.WriteTo("SCSI Report", "readcd", @@ -1260,7 +1252,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 0x00000201, 2352, MmcSectorTypes.Cdda, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, - MmcSubchannel.None, timeout, out duration); + MmcSubchannel.None, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsReadCdMsf); if(debug) DataFile.WriteTo("SCSI Report", "readcdmsf", @@ -1273,8 +1265,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.SupportsReadCd = !dev.ReadCd(out buffer, out senseBuffer, 0, 2048, 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, - MmcErrorField.None, MmcSubchannel.None, timeout, - out duration); + MmcErrorField.None, MmcSubchannel.None, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsReadCd); if(debug) DataFile.WriteTo("SCSI Report", "readcd", @@ -1285,7 +1277,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 0x00000201, 2048, MmcSectorTypes.AllTypes, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, - MmcSubchannel.None, timeout, out duration); + MmcSubchannel.None, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsReadCdMsf); if(debug) DataFile.WriteTo("SCSI Report", "readcdmsf", @@ -1296,7 +1288,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsReadCdRaw); if(debug) DataFile.WriteTo("SCSI Report", "readcdraw", @@ -1308,7 +1300,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsReadCdMsfRaw); if(debug) @@ -1326,12 +1318,12 @@ namespace DiscImageChef.Core.Devices.Report.SCSI sense = dev.ReadCd(out buffer, out senseBuffer, (uint)i, 2352, 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, - MmcSubchannel.None, timeout, out duration); + MmcSubchannel.None, TIMEOUT, out _); else sense = dev.ReadCd(out buffer, out senseBuffer, (uint)i, 2352, 1, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, timeout, out duration); + MmcSubchannel.None, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", sense); if(debug) DataFile.WriteTo("SCSI Report", "leadin", @@ -1350,14 +1342,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.None, - timeout, out duration); + TIMEOUT, out _); else mediaTest.CanReadLeadOut = !dev.ReadCd(out buffer, out senseBuffer, (uint)(mediaTest.Blocks + 1), 2352, 1, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadLeadOut); if(debug) DataFile.WriteTo("SCSI Report", "leadout", @@ -1372,14 +1364,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, MmcSubchannel.None, - timeout, out duration); + TIMEOUT, out _); if(!mediaTest.CanReadC2Pointers) mediaTest.CanReadC2Pointers = !dev.ReadCd(out buffer, out senseBuffer, 0, 2648, 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.None, timeout, - out duration); + MmcSubchannel.None, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadC2Pointers); if(debug) DataFile.WriteTo("SCSI Report", "readcdc2", @@ -1391,7 +1383,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.Q16, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPQSubchannel); if(debug) DataFile.WriteTo("SCSI Report", "readcdpq", @@ -1401,7 +1393,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.Raw, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadRWSubchannel); if(debug) DataFile.WriteTo("SCSI Report", "readcdrw", @@ -1411,8 +1403,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, - MmcSubchannel.Rw, timeout, - out duration); + MmcSubchannel.Rw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannel); if(debug) @@ -1425,16 +1417,16 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, - MmcSubchannel.Q16, timeout, - out duration); + MmcSubchannel.Q16, TIMEOUT, + out _); if(!mediaTest.CanReadPQSubchannelWithC2) mediaTest.CanReadPQSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2664, 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.Q16, timeout, - out duration); + MmcSubchannel.Q16, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPQSubchannelWithC2); if(debug) @@ -1446,16 +1438,16 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, - MmcSubchannel.Raw, timeout, - out duration); + MmcSubchannel.Raw, TIMEOUT, + out _); if(!mediaTest.CanReadRWSubchannelWithC2) mediaTest.CanReadRWSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2714, 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.Raw, timeout, - out duration); + MmcSubchannel.Raw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadRWSubchannelWithC2); if(debug) @@ -1469,14 +1461,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, - MmcSubchannel.Rw, timeout, - out duration); + MmcSubchannel.Rw, TIMEOUT, + out _); if(!mediaTest.CanReadCorrectedSubchannelWithC2) mediaTest.CanReadCorrectedSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2714, 1, MmcSectorTypes.Cdda, false, false, false, MmcHeaderCodes.None, true, false, - MmcErrorField.C2PointersAndBlock, MmcSubchannel.Rw, timeout, - out duration); + MmcErrorField.C2PointersAndBlock, MmcSubchannel.Rw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannelWithC2); if(debug) @@ -1491,14 +1483,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.C2Pointers, MmcSubchannel.None, - timeout, out duration); + TIMEOUT, out _); if(!mediaTest.CanReadC2Pointers) mediaTest.CanReadC2Pointers = !dev.ReadCd(out buffer, out senseBuffer, 0, 2648, 1, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.None, timeout, - out duration); + MmcSubchannel.None, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadC2Pointers); if(debug) DataFile.WriteTo("SCSI Report", "readcdc2", @@ -1510,7 +1502,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.Q16, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPQSubchannel); if(debug) DataFile.WriteTo("SCSI Report", "readcdpq", @@ -1520,7 +1512,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.Raw, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadRWSubchannel); if(debug) DataFile.WriteTo("SCSI Report", "readcdrw", @@ -1531,8 +1523,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.Rw, timeout, - out duration); + MmcSubchannel.Rw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannel); if(debug) @@ -1546,8 +1538,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.C2Pointers, - MmcSubchannel.Q16, timeout, - out duration); + MmcSubchannel.Q16, TIMEOUT, + out _); if(!mediaTest.CanReadPQSubchannelWithC2) mediaTest.CanReadPQSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2664, 1, MmcSectorTypes.AllTypes, @@ -1555,8 +1547,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.Q16, timeout, - out duration); + MmcSubchannel.Q16, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPQSubchannelWithC2); if(debug) @@ -1569,8 +1561,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.C2Pointers, - MmcSubchannel.Raw, timeout, - out duration); + MmcSubchannel.Raw, TIMEOUT, + out _); if(!mediaTest.CanReadRWSubchannelWithC2) mediaTest.CanReadRWSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2714, 1, MmcSectorTypes.AllTypes, @@ -1578,8 +1570,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.Raw, timeout, - out duration); + MmcSubchannel.Raw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadRWSubchannelWithC2); if(debug) @@ -1594,14 +1586,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.C2Pointers, - MmcSubchannel.Rw, timeout, - out duration); + MmcSubchannel.Rw, TIMEOUT, + out _); if(!mediaTest.CanReadCorrectedSubchannelWithC2) mediaTest.CanReadCorrectedSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2714, 1, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, - MmcErrorField.C2PointersAndBlock, MmcSubchannel.Rw, timeout, - out duration); + MmcErrorField.C2PointersAndBlock, MmcSubchannel.Rw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannelWithC2); if(debug) @@ -1616,14 +1608,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, MmcSubchannel.None, - timeout, out duration); + TIMEOUT, out _); if(!mediaTest.CanReadC2Pointers) mediaTest.CanReadC2Pointers = !dev.ReadCd(out buffer, out senseBuffer, 0, 2344, 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.None, timeout, - out duration); + MmcSubchannel.None, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadC2Pointers); if(debug) DataFile.WriteTo("SCSI Report", "readcdc2", @@ -1635,7 +1627,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.Q16, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPQSubchannel); if(debug) DataFile.WriteTo("SCSI Report", "readcdpq", @@ -1645,7 +1637,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, MmcSubchannel.Raw, - timeout, out duration); + TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadRWSubchannel); if(debug) DataFile.WriteTo("SCSI Report", "readcdrw", @@ -1655,8 +1647,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, - MmcSubchannel.Rw, timeout, - out duration); + MmcSubchannel.Rw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannel); if(debug) @@ -1669,16 +1661,16 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, - MmcSubchannel.Q16, timeout, - out duration); + MmcSubchannel.Q16, TIMEOUT, + out _); if(!mediaTest.CanReadPQSubchannelWithC2) mediaTest.CanReadPQSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2360, 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.Q16, timeout, - out duration); + MmcSubchannel.Q16, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadPQSubchannelWithC2); if(debug) @@ -1690,16 +1682,16 @@ namespace DiscImageChef.Core.Devices.Report.SCSI 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, - MmcSubchannel.Raw, timeout, - out duration); + MmcSubchannel.Raw, TIMEOUT, + out _); if(!mediaTest.CanReadRWSubchannelWithC2) mediaTest.CanReadRWSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2440, 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, MmcErrorField.C2PointersAndBlock, - MmcSubchannel.Raw, timeout, - out duration); + MmcSubchannel.Raw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadRWSubchannelWithC2); if(debug) @@ -1714,14 +1706,14 @@ namespace DiscImageChef.Core.Devices.Report.SCSI MmcHeaderCodes.None, true, false, MmcErrorField.C2Pointers, - MmcSubchannel.Rw, timeout, - out duration); + MmcSubchannel.Rw, TIMEOUT, + out _); if(!mediaTest.CanReadCorrectedSubchannelWithC2) mediaTest.CanReadCorrectedSubchannelWithC2 = !dev.ReadCd(out buffer, out senseBuffer, 0, 2440, 1, MmcSectorTypes.AllTypes, false, false, false, MmcHeaderCodes.None, true, false, - MmcErrorField.C2PointersAndBlock, MmcSubchannel.Rw, timeout, - out duration); + MmcErrorField.C2PointersAndBlock, MmcSubchannel.Rw, TIMEOUT, + out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadCorrectedSubchannelWithC2); if(debug) @@ -1767,7 +1759,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying Plextor READ CD-DA..."); mediaTest.SupportsPlextorReadCDDA = !dev.PlextorReadCdDa(out buffer, out senseBuffer, 0, 2352, 1, - PlextorSubchannel.None, timeout, out duration); + PlextorSubchannel.None, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsPlextorReadCDDA); if(debug) @@ -1783,7 +1775,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying Pioneer READ CD-DA..."); mediaTest.SupportsPioneerReadCDDA = !dev.PioneerReadCdDa(out buffer, out senseBuffer, 0, 2352, 1, - PioneerSubchannel.None, timeout, out duration); + PioneerSubchannel.None, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsPioneerReadCDDA); if(debug) @@ -1793,7 +1785,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI DicConsole.WriteLine("Trying Pioneer READ CD-DA MSF..."); mediaTest.SupportsPioneerReadCDDAMSF = !dev.PioneerReadCdDaMsf(out buffer, out senseBuffer, 0x00000200, 0x00000201, 2352, - PioneerSubchannel.None, timeout, out duration); + PioneerSubchannel.None, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsPioneerReadCDDAMSF); if(debug) @@ -1807,7 +1799,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.SupportsNECReadCDDASpecified = true; DicConsole.WriteLine("Trying NEC READ CD-DA..."); mediaTest.SupportsNECReadCDDA = - !dev.NecReadCdDa(out buffer, out senseBuffer, 0, 1, timeout, out duration); + !dev.NecReadCdDa(out buffer, out senseBuffer, 0, 1, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsNECReadCDDA); if(debug) DataFile.WriteTo("SCSI Report", "necreadcdda", @@ -1818,8 +1810,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.LongBlockSize = mediaTest.BlockSize; DicConsole.WriteLine("Trying SCSI READ LONG (10)..."); - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 0xFFFF, TIMEOUT, + out _); if(sense && !dev.Error) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); @@ -1854,8 +1846,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(mediaTest.SupportsReadLong && mediaTest.LongBlockSize == mediaTest.BlockSize) { // DVDs - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 37856, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, 37856, TIMEOUT, + out _); if(!sense && !dev.Error) { mediaTest.SupportsReadLong = true; @@ -1869,7 +1861,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.SupportsPlextorReadRawDVDSpecified = true; DicConsole.WriteLine("Trying Plextor trick to raw read DVDs..."); mediaTest.SupportsPlextorReadRawDVD = - !dev.PlextorReadRawDvd(out buffer, out senseBuffer, 0, 1, timeout, out duration); + !dev.PlextorReadRawDvd(out buffer, out senseBuffer, 0, 1, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsPlextorReadRawDVD); if(debug) @@ -1885,7 +1877,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.SupportsHLDTSTReadRawDVDSpecified = true; DicConsole.WriteLine("Trying HL-DT-ST (aka LG) trick to raw read DVDs..."); mediaTest.SupportsHLDTSTReadRawDVD = - !dev.HlDtStReadRawDvd(out buffer, out senseBuffer, 0, 1, timeout, out duration); + !dev.HlDtStReadRawDvd(out buffer, out senseBuffer, 0, 1, TIMEOUT, out _); DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.SupportsHLDTSTReadRawDVD); if(debug) @@ -1907,11 +1899,11 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(pressedKey.Key == ConsoleKey.Y) { - for(ushort i = (ushort)mediaTest.BlockSize; true; i++) + for(ushort i = (ushort)mediaTest.BlockSize; ; i++) { DicConsole.Write("\rTrying to READ LONG with a size of {0} bytes...", i); - sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, i, timeout, - out duration); + sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, i, TIMEOUT, + out _); if(!sense) { if(debug) @@ -1938,7 +1930,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI mediaTest.LongBlockSize != mediaTest.BlockSize) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - (ushort)mediaTest.LongBlockSize, timeout, out duration); + (ushort)mediaTest.LongBlockSize, TIMEOUT, out _); if(!sense) DataFile.WriteTo("SCSI Report", "readlong10", "_debug_" + report.SCSI.Inquiry.ProductIdentification + "_" + diff --git a/DiscImageChef.Core/Devices/Report/SCSI/SSC.cs b/DiscImageChef.Core/Devices/Report/SCSI/SSC.cs index a2be6d90b..06be78da6 100644 --- a/DiscImageChef.Core/Devices/Report/SCSI/SSC.cs +++ b/DiscImageChef.Core/Devices/Report/SCSI/SSC.cs @@ -47,17 +47,13 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { if(report == null) return; - byte[] senseBuffer; - byte[] buffer; - double duration; bool sense; - uint timeout = 5; + const uint TIMEOUT = 5; ConsoleKeyInfo pressedKey; - Modes.DecodedMode? decMode; report.SCSI.SequentialDevice = new sscType(); DicConsole.WriteLine("Querying SCSI READ BLOCK LIMITS..."); - sense = dev.ReadBlockLimits(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ReadBlockLimits(out byte[] buffer, out byte[] senseBuffer, TIMEOUT, out _); if(!sense) { BlockLimits.BlockLimitsData? decBl = BlockLimits.Decode(buffer); @@ -82,7 +78,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI REPORT DENSITY SUPPORT..."); - sense = dev.ReportDensitySupport(out buffer, out senseBuffer, false, false, timeout, out duration); + sense = dev.ReportDensitySupport(out buffer, out senseBuffer, false, false, TIMEOUT, out _); if(!sense) { DensitySupport.DensitySupportHeader? dsh = @@ -116,7 +112,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI REPORT DENSITY SUPPORT for medium types..."); - sense = dev.ReportDensitySupport(out buffer, out senseBuffer, true, false, timeout, out duration); + sense = dev.ReportDensitySupport(out buffer, out senseBuffer, true, false, TIMEOUT, out _); if(!sense) { DensitySupport.MediaTypeSupportHeader? mtsh = @@ -175,8 +171,8 @@ namespace DiscImageChef.Core.Devices.Report.SCSI seqTest.MediaIsRecognized = true; - dev.Load(out senseBuffer, timeout, out duration); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + dev.Load(out senseBuffer, TIMEOUT, out _); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); @@ -188,7 +184,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(!sense) break; leftRetries--; @@ -203,7 +199,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuffer, timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuffer, TIMEOUT, out _); if(!sense) break; leftRetries--; @@ -217,11 +213,11 @@ namespace DiscImageChef.Core.Devices.Report.SCSI if(seqTest.MediaIsRecognized) { - decMode = null; + Modes.DecodedMode? decMode = null; DicConsole.WriteLine("Querying SCSI MODE SENSE (10)..."); sense = dev.ModeSense10(out buffer, out senseBuffer, false, true, - ScsiModeSensePageControl.Current, 0x3F, 0x00, timeout, out duration); + ScsiModeSensePageControl.Current, 0x3F, 0x00, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense10 = true; @@ -230,7 +226,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI MODE SENSE..."); - sense = dev.ModeSense(out buffer, out senseBuffer, timeout, out duration); + sense = dev.ModeSense(out buffer, out senseBuffer, TIMEOUT, out _); if(!sense && !dev.Error) { report.SCSI.SupportsModeSense6 = true; @@ -252,7 +248,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI REPORT DENSITY SUPPORT for current media..."); - sense = dev.ReportDensitySupport(out buffer, out senseBuffer, false, true, timeout, out duration); + sense = dev.ReportDensitySupport(out buffer, out senseBuffer, false, true, TIMEOUT, out _); if(!sense) { DensitySupport.DensitySupportHeader? dsh = @@ -279,7 +275,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI } DicConsole.WriteLine("Querying SCSI REPORT DENSITY SUPPORT for medium types for current media..."); - sense = dev.ReportDensitySupport(out buffer, out senseBuffer, true, true, timeout, out duration); + sense = dev.ReportDensitySupport(out buffer, out senseBuffer, true, true, TIMEOUT, out _); if(!sense) { DensitySupport.MediaTypeSupportHeader? mtsh = @@ -309,7 +305,7 @@ namespace DiscImageChef.Core.Devices.Report.SCSI seqTest.CanReadMediaSerialSpecified = true; DicConsole.WriteLine("Trying SCSI READ MEDIA SERIAL NUMBER..."); seqTest.CanReadMediaSerial = - !dev.ReadMediaSerialNumber(out buffer, out senseBuffer, timeout, out duration); + !dev.ReadMediaSerialNumber(out buffer, out senseBuffer, TIMEOUT, out _); seqTests.Add(seqTest); } diff --git a/DiscImageChef.Core/Devices/Report/SecureDigital.cs b/DiscImageChef.Core/Devices/Report/SecureDigital.cs index eb161aed1..7b6e3c3f1 100644 --- a/DiscImageChef.Core/Devices/Report/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Report/SecureDigital.cs @@ -38,7 +38,7 @@ namespace DiscImageChef.Core.Devices.Report { public static class SecureDigital { - public static void Report(Device dev, ref DeviceReport report, bool debug, ref bool removable) + public static void Report(Device dev, ref DeviceReport report) { if(report == null) return; @@ -50,7 +50,7 @@ namespace DiscImageChef.Core.Devices.Report } DicConsole.WriteLine("Trying to get CID..."); - bool sense = dev.ReadCid(out byte[] cid, out uint[] response, dev.Timeout, out double duration); + bool sense = dev.ReadCid(out byte[] cid, out _, dev.Timeout, out _); if(!sense) { @@ -81,7 +81,7 @@ namespace DiscImageChef.Core.Devices.Report else DicConsole.WriteLine("Could not read CID..."); DicConsole.WriteLine("Trying to get CSD..."); - sense = dev.ReadCsd(out byte[] csd, out response, dev.Timeout, out duration); + sense = dev.ReadCsd(out byte[] csd, out _, dev.Timeout, out _); if(!sense) { @@ -100,7 +100,7 @@ namespace DiscImageChef.Core.Devices.Report case DeviceType.MMC: { DicConsole.WriteLine("Trying to get OCR..."); - sense = dev.ReadOcr(out byte[] ocr, out response, dev.Timeout, out duration); + sense = dev.ReadOcr(out byte[] ocr, out _, dev.Timeout, out _); if(!sense) { @@ -110,7 +110,7 @@ namespace DiscImageChef.Core.Devices.Report else DicConsole.WriteLine("Could not read OCR..."); DicConsole.WriteLine("Trying to get Extended CSD..."); - sense = dev.ReadExtendedCsd(out byte[] ecsd, out response, dev.Timeout, out duration); + sense = dev.ReadExtendedCsd(out byte[] ecsd, out _, dev.Timeout, out _); if(!sense) { @@ -123,7 +123,7 @@ namespace DiscImageChef.Core.Devices.Report case DeviceType.SecureDigital: { DicConsole.WriteLine("Trying to get OCR..."); - sense = dev.ReadSdocr(out byte[] ocr, out response, dev.Timeout, out duration); + sense = dev.ReadSdocr(out byte[] ocr, out _, dev.Timeout, out _); if(!sense) { @@ -133,7 +133,7 @@ namespace DiscImageChef.Core.Devices.Report else DicConsole.WriteLine("Could not read OCR..."); DicConsole.WriteLine("Trying to get SCR..."); - sense = dev.ReadScr(out byte[] scr, out response, dev.Timeout, out duration); + sense = dev.ReadScr(out byte[] scr, out _, dev.Timeout, out _); if(!sense) { diff --git a/DiscImageChef.Core/Devices/Report/USB.cs b/DiscImageChef.Core/Devices/Report/USB.cs index 5487ea12b..0a8da7ffc 100644 --- a/DiscImageChef.Core/Devices/Report/USB.cs +++ b/DiscImageChef.Core/Devices/Report/USB.cs @@ -53,11 +53,13 @@ namespace DiscImageChef.Core.Devices.Report if(pressedKey.Key != ConsoleKey.Y) return; - report.USB = new usbType(); - report.USB.Manufacturer = dev.UsbManufacturerString; - report.USB.Product = dev.UsbProductString; - report.USB.ProductID = dev.UsbProductId; - report.USB.VendorID = dev.UsbVendorId; + report.USB = new usbType + { + Manufacturer = dev.UsbManufacturerString, + Product = dev.UsbProductString, + ProductID = dev.UsbProductId, + VendorID = dev.UsbVendorId + }; pressedKey = new ConsoleKeyInfo(); while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) diff --git a/DiscImageChef.Core/Devices/Scanning/ATA.cs b/DiscImageChef.Core/Devices/Scanning/ATA.cs index 29c8ce9c6..8615708ae 100644 --- a/DiscImageChef.Core/Devices/Scanning/ATA.cs +++ b/DiscImageChef.Core/Devices/Scanning/ATA.cs @@ -45,21 +45,16 @@ namespace DiscImageChef.Core.Devices.Scanning { ScanResults results = new ScanResults(); bool aborted; - MhddLog mhddLog; - IbgLog ibgLog; - byte[] cmdBuf; bool sense; results.Blocks = 0; - ushort currentProfile = 0x0001; - AtaErrorRegistersCHS errorChs; - uint timeout = 5; - double duration; + const ushort ATA_PROFILE = 0x0001; + const uint TIMEOUT = 5; - sense = dev.AtaIdentify(out cmdBuf, out errorChs); + sense = dev.AtaIdentify(out byte[] cmdBuf, out _); if(!sense && Identify.Decode(cmdBuf).HasValue) { // Initializate reader - Reader ataReader = new Reader(dev, timeout, cmdBuf); + Reader ataReader = new Reader(dev, TIMEOUT, cmdBuf); // Fill reader blocks results.Blocks = ataReader.GetDeviceBlocks(); if(ataReader.FindReadCommand()) @@ -76,7 +71,7 @@ namespace DiscImageChef.Core.Devices.Scanning uint blockSize = ataReader.LogicalBlockSize; // Check how many blocks to read, if error show and return - if(ataReader.GetBlocksToRead(64)) + if(ataReader.GetBlocksToRead()) { DicConsole.ErrorWriteLine(ataReader.ErrorMessage); return results; @@ -110,20 +105,18 @@ namespace DiscImageChef.Core.Devices.Scanning Random rnd = new Random(); - uint seekPos; - ushort seekCy; - byte seekHd; - byte seekSc; - aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; + MhddLog mhddLog; + IbgLog ibgLog; + double duration; if(ataReader.IsLba) { DicConsole.WriteLine("Reading {0} sectors at a time.", blocksToRead); mhddLog = new MhddLog(mhddLogPath, dev, results.Blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(ibgLogPath, currentProfile); + ibgLog = new IbgLog(ibgLogPath, ATA_PROFILE); start = DateTime.UtcNow; for(ulong i = 0; i < results.Blocks; i += blocksToRead) @@ -159,8 +152,7 @@ namespace DiscImageChef.Core.Devices.Scanning results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); - if(duration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, duration); + mhddLog.Write(i, duration < 500 ? 65535 : duration); ibgLog.Write(i, 0); } @@ -181,7 +173,7 @@ namespace DiscImageChef.Core.Devices.Scanning { if(aborted) break; - seekPos = (uint)rnd.Next((int)results.Blocks); + uint seekPos = (uint)rnd.Next((int)results.Blocks); DicConsole.Write("\rSeeking to sector {0}...\t\t", seekPos); @@ -199,7 +191,7 @@ namespace DiscImageChef.Core.Devices.Scanning else { mhddLog = new MhddLog(mhddLogPath, dev, results.Blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(ibgLogPath, currentProfile); + ibgLog = new IbgLog(ibgLogPath, ATA_PROFILE); ulong currentBlock = 0; results.Blocks = (ulong)(cylinders * heads * sectors); @@ -240,8 +232,7 @@ namespace DiscImageChef.Core.Devices.Scanning { results.Errored += blocksToRead; results.UnreadableSectors.Add(currentBlock); - if(duration < 500) mhddLog.Write(currentBlock, 65535); - else mhddLog.Write(currentBlock, duration); + mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration); ibgLog.Write(currentBlock, 0); } @@ -266,9 +257,9 @@ namespace DiscImageChef.Core.Devices.Scanning { if(aborted) break; - seekCy = (ushort)rnd.Next(cylinders); - seekHd = (byte)rnd.Next(heads); - seekSc = (byte)rnd.Next(sectors); + ushort seekCy = (ushort)rnd.Next(cylinders); + byte seekHd = (byte)rnd.Next(heads); + byte seekSc = (byte)rnd.Next(sectors); DicConsole.Write("\rSeeking to cylinder {0}, head {1}, sector {2}...\t\t", seekCy, seekHd, seekSc); diff --git a/DiscImageChef.Core/Devices/Scanning/SCSI.cs b/DiscImageChef.Core/Devices/Scanning/SCSI.cs index 433ce606c..800ca0bff 100644 --- a/DiscImageChef.Core/Devices/Scanning/SCSI.cs +++ b/DiscImageChef.Core/Devices/Scanning/SCSI.cs @@ -50,17 +50,15 @@ namespace DiscImageChef.Core.Devices.Scanning bool aborted; MhddLog mhddLog; IbgLog ibgLog; - byte[] cmdBuf; byte[] senseBuf; bool sense = false; - double duration; results.Blocks = 0; uint blockSize = 0; ushort currentProfile = 0x0001; if(dev.IsRemovable) { - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); if(sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuf); @@ -72,7 +70,7 @@ namespace DiscImageChef.Core.Devices.Scanning { DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); if(!sense) break; leftRetries--; @@ -91,7 +89,7 @@ namespace DiscImageChef.Core.Devices.Scanning { DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); if(!sense) break; leftRetries--; @@ -112,7 +110,7 @@ namespace DiscImageChef.Core.Devices.Scanning { DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); - sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration); + sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); if(!sense) break; leftRetries--; @@ -148,7 +146,7 @@ namespace DiscImageChef.Core.Devices.Scanning case PeripheralDeviceTypes.OpticalDevice: case PeripheralDeviceTypes.SimplifiedDevice: case PeripheralDeviceTypes.WriteOnceDevice: - scsiReader = new Reader(dev, dev.Timeout, null, false); + scsiReader = new Reader(dev, dev.Timeout, null); results.Blocks = scsiReader.GetDeviceBlocks(); if(scsiReader.FindReadCommand()) { @@ -182,8 +180,8 @@ namespace DiscImageChef.Core.Devices.Scanning if(dev.ScsiType == PeripheralDeviceTypes.MultiMediaDevice) { - sense = dev.GetConfiguration(out cmdBuf, out senseBuf, 0, MmcGetConfigurationRt.Current, dev.Timeout, - out duration); + sense = dev.GetConfiguration(out byte[] cmdBuf, out senseBuf, 0, MmcGetConfigurationRt.Current, dev.Timeout, + out _); if(!sense) { Features.SeparatedFeatures ftr = Features.Separate(cmdBuf); @@ -210,13 +208,12 @@ namespace DiscImageChef.Core.Devices.Scanning currentProfile = 0x0008; // We discarded all discs that falsify a TOC before requesting a real TOC // No TOC, no CD (or an empty one) - bool tocSense = dev.ReadRawToc(out cmdBuf, out senseBuf, 1, dev.Timeout, out duration); + bool tocSense = dev.ReadRawToc(out cmdBuf, out senseBuf, 1, dev.Timeout, out _); if(!tocSense) toc = FullTOC.Decode(cmdBuf); } } else compactDisc = false; - byte[] readBuffer; uint blocksToRead = 64; results.A = 0; // <3ms @@ -238,8 +235,6 @@ namespace DiscImageChef.Core.Devices.Scanning aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; - bool readcd = false; - if(compactDisc) { if(toc == null) @@ -248,9 +243,9 @@ namespace DiscImageChef.Core.Devices.Scanning return results; } - readcd = !dev.ReadCd(out readBuffer, out senseBuf, 0, 2352, 1, MmcSectorTypes.AllTypes, false, false, - true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out duration); + bool readcd = !dev.ReadCd(out _, out senseBuf, 0, 2352, 1, MmcSectorTypes.AllTypes, false, false, + true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); if(readcd) DicConsole.WriteLine("Using MMC READ CD command."); @@ -260,9 +255,9 @@ namespace DiscImageChef.Core.Devices.Scanning { if(readcd) { - sense = dev.ReadCd(out readBuffer, out senseBuf, 0, 2352, blocksToRead, MmcSectorTypes.AllTypes, + sense = dev.ReadCd(out _, out senseBuf, 0, 2352, blocksToRead, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, - MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out duration); + MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); if(dev.Error) blocksToRead /= 2; } @@ -297,7 +292,7 @@ namespace DiscImageChef.Core.Devices.Scanning if(readcd) { - sense = dev.ReadCd(out readBuffer, out senseBuf, (uint)i, 2352, blocksToRead, + sense = dev.ReadCd(out _, out senseBuf, (uint)i, 2352, blocksToRead, MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out cmdDuration); results.ProcessingTime += cmdDuration; @@ -333,8 +328,7 @@ namespace DiscImageChef.Core.Devices.Scanning results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); - if(cmdDuration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); ibgLog.Write(i, 0); } @@ -344,8 +338,7 @@ namespace DiscImageChef.Core.Devices.Scanning results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); - if(cmdDuration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); ibgLog.Write(i, 0); } @@ -375,8 +368,6 @@ namespace DiscImageChef.Core.Devices.Scanning { if(aborted) break; - double cmdDuration = 0; - if(results.Blocks - i < blocksToRead) blocksToRead = (uint)(results.Blocks - i); #pragma warning disable RECS0018 // Comparison of floating point numbers with equality operator @@ -386,7 +377,7 @@ namespace DiscImageChef.Core.Devices.Scanning DicConsole.Write("\rReading sector {0} of {1} ({2:F3} MiB/sec.)", i, results.Blocks, currentSpeed); - sense = scsiReader.ReadBlocks(out readBuffer, i, blocksToRead, out cmdDuration); + sense = scsiReader.ReadBlocks(out _, i, blocksToRead, out double cmdDuration); results.ProcessingTime += cmdDuration; if(!sense && !dev.Error) @@ -407,8 +398,7 @@ namespace DiscImageChef.Core.Devices.Scanning results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); - if(cmdDuration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); ibgLog.Write(i, 0); } @@ -428,22 +418,19 @@ namespace DiscImageChef.Core.Devices.Scanning results.SeekTotal = 0; const int SEEK_TIMES = 1000; - double seekCur = 0; - Random rnd = new Random(); - uint seekPos = (uint)rnd.Next((int)results.Blocks); - for(int i = 0; i < SEEK_TIMES; i++) { if(aborted) break; - seekPos = (uint)rnd.Next((int)results.Blocks); + uint seekPos = (uint)rnd.Next((int)results.Blocks); DicConsole.Write("\rSeeking to sector {0}...\t\t", seekPos); + double seekCur; if(scsiReader.CanSeek) scsiReader.Seek(seekPos, out seekCur); - else scsiReader.ReadBlock(out readBuffer, seekPos, out seekCur); + else scsiReader.ReadBlock(out _, seekPos, out seekCur); #pragma warning disable RECS0018 // Comparison of floating point numbers with equality operator if(seekCur > results.SeekMax && seekCur != 0) results.SeekMax = seekCur; diff --git a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs index e491da6f5..a8637a570 100644 --- a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs @@ -45,15 +45,12 @@ namespace DiscImageChef.Core.Devices.Scanning { ScanResults results = new ScanResults(); bool aborted; - MhddLog mhddLog; - IbgLog ibgLog; byte[] cmdBuf; bool sense; results.Blocks = 0; - uint[] response; - uint timeout = 5; - double duration = 0; - ushort currentProfile = 0x0001; + const uint TIMEOUT = 5; + double duration; + const ushort SD_PROFILE = 0x0001; uint blocksToRead = 128; uint blockSize = 512; bool byteAddressed = true; @@ -61,13 +58,10 @@ namespace DiscImageChef.Core.Devices.Scanning switch(dev.Type) { case DeviceType.MMC: { - ExtendedCSD ecsd = new ExtendedCSD(); - CSD csd = new CSD(); - - sense = dev.ReadExtendedCsd(out cmdBuf, out response, timeout, out duration); + sense = dev.ReadExtendedCsd(out cmdBuf, out _, TIMEOUT, out _); if(!sense) { - ecsd = Decoders.MMC.Decoders.DecodeExtendedCSD(cmdBuf); + ExtendedCSD ecsd = Decoders.MMC.Decoders.DecodeExtendedCSD(cmdBuf); blocksToRead = ecsd.OptimalReadSize; results.Blocks = ecsd.SectorCount; blockSize = (uint)(ecsd.SectorSize == 1 ? 4096 : 512); @@ -77,10 +71,10 @@ namespace DiscImageChef.Core.Devices.Scanning if(sense || results.Blocks == 0) { - sense = dev.ReadCsd(out cmdBuf, out response, timeout, out duration); + sense = dev.ReadCsd(out cmdBuf, out _, TIMEOUT, out _); if(!sense) { - csd = Decoders.MMC.Decoders.DecodeCSD(cmdBuf); + CSD csd = Decoders.MMC.Decoders.DecodeCSD(cmdBuf); results.Blocks = (ulong)((csd.Size + 1) * Math.Pow(2, csd.SizeMultiplier + 2)); blockSize = (uint)Math.Pow(2, csd.ReadBlockLength); } @@ -89,12 +83,10 @@ namespace DiscImageChef.Core.Devices.Scanning } case DeviceType.SecureDigital: { - Decoders.SecureDigital.CSD csd = new Decoders.SecureDigital.CSD(); - - sense = dev.ReadCsd(out cmdBuf, out response, timeout, out duration); + sense = dev.ReadCsd(out cmdBuf, out _, TIMEOUT, out _); if(!sense) { - csd = Decoders.SecureDigital.Decoders.DecodeCSD(cmdBuf); + Decoders.SecureDigital.CSD csd = Decoders.SecureDigital.Decoders.DecodeCSD(cmdBuf); results.Blocks = (ulong)(csd.Structure == 0 ? (csd.Size + 1) * Math.Pow(2, csd.SizeMultiplier + 2) : (csd.Size + 1) * 1024); @@ -112,11 +104,9 @@ namespace DiscImageChef.Core.Devices.Scanning return results; } - sense = true; - while(true) { - sense = dev.Read(out cmdBuf, out response, 0, blockSize, blocksToRead, byteAddressed, timeout, + sense = dev.Read(out cmdBuf, out _, 0, blockSize, blocksToRead, byteAddressed, TIMEOUT, out duration); if(sense) blocksToRead /= 2; @@ -126,7 +116,6 @@ namespace DiscImageChef.Core.Devices.Scanning if(sense) { - blocksToRead = 1; DicConsole.ErrorWriteLine("Device error {0} trying to guess ideal transfer length.", dev.LastError); return results; } @@ -150,19 +139,15 @@ namespace DiscImageChef.Core.Devices.Scanning results.SeekTotal = 0; const int SEEK_TIMES = 1000; - double seekCur = 0; - Random rnd = new Random(); - uint seekPos = (uint)rnd.Next((int)results.Blocks); - aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; DicConsole.WriteLine("Reading {0} sectors at a time.", blocksToRead); - mhddLog = new MhddLog(mhddLogPath, dev, results.Blocks, blockSize, blocksToRead); - ibgLog = new IbgLog(ibgLogPath, currentProfile); + MhddLog mhddLog = new MhddLog(mhddLogPath, dev, results.Blocks, blockSize, blocksToRead); + IbgLog ibgLog = new IbgLog(ibgLogPath, SD_PROFILE); start = DateTime.UtcNow; for(ulong i = 0; i < results.Blocks; i += blocksToRead) @@ -178,8 +163,8 @@ namespace DiscImageChef.Core.Devices.Scanning DicConsole.Write("\rReading sector {0} of {1} ({2:F3} MiB/sec.)", i, results.Blocks, currentSpeed); - bool error = dev.Read(out cmdBuf, out response, (uint)i, blockSize, blocksToRead, byteAddressed, - timeout, out duration); + bool error = dev.Read(out cmdBuf, out _, (uint)i, blockSize, blocksToRead, byteAddressed, + TIMEOUT, out duration); if(!error) { @@ -198,8 +183,7 @@ namespace DiscImageChef.Core.Devices.Scanning results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); - if(duration < 500) mhddLog.Write(i, 65535); - else mhddLog.Write(i, duration); + mhddLog.Write(i, duration < 500 ? 65535 : duration); ibgLog.Write(i, 0); } @@ -219,12 +203,12 @@ namespace DiscImageChef.Core.Devices.Scanning { if(aborted) break; - seekPos = (uint)rnd.Next((int)results.Blocks); + uint seekPos = (uint)rnd.Next((int)results.Blocks); DicConsole.Write("\rSeeking to sector {0}...\t\t", seekPos); - dev.Read(out cmdBuf, out response, seekPos, blockSize, blocksToRead, byteAddressed, timeout, - out seekCur); + dev.Read(out cmdBuf, out _, seekPos, blockSize, blocksToRead, byteAddressed, TIMEOUT, + out double seekCur); #pragma warning disable RECS0018 // Comparison of floating point numbers with equality operator if(seekCur > results.SeekMax && seekCur != 0) results.SeekMax = seekCur; diff --git a/DiscImageChef.Core/ImageFormat.cs b/DiscImageChef.Core/ImageFormat.cs index b86b663b2..79f5a41dd 100644 --- a/DiscImageChef.Core/ImageFormat.cs +++ b/DiscImageChef.Core/ImageFormat.cs @@ -44,11 +44,10 @@ namespace DiscImageChef.Core { try { - ImagePlugin imageFormat; PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(); - imageFormat = null; + ImagePlugin imageFormat = null; // Check all but RAW plugin foreach(ImagePlugin imageplugin in plugins.ImagePluginsList.Values.Where(imageplugin => imageplugin.PluginUuid != new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))) try @@ -60,10 +59,12 @@ namespace DiscImageChef.Core break; } #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body - catch { } + catch { // ignored + } + + if(imageFormat != null) return imageFormat; // Check only RAW plugin - if(imageFormat == null) foreach(ImagePlugin imageplugin in plugins.ImagePluginsList.Values.Where(imageplugin => imageplugin.PluginUuid == new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))) try { DicConsole.DebugWriteLine("Format detection", "Trying plugin {0}", imageplugin.Name); @@ -73,11 +74,10 @@ namespace DiscImageChef.Core break; } #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body - catch { } + catch { // ignored + } // Still not recognized - if(imageFormat == null) return null; - return imageFormat; } catch { return null; } diff --git a/DiscImageChef.Core/Logging/MHDDLog.cs b/DiscImageChef.Core/Logging/MHDDLog.cs index b0764538b..1d7077f3a 100644 --- a/DiscImageChef.Core/Logging/MHDDLog.cs +++ b/DiscImageChef.Core/Logging/MHDDLog.cs @@ -48,14 +48,7 @@ namespace DiscImageChef.Core.Logging mhddFs = new FileStream(outputFile, FileMode.Create); - string device; string mode; - string fw; - string sn; - string sectors; - string sectorsize; - string scanblocksize; - string ver; switch(dev.Type) { @@ -80,15 +73,15 @@ namespace DiscImageChef.Core.Logging break; } - device = $"DEVICE: {dev.Manufacturer} {dev.Model}"; - fw = $"F/W: {dev.Revision}"; - sn = $"S/N: {dev.Serial}"; - sectors = string.Format(new CultureInfo("en-US"), "SECTORS: {0:n0}", blocks); - sectorsize = string.Format(new CultureInfo("en-US"), "SECTOR SIZE: {0:n0} bytes", - blockSize); - scanblocksize = string.Format(new CultureInfo("en-US"), - "SCAN BLOCK SIZE: {0:n0} sectors", blocksToRead); - ver = "VER:2 "; + string device = $"DEVICE: {dev.Manufacturer} {dev.Model}"; + string fw = $"F/W: {dev.Revision}"; + string sn = $"S/N: {dev.Serial}"; + string sectors = string.Format(new CultureInfo("en-US"), "SECTORS: {0:n0}", blocks); + string sectorsize = string.Format(new CultureInfo("en-US"), "SECTOR SIZE: {0:n0} bytes", + blockSize); + string scanblocksize = string.Format(new CultureInfo("en-US"), + "SCAN BLOCK SIZE: {0:n0} sectors", blocksToRead); + const string MHDD_VER = "VER:2 "; byte[] deviceBytes = Encoding.ASCII.GetBytes(device); byte[] modeBytes = Encoding.ASCII.GetBytes(mode); @@ -97,7 +90,7 @@ namespace DiscImageChef.Core.Logging byte[] sectorsBytes = Encoding.ASCII.GetBytes(sectors); byte[] sectorsizeBytes = Encoding.ASCII.GetBytes(sectorsize); byte[] scanblocksizeBytes = Encoding.ASCII.GetBytes(scanblocksize); - byte[] verBytes = Encoding.ASCII.GetBytes(ver); + byte[] verBytes = Encoding.ASCII.GetBytes(MHDD_VER); uint pointer = (uint)(deviceBytes.Length + modeBytes.Length + fwBytes.Length + snBytes.Length + sectorsBytes.Length + sectorsizeBytes.Length + scanblocksizeBytes.Length + diff --git a/DiscImageChef.Core/Partitions.cs b/DiscImageChef.Core/Partitions.cs index 5f7bed736..9dcad7034 100644 --- a/DiscImageChef.Core/Partitions.cs +++ b/DiscImageChef.Core/Partitions.cs @@ -45,7 +45,7 @@ namespace DiscImageChef.Core { PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(); - List partitions = new List(); + List foundPartitions = new List(); List childPartitions = new List(); List checkedLocations = new List(); @@ -53,11 +53,11 @@ namespace DiscImageChef.Core if(image.ImageInfo.ImageHasPartitions) foreach(Partition imagePartition in image.GetPartitions()) { - foreach(PartitionPlugin _partplugin in plugins.PartPluginsList.Values) - if(_partplugin.GetInformation(image, out List _partitions, imagePartition.Start)) + foreach(PartitionPlugin partitionPlugin in plugins.PartPluginsList.Values) + if(partitionPlugin.GetInformation(image, out List partitions, imagePartition.Start)) { - partitions.AddRange(_partitions); - DicConsole.DebugWriteLine("Partitions", "Found {0} @ {1}", _partplugin.Name, + foundPartitions.AddRange(partitions); + DicConsole.DebugWriteLine("Partitions", "Found {0} @ {1}", partitionPlugin.Name, imagePartition.Start); } @@ -66,57 +66,57 @@ namespace DiscImageChef.Core // Getting all partitions at start of device else { - foreach(PartitionPlugin _partplugin in plugins.PartPluginsList.Values) - if(_partplugin.GetInformation(image, out List _partitions, 0)) + foreach(PartitionPlugin partitionPlugin in plugins.PartPluginsList.Values) + if(partitionPlugin.GetInformation(image, out List partitions, 0)) { - partitions.AddRange(_partitions); - DicConsole.DebugWriteLine("Partitions", "Found {0} @ 0", _partplugin.Name); + foundPartitions.AddRange(partitions); + DicConsole.DebugWriteLine("Partitions", "Found {0} @ 0", partitionPlugin.Name); } checkedLocations.Add(0); } - while(partitions.Count > 0) + while(foundPartitions.Count > 0) { - if(checkedLocations.Contains(partitions[0].Start)) + if(checkedLocations.Contains(foundPartitions[0].Start)) { - childPartitions.Add(partitions[0]); - partitions.RemoveAt(0); + childPartitions.Add(foundPartitions[0]); + foundPartitions.RemoveAt(0); continue; } List childs = new List(); - foreach(PartitionPlugin _partplugin in plugins.PartPluginsList.Values) + foreach(PartitionPlugin partitionPlugin in plugins.PartPluginsList.Values) { - DicConsole.DebugWriteLine("Partitions", "Trying {0} @ {1}", _partplugin.Name, partitions[0].Start); - if(!_partplugin.GetInformation(image, out List _partitions, partitions[0].Start)) + DicConsole.DebugWriteLine("Partitions", "Trying {0} @ {1}", partitionPlugin.Name, foundPartitions[0].Start); + if(!partitionPlugin.GetInformation(image, out List partitions, foundPartitions[0].Start)) continue; - DicConsole.DebugWriteLine("Partitions", "Found {0} @ {1}", _partplugin.Name, - partitions[0].Start); - childs.AddRange(_partitions); + DicConsole.DebugWriteLine("Partitions", "Found {0} @ {1}", partitionPlugin.Name, + foundPartitions[0].Start); + childs.AddRange(partitions); } - checkedLocations.Add(partitions[0].Start); + checkedLocations.Add(foundPartitions[0].Start); DicConsole.DebugWriteLine("Partitions", "Got {0} childs", childs.Count); if(childs.Count > 0) { - partitions.RemoveAt(0); + foundPartitions.RemoveAt(0); foreach(Partition child in childs) if(checkedLocations.Contains(child.Start)) childPartitions.Add(child); - else partitions.Add(child); + else foundPartitions.Add(child); } else { - childPartitions.Add(partitions[0]); - partitions.RemoveAt(0); + childPartitions.Add(foundPartitions[0]); + foundPartitions.RemoveAt(0); } - DicConsole.DebugWriteLine("Partitions", "Got {0} parents", partitions.Count); + DicConsole.DebugWriteLine("Partitions", "Got {0} parents", foundPartitions.Count); DicConsole.DebugWriteLine("Partitions", "Got {0} partitions", childPartitions.Count); } diff --git a/DiscImageChef.Core/PluginBase.cs b/DiscImageChef.Core/PluginBase.cs index 7af0fcc2e..e3a8ec75a 100644 --- a/DiscImageChef.Core/PluginBase.cs +++ b/DiscImageChef.Core/PluginBase.cs @@ -56,9 +56,7 @@ namespace DiscImageChef.Core public void RegisterAllPlugins(Encoding encoding = null) { - Assembly assembly; - - assembly = Assembly.GetAssembly(typeof(ImagePlugin)); + Assembly assembly = Assembly.GetAssembly(typeof(ImagePlugin)); foreach(Type type in assembly.GetTypes()) try diff --git a/DiscImageChef.Core/Remote.cs b/DiscImageChef.Core/Remote.cs index 63fd76d63..3d69cf505 100644 --- a/DiscImageChef.Core/Remote.cs +++ b/DiscImageChef.Core/Remote.cs @@ -73,7 +73,7 @@ namespace DiscImageChef.Core Stream data = response.GetResponseStream(); StreamReader reader = new StreamReader(data ?? throw new InvalidOperationException()); - string responseFromServer = reader.ReadToEnd(); + reader.ReadToEnd(); data.Close(); response.Close(); xmlStream.Close(); diff --git a/DiscImageChef.Core/Sidecar/BlockMedia.cs b/DiscImageChef.Core/Sidecar/BlockMedia.cs index abb1d0dd7..7a0a19bf5 100644 --- a/DiscImageChef.Core/Sidecar/BlockMedia.cs +++ b/DiscImageChef.Core/Sidecar/BlockMedia.cs @@ -313,7 +313,7 @@ namespace DiscImageChef.Core { if(!plugin.Identify(image, partitions[i])) continue; - plugin.GetInformation(image, partitions[i], out string foo); + plugin.GetInformation(image, partitions[i], out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); } @@ -346,7 +346,7 @@ namespace DiscImageChef.Core { if(!plugin.Identify(image, wholePart)) continue; - plugin.GetInformation(image, wholePart, out string foo); + plugin.GetInformation(image, wholePart, out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); } @@ -541,13 +541,17 @@ namespace DiscImageChef.Core for(byte t = scpImage.Header.start; t <= scpImage.Header.end; t++) { - BlockTrackType scpBlockTrackType = new BlockTrackType(); - scpBlockTrackType.Cylinder = t / image.ImageInfo.Heads; - scpBlockTrackType.Head = t % image.ImageInfo.Heads; - scpBlockTrackType.Image = new ImageType(); - scpBlockTrackType.Image.format = scpImage.GetImageFormat(); - scpBlockTrackType.Image.Value = Path.GetFileName(scpFilePath); - scpBlockTrackType.Image.offset = scpImage.Header.offsets[t]; + BlockTrackType scpBlockTrackType = new BlockTrackType + { + Cylinder = t / image.ImageInfo.Heads, + Head = t % image.ImageInfo.Heads, + Image = new ImageType + { + format = scpImage.GetImageFormat(), + Value = Path.GetFileName(scpFilePath), + offset = scpImage.Header.offsets[t] + } + }; if(scpBlockTrackType.Cylinder < image.ImageInfo.Cylinders) { @@ -626,17 +630,21 @@ namespace DiscImageChef.Core foreach(KeyValuePair kvp in kfImage.tracks) { - BlockTrackType kfBlockTrackType = new BlockTrackType(); - kfBlockTrackType.Cylinder = kvp.Key / image.ImageInfo.Heads; - kfBlockTrackType.Head = kvp.Key % image.ImageInfo.Heads; - kfBlockTrackType.Image = new ImageType(); - kfBlockTrackType.Image.format = kfImage.GetImageFormat(); - kfBlockTrackType.Image.Value = - kfDir - ? Path.Combine(Path.GetFileName(Path.GetDirectoryName(kvp.Value.GetBasePath())), - kvp.Value.GetFilename()) - : kvp.Value.GetFilename(); - kfBlockTrackType.Image.offset = 0; + BlockTrackType kfBlockTrackType = new BlockTrackType + { + Cylinder = kvp.Key / image.ImageInfo.Heads, + Head = kvp.Key % image.ImageInfo.Heads, + Image = new ImageType + { + format = kfImage.GetImageFormat(), + Value = kfDir + ? Path + .Combine(Path.GetFileName(Path.GetDirectoryName(kvp.Value.GetBasePath())), + kvp.Value.GetFilename()) + : kvp.Value.GetFilename(), + offset = 0 + } + }; if(kfBlockTrackType.Cylinder < image.ImageInfo.Cylinders) { @@ -697,12 +705,16 @@ namespace DiscImageChef.Core foreach(int t in dfiImage.TrackOffsets.Keys) { - BlockTrackType dfiBlockTrackType = new BlockTrackType(); - dfiBlockTrackType.Cylinder = t / image.ImageInfo.Heads; - dfiBlockTrackType.Head = t % image.ImageInfo.Heads; - dfiBlockTrackType.Image = new ImageType(); - dfiBlockTrackType.Image.format = dfiImage.GetImageFormat(); - dfiBlockTrackType.Image.Value = Path.GetFileName(dfiFilePath); + BlockTrackType dfiBlockTrackType = new BlockTrackType + { + Cylinder = t / image.ImageInfo.Heads, + Head = t % image.ImageInfo.Heads, + Image = new ImageType + { + format = dfiImage.GetImageFormat(), + Value = Path.GetFileName(dfiFilePath) + } + }; if(dfiBlockTrackType.Cylinder < image.ImageInfo.Cylinders) { diff --git a/DiscImageChef.Core/Sidecar/BlockTape.cs b/DiscImageChef.Core/Sidecar/BlockTape.cs index acfdaf6b9..a1b43e4eb 100644 --- a/DiscImageChef.Core/Sidecar/BlockTape.cs +++ b/DiscImageChef.Core/Sidecar/BlockTape.cs @@ -89,7 +89,7 @@ namespace DiscImageChef.Core Sequence = i }; - uint sectorsToRead = 512; + const uint SECTORS_TO_READ = 512; long sectors = fs.Length / blockSize; long doneSectors = 0; @@ -98,13 +98,13 @@ namespace DiscImageChef.Core { byte[] sector; - if(sectors - doneSectors >= sectorsToRead) + if(sectors - doneSectors >= SECTORS_TO_READ) { - sector = new byte[sectorsToRead * blockSize]; + sector = new byte[SECTORS_TO_READ * blockSize]; fs.Read(sector, 0, sector.Length); UpdateProgress2($"Hashing block {doneSectors} of {sectors} on file {i + 1} of {files.Count}", doneSectors, sectors); - doneSectors += sectorsToRead; + doneSectors += SECTORS_TO_READ; } else { diff --git a/DiscImageChef.Core/Sidecar/Events.cs b/DiscImageChef.Core/Sidecar/Events.cs index 37ae8b4c5..7ae6104e9 100644 --- a/DiscImageChef.Core/Sidecar/Events.cs +++ b/DiscImageChef.Core/Sidecar/Events.cs @@ -44,39 +44,37 @@ namespace DiscImageChef.Core public static void InitProgress() { - if(InitProgressEvent != null) InitProgressEvent(); + InitProgressEvent?.Invoke(); } public static void UpdateProgress(string text, long current, long maximum) { - if(UpdateProgressEvent != null) - UpdateProgressEvent(string.Format(text, current, maximum), current, maximum); + UpdateProgressEvent?.Invoke(string.Format(text, current, maximum), current, maximum); } public static void EndProgress() { - if(EndProgressEvent != null) EndProgressEvent(); + EndProgressEvent?.Invoke(); } public static void InitProgress2() { - if(InitProgressEvent2 != null) InitProgressEvent2(); + InitProgressEvent2?.Invoke(); } public static void UpdateProgress2(string text, long current, long maximum) { - if(UpdateProgressEvent2 != null) - UpdateProgressEvent2(string.Format(text, current, maximum), current, maximum); + UpdateProgressEvent2?.Invoke(string.Format(text, current, maximum), current, maximum); } public static void EndProgress2() { - if(EndProgressEvent2 != null) EndProgressEvent2(); + EndProgressEvent2?.Invoke(); } public static void UpdateStatus(string text, params object[] args) { - if(UpdateStatusEvent != null) UpdateStatusEvent(string.Format(text, args)); + UpdateStatusEvent?.Invoke(string.Format(text, args)); } } } \ No newline at end of file diff --git a/DiscImageChef.Core/Sidecar/OpticalDisc.cs b/DiscImageChef.Core/Sidecar/OpticalDisc.cs index 91d96fabf..329b35c6d 100644 --- a/DiscImageChef.Core/Sidecar/OpticalDisc.cs +++ b/DiscImageChef.Core/Sidecar/OpticalDisc.cs @@ -235,7 +235,7 @@ namespace DiscImageChef.Core try { List sessions = image.GetSessions(); - sidecar.OpticalDisc[0].Sessions = sessions != null ? sessions.Count : 1; + sidecar.OpticalDisc[0].Sessions = sessions?.Count ?? 1; } catch { sidecar.OpticalDisc[0].Sessions = 1; } @@ -473,7 +473,7 @@ namespace DiscImageChef.Core { if(!plugin.Identify(image, partitions[i])) continue; - plugin.GetInformation(image, partitions[i], out string foo); + plugin.GetInformation(image, partitions[i], out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); @@ -520,7 +520,7 @@ namespace DiscImageChef.Core { if(!plugin.Identify(image, xmlPart)) continue; - plugin.GetInformation(image, xmlPart, out string foo); + plugin.GetInformation(image, xmlPart, out _); lstFs.Add(plugin.XmlFSType); Statistics.AddFilesystem(plugin.XmlFSType.Type); diff --git a/DiscImageChef.Core/Statistics.cs b/DiscImageChef.Core/Statistics.cs index 3c499aabc..420460f27 100644 --- a/DiscImageChef.Core/Statistics.cs +++ b/DiscImageChef.Core/Statistics.cs @@ -173,7 +173,7 @@ namespace DiscImageChef.Core submitStatsLock = true; - var statsFiles = Directory.EnumerateFiles(Settings.Settings.StatsPath, "PartialStats_*.xml", + IEnumerable statsFiles = Directory.EnumerateFiles(Settings.Settings.StatsPath, "PartialStats_*.xml", SearchOption.TopDirectoryOnly); foreach(string statsFile in statsFiles) @@ -366,7 +366,7 @@ namespace DiscImageChef.Core CurrentStats.Filesystems.Add(nw); } - public static void AddPartition(string partition) + internal static void AddPartition(string partition) { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.PartitionStats) return; @@ -502,24 +502,28 @@ namespace DiscImageChef.Core if(old != null) AllStats.Devices.Remove(old); - DeviceStats nw = new DeviceStats(); - nw.Model = dev.Model; - nw.Manufacturer = dev.Manufacturer; - nw.Revision = dev.Revision; - nw.Bus = deviceBus; - nw.ManufacturerSpecified = true; + DeviceStats nw = new DeviceStats + { + Model = dev.Model, + Manufacturer = dev.Manufacturer, + Revision = dev.Revision, + Bus = deviceBus, + ManufacturerSpecified = true + }; AllStats.Devices.Add(nw); old = CurrentStats.Devices.FirstOrDefault(ds => ds.Manufacturer == dev.Manufacturer && ds.Model == dev.Model && ds.Revision == dev.Revision && ds.Bus == deviceBus); if(old != null) CurrentStats.Devices.Remove(old); - nw = new DeviceStats(); - nw.Model = dev.Model; - nw.Manufacturer = dev.Manufacturer; - nw.Revision = dev.Revision; - nw.Bus = deviceBus; - nw.ManufacturerSpecified = true; + nw = new DeviceStats + { + Model = dev.Model, + Manufacturer = dev.Manufacturer, + Revision = dev.Revision, + Bus = deviceBus, + ManufacturerSpecified = true + }; CurrentStats.Devices.Add(nw); } @@ -572,16 +576,10 @@ namespace DiscImageChef.Core { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.BenchmarkStats) return; - CurrentStats.Benchmark = new BenchmarkStats(); - CurrentStats.Benchmark.Checksum = new List(); - AllStats.Benchmark = new BenchmarkStats(); - AllStats.Benchmark.Checksum = new List(); + CurrentStats.Benchmark = new BenchmarkStats {Checksum = new List()}; + AllStats.Benchmark = new BenchmarkStats {Checksum = new List()}; - foreach(KeyValuePair kvp in checksums) - { - ChecksumStats st = new ChecksumStats(); - st.algorithm = kvp.Key; - st.Value = kvp.Value; + foreach(ChecksumStats st in checksums.Select(kvp => new ChecksumStats {algorithm = kvp.Key, Value = kvp.Value})) { CurrentStats.Benchmark.Checksum.Add(st); AllStats.Benchmark.Checksum.Add(st); } @@ -605,17 +603,12 @@ namespace DiscImageChef.Core if(CurrentStats.Verify == null) { - CurrentStats.Verify = new VerifyStats(); - CurrentStats.Verify.MediaImages = new VerifiedItems(); - CurrentStats.Verify.Sectors = new ScannedSectors(); + CurrentStats.Verify = + new VerifyStats {MediaImages = new VerifiedItems(), Sectors = new ScannedSectors()}; } if(AllStats.Verify == null) - { - AllStats.Verify = new VerifyStats(); - AllStats.Verify.MediaImages = new VerifiedItems(); - AllStats.Verify.Sectors = new ScannedSectors(); - } + { AllStats.Verify = new VerifyStats {MediaImages = new VerifiedItems(), Sectors = new ScannedSectors()}; } if(mediaVerified.HasValue) if(mediaVerified.Value) @@ -646,18 +639,10 @@ namespace DiscImageChef.Core if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaScanStats) return; if(CurrentStats.MediaScan == null) - { - CurrentStats.MediaScan = new MediaScanStats(); - CurrentStats.MediaScan.Sectors = new ScannedSectors(); - CurrentStats.MediaScan.Times = new TimeStats(); - } + { CurrentStats.MediaScan = new MediaScanStats {Sectors = new ScannedSectors(), Times = new TimeStats()}; } if(AllStats.MediaScan == null) - { - AllStats.MediaScan = new MediaScanStats(); - AllStats.MediaScan.Sectors = new ScannedSectors(); - AllStats.MediaScan.Times = new TimeStats(); - } + { AllStats.MediaScan = new MediaScanStats {Sectors = new ScannedSectors(), Times = new TimeStats()}; } CurrentStats.MediaScan.Sectors.Correct += correct; CurrentStats.MediaScan.Sectors.Error += error; diff --git a/DiscImageChef/Commands/DeviceReport.cs b/DiscImageChef/Commands/DeviceReport.cs index 3d399761a..fcad3bd48 100644 --- a/DiscImageChef/Commands/DeviceReport.cs +++ b/DiscImageChef/Commands/DeviceReport.cs @@ -80,7 +80,7 @@ namespace DiscImageChef.Commands break; case DeviceType.MMC: case DeviceType.SecureDigital: - SecureDigital.Report(dev, ref report, options.Debug, ref removable); + SecureDigital.Report(dev, ref report); break; case DeviceType.NVMe: Nvme.Report(dev, ref report, options.Debug, ref removable);