From 7f01bc5940aa106956671ecf0b2e416e821e63cd Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 19 Sep 2019 16:39:32 +0100 Subject: [PATCH] Add support for REV120. --- DONATING.md | 2 +- .../MediaTypeFromSCSI.cs | 561 ++++---- DiscImageChef.Core/Devices/Dumping/MMC.cs | 312 ++-- DiscImageChef.Core/Media/Info/ScsiInfo.cs | 1278 +++++++++-------- .../ZZZRawImage/Helpers.cs | 115 +- DiscImageChef/Commands/DeviceReport.cs | 586 ++++---- 6 files changed, 1511 insertions(+), 1343 deletions(-) diff --git a/DONATING.md b/DONATING.md index ddade7448..958f1d738 100644 --- a/DONATING.md +++ b/DONATING.md @@ -21,7 +21,7 @@ After adding enhanced support all drives will be given to the Canary Islands Com - Iomega Bernoulli - Iomega Ditto drive and tapes - Iomega JAZ and JAZ 2 -- Iomega REV 70Gb and 120Gb +- Iomega REV 70Gb - Iomega ZIP750 drive - LD-ROM drive and media - LTO drive and tapes diff --git a/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs b/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs index d4ff1cdce..f77c45911 100644 --- a/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs +++ b/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs @@ -40,7 +40,7 @@ using System; namespace DiscImageChef.CommonTypes { - #pragma warning disable RECS0063 // Warns when a culture-aware 'StartsWith' call is used by default. +#pragma warning disable RECS0063 // Warns when a culture-aware 'StartsWith' call is used by default. public static class MediaTypeFromScsi { /// @@ -55,27 +55,27 @@ namespace DiscImageChef.CommonTypes /// Size in bytes of each block /// public static MediaType Get(byte scsiPeripheralType, string vendor, string model, byte mediumType, - byte densityCode, ulong blocks, uint blockSize) + byte densityCode, ulong blocks, uint blockSize) { - switch(scsiPeripheralType) + switch (scsiPeripheralType) { // Direct access device case 0x00: // Simpilified access device case 0x0E: { - if(mediumType == 0x03 || mediumType == 0x05 || mediumType == 0x07) goto case 0x07; + if (mediumType == 0x03 || mediumType == 0x05 || mediumType == 0x07) goto case 0x07; - if(vendor.ToLowerInvariant() == "syquest") + if (vendor.ToLowerInvariant() == "syquest") { - if(blocks == 173400 && blockSize == 256) return MediaType.SQ400; + if (blocks == 173400 && blockSize == 256) return MediaType.SQ400; - if(blockSize != 512) return MediaType.Unknown; + if (blockSize != 512) return MediaType.Unknown; - if(model.ToLowerInvariant().StartsWith("syjet", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("syjet", StringComparison.Ordinal)) return MediaType.SyJet; - switch(blocks) + switch (blocks) { case 262144: return MediaType.EZ135; case 524288: return MediaType.SQ327; @@ -84,63 +84,65 @@ namespace DiscImageChef.CommonTypes return MediaType.Unknown; } - if(vendor.ToLowerInvariant().StartsWith("iomega", StringComparison.Ordinal) && - (model.ToLowerInvariant().StartsWith("clik", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("pocketzip", StringComparison.Ordinal)) && - blockSize == 512 && - blocks == 78882) return MediaType.PocketZip; + if (vendor.ToLowerInvariant().StartsWith("iomega", StringComparison.Ordinal) && + (model.ToLowerInvariant().StartsWith("clik", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("pocketzip", StringComparison.Ordinal)) && + blockSize == 512 && + blocks == 78882) return MediaType.PocketZip; - if(model.ToLowerInvariant().StartsWith("zip", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("zip", StringComparison.Ordinal)) { - if(blockSize != 512) return MediaType.Unknown; + if (blockSize != 512) return MediaType.Unknown; - if(blocks == 196608) return MediaType.ZIP100; + if (blocks == 196608) return MediaType.ZIP100; return blocks == 489532 ? MediaType.ZIP250 : MediaType.ZIP750; } - if(model.ToLowerInvariant().StartsWith("jaz", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("jaz", StringComparison.Ordinal)) { - if(blockSize != 512) return MediaType.Unknown; + if (blockSize != 512) return MediaType.Unknown; - if(blocks == 2091050) return MediaType.Jaz; + if (blocks == 2091050) return MediaType.Jaz; return blocks == 3915600 ? MediaType.Jaz2 : MediaType.Unknown; } - if(model.ToLowerInvariant().StartsWith("ls-", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ls-", StringComparison.Ordinal)) { - if(blockSize == 512) + if (blockSize == 512) { - if(blocks == 469504) return MediaType.LS240; - if(blocks == 246528) return MediaType.LS120; - if(blocks == 65536) return MediaType.FD32MB; - if(blocks == 2880) return MediaType.DOS_35_HD; - if(blocks == 1440) return MediaType.DOS_35_DS_DD_9; + if (blocks == 469504) return MediaType.LS240; + if (blocks == 246528) return MediaType.LS120; + if (blocks == 65536) return MediaType.FD32MB; + if (blocks == 2880) return MediaType.DOS_35_HD; + if (blocks == 1440) return MediaType.DOS_35_DS_DD_9; } - else if(blockSize == 1024) - if(blocks == 1232) + else if (blockSize == 1024) + { + if (blocks == 1232) return MediaType.NEC_35_HD_8; + } return MediaType.Unknown; } - if(model.ToLowerInvariant().StartsWith("rdx", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("rdx", StringComparison.Ordinal)) { - if(blockSize != 512) return MediaType.Unknown; + if (blockSize != 512) return MediaType.Unknown; return blocks == 625134256 ? MediaType.RDX320 : MediaType.RDX; } - switch(mediumType) + switch (mediumType) { case 0x01: - switch(blockSize) + switch (blockSize) { case 128: - switch(blocks) + switch (blocks) { - case 720: return MediaType.ATARI_525_SD; + case 720: return MediaType.ATARI_525_SD; case 1040: return MediaType.ATARI_525_DD; case 1898: return MediaType.IBM33FD_128; case 2002: return MediaType.ECMA_54; @@ -148,15 +150,15 @@ namespace DiscImageChef.CommonTypes break; case 256: - switch(blocks) + switch (blocks) { - case 322: return MediaType.ECMA_66; - case 400: return MediaType.ACORN_525_SS_SD_40; - case 455: return MediaType.Apple32SS; - case 560: return MediaType.Apple33SS; - case 640: return MediaType.ACORN_525_SS_DD_40; - case 720: return MediaType.ATARI_525_DD; - case 800: return MediaType.ACORN_525_SS_SD_80; + case 322: return MediaType.ECMA_66; + case 400: return MediaType.ACORN_525_SS_SD_40; + case 455: return MediaType.Apple32SS; + case 560: return MediaType.Apple33SS; + case 640: return MediaType.ACORN_525_SS_DD_40; + case 720: return MediaType.ATARI_525_DD; + case 800: return MediaType.ACORN_525_SS_SD_80; case 1121: return MediaType.IBM33FD_256; case 1280: return MediaType.ACORN_525_SS_DD_80; case 2002: return MediaType.RX02; @@ -164,22 +166,22 @@ namespace DiscImageChef.CommonTypes break; case 319: - switch(blocks) + switch (blocks) { case 256: return MediaType.IBM23FD; } break; case 512: - switch(blocks) + switch (blocks) { - case 320: return MediaType.DOS_525_DS_DD_8; - case 360: return MediaType.DOS_35_SS_DD_9; - case 610: return MediaType.IBM33FD_512; - case 630: return MediaType.Apricot_35; - case 640: return MediaType.DOS_35_SS_DD_8; - case 720: return MediaType.DOS_35_DS_DD_9; - case 800: return MediaType.AppleSonySS; + case 320: return MediaType.DOS_525_DS_DD_8; + case 360: return MediaType.DOS_35_SS_DD_9; + case 610: return MediaType.IBM33FD_512; + case 630: return MediaType.Apricot_35; + case 640: return MediaType.DOS_35_SS_DD_8; + case 720: return MediaType.DOS_35_DS_DD_9; + case 800: return MediaType.AppleSonySS; case 249850: return MediaType.ECMA_154; case 429975: return MediaType.ECMA_201_ROM; case 446325: return MediaType.ECMA_201; @@ -196,7 +198,7 @@ namespace DiscImageChef.CommonTypes break; case 1024: { - switch(blocks) + switch (blocks) { case 371371: return MediaType.ECMA_223; case 498526: return MediaType.ECMA_183; @@ -204,7 +206,7 @@ namespace DiscImageChef.CommonTypes case 637041: return MediaType.ECMA_184; case 936921: case 948770: return MediaType.ECMA_195; - case 1244621: return MediaType.ECMA_238; + case 1244621: return MediaType.ECMA_238; case 14476734: return MediaType.ECMA_260; case 24445990: return MediaType.ECMA_260_Double; } @@ -213,13 +215,13 @@ namespace DiscImageChef.CommonTypes break; case 2048: { - switch(blocks) + switch (blocks) { case 310352: // Found in real media case 318988: case 320332: case 321100: return MediaType.ECMA_239; - case 605846: return MediaType.GigaMo; + case 605846: return MediaType.GigaMo; case 1063146: return MediaType.GigaMo2; case 1128134: return MediaType.ECMA_280; case 2043664: return MediaType.ECMA_322_2k; @@ -230,7 +232,7 @@ namespace DiscImageChef.CommonTypes break; case 4096: { - switch(blocks) + switch (blocks) { case 1095840: return MediaType.ECMA_322; } @@ -239,7 +241,7 @@ namespace DiscImageChef.CommonTypes break; case 8192: { - switch(blocks) + switch (blocks) { case 1834348: return MediaType.UDO; case 3668759: return MediaType.UDO2_WORM; @@ -252,10 +254,10 @@ namespace DiscImageChef.CommonTypes return MediaType.Unknown; case 0x02: - switch(blockSize) + switch (blockSize) { case 128: - switch(blocks) + switch (blocks) { case 3848: return MediaType.IBM43FD_128; case 4004: return MediaType.ECMA_59; @@ -263,9 +265,9 @@ namespace DiscImageChef.CommonTypes break; case 256: - switch(blocks) + switch (blocks) { - case 910: return MediaType.Apple32DS; + case 910: return MediaType.Apple32DS; case 1120: return MediaType.Apple33DS; case 1280: return MediaType.ECMA_70; case 2560: return MediaType.ECMA_78; @@ -275,23 +277,23 @@ namespace DiscImageChef.CommonTypes break; case 512: - switch(blocks) + switch (blocks) { - case 640: return MediaType.DOS_525_DS_DD_8; - case 720: return MediaType.DOS_525_DS_DD_9; - case 1280: return MediaType.DOS_35_DS_DD_8; - case 1440: return MediaType.DOS_35_DS_DD_9; - case 1640: return MediaType.FDFORMAT_35_DD; - case 1760: return MediaType.CBM_AMIGA_35_DD; - case 2242: return MediaType.IBM53FD_512; - case 2332: return MediaType.ECMA_99_15; - case 2400: return MediaType.DOS_525_HD; - case 2788: return MediaType.FDFORMAT_525_HD; - case 2880: return MediaType.DOS_35_HD; - case 3360: return MediaType.DMF; - case 3444: return MediaType.FDFORMAT_35_HD; - case 3520: return MediaType.CBM_AMIGA_35_HD; - case 5760: return MediaType.DOS_35_ED; + case 640: return MediaType.DOS_525_DS_DD_8; + case 720: return MediaType.DOS_525_DS_DD_9; + case 1280: return MediaType.DOS_35_DS_DD_8; + case 1440: return MediaType.DOS_35_DS_DD_9; + case 1640: return MediaType.FDFORMAT_35_DD; + case 1760: return MediaType.CBM_AMIGA_35_DD; + case 2242: return MediaType.IBM53FD_512; + case 2332: return MediaType.ECMA_99_15; + case 2400: return MediaType.DOS_525_HD; + case 2788: return MediaType.FDFORMAT_525_HD; + case 2880: return MediaType.DOS_35_HD; + case 3360: return MediaType.DMF; + case 3444: return MediaType.FDFORMAT_35_HD; + case 3520: return MediaType.CBM_AMIGA_35_HD; + case 5760: return MediaType.DOS_35_ED; case 249850: return MediaType.ECMA_154; case 429975: return MediaType.ECMA_201_ROM; case 446325: return MediaType.ECMA_201; @@ -307,22 +309,22 @@ namespace DiscImageChef.CommonTypes break; case 1024: - switch(blocks) + switch (blocks) { - case 800: return MediaType.ACORN_35_DS_DD; - case 1600: return MediaType.ACORN_35_DS_HD; - case 1220: return MediaType.IBM53FD_1024; - case 1232: return MediaType.SHARP_35; - case 1268: return MediaType.ECMA_69_8; - case 1280: return MediaType.NEC_525_HD; - case 1316: return MediaType.ECMA_99_8; + case 800: return MediaType.ACORN_35_DS_DD; + case 1600: return MediaType.ACORN_35_DS_HD; + case 1220: return MediaType.IBM53FD_1024; + case 1232: return MediaType.SHARP_35; + case 1268: return MediaType.ECMA_69_8; + case 1280: return MediaType.NEC_525_HD; + case 1316: return MediaType.ECMA_99_8; case 371371: return MediaType.ECMA_223; case 498526: return MediaType.ECMA_183; case 603466: case 637041: return MediaType.ECMA_184; case 936921: case 948770: return MediaType.ECMA_195; - case 1244621: return MediaType.ECMA_238; + case 1244621: return MediaType.ECMA_238; case 14476734: return MediaType.ECMA_260; case 24445990: return MediaType.ECMA_260_Double; } @@ -330,13 +332,13 @@ namespace DiscImageChef.CommonTypes break; case 2048: { - switch(blocks) + switch (blocks) { case 310352: // Found in real media case 318988: case 320332: case 321100: return MediaType.ECMA_239; - case 605846: return MediaType.GigaMo; + case 605846: return MediaType.GigaMo; case 1063146: return MediaType.GigaMo2; case 1128134: return MediaType.ECMA_280; case 2043664: return MediaType.ECMA_322_2k; @@ -347,7 +349,7 @@ namespace DiscImageChef.CommonTypes break; case 4096: { - switch(blocks) + switch (blocks) { case 1095840: return MediaType.ECMA_322; } @@ -356,7 +358,7 @@ namespace DiscImageChef.CommonTypes break; case 8192: { - switch(blocks) + switch (blocks) { case 1834348: return MediaType.UDO; case 3668759: return MediaType.UDO2_WORM; @@ -371,10 +373,10 @@ namespace DiscImageChef.CommonTypes case 0x09: return MediaType.ECMA_54; case 0x0A: return MediaType.ECMA_59; case 0x0B: - switch(blockSize) + switch (blockSize) { - case 256: return MediaType.ECMA_69_26; - case 512: return MediaType.ECMA_69_15; + case 256: return MediaType.ECMA_69_26; + case 512: return MediaType.ECMA_69_15; case 1024: return MediaType.ECMA_69_8; } @@ -382,7 +384,7 @@ namespace DiscImageChef.CommonTypes case 0x0E: return MediaType.ECMA_66; case 0x12: return MediaType.ECMA_70; case 0x16: - switch(blockSize) + switch (blockSize) { case 256: return MediaType.ECMA_78; case 512: return MediaType.ECMA_78_2; @@ -390,19 +392,22 @@ namespace DiscImageChef.CommonTypes return MediaType.Unknown; case 0x1A: - switch(blockSize) + switch (blockSize) { - case 256: return MediaType.ECMA_99_26; - case 512: return MediaType.ECMA_99_15; + case 256: return MediaType.ECMA_99_26; + case 512: return MediaType.ECMA_99_15; case 1024: return MediaType.ECMA_99_8; } return MediaType.Unknown; case 0x1E: return MediaType.DOS_35_DS_DD_9; case 0x41: - switch(blocks) + switch (blocks) { + case 58620544: return MediaType.REV120; case 17090880: return MediaType.REV35; + // TODO: Unknown value + default: return MediaType.REV70; } break; @@ -410,13 +415,13 @@ namespace DiscImageChef.CommonTypes case 0x94: return MediaType.DOS_35_HD; } - switch(blockSize) + switch (blockSize) { case 128: { - switch(blocks) + switch (blocks) { - case 720: return MediaType.ATARI_525_SD; + case 720: return MediaType.ATARI_525_SD; case 1040: return MediaType.ATARI_525_ED; case 1898: return MediaType.IBM33FD_128; case 2002: return MediaType.ECMA_54; @@ -428,16 +433,16 @@ namespace DiscImageChef.CommonTypes break; case 256: { - switch(blocks) + switch (blocks) { - case 322: return MediaType.ECMA_66; - case 400: return MediaType.ACORN_525_SS_SD_40; - case 455: return MediaType.Apple32SS; - case 560: return MediaType.Apple33SS; - case 640: return MediaType.ACORN_525_SS_DD_40; - case 720: return MediaType.ATARI_525_DD; - case 800: return MediaType.ACORN_525_SS_SD_80; - case 910: return MediaType.Apple32DS; + case 322: return MediaType.ECMA_66; + case 400: return MediaType.ACORN_525_SS_SD_40; + case 455: return MediaType.Apple32SS; + case 560: return MediaType.Apple33SS; + case 640: return MediaType.ACORN_525_SS_DD_40; + case 720: return MediaType.ATARI_525_DD; + case 800: return MediaType.ACORN_525_SS_SD_80; + case 910: return MediaType.Apple32DS; case 1120: return MediaType.Apple33DS; case 1121: return MediaType.IBM33FD_256; case 1280: return MediaType.ECMA_70; @@ -450,7 +455,7 @@ namespace DiscImageChef.CommonTypes break; case 319: - switch(blocks) + switch (blocks) { case 256: return MediaType.IBM23FD; } @@ -458,14 +463,14 @@ namespace DiscImageChef.CommonTypes break; case 512: { - switch(blocks) + switch (blocks) { - case 320: return MediaType.DOS_525_SS_DD_8; - case 360: return MediaType.DOS_525_SS_DD_9; - case 610: return MediaType.IBM33FD_512; - case 640: return MediaType.DOS_525_DS_DD_8; - case 720: return MediaType.DOS_525_DS_DD_9; - case 800: return MediaType.AppleSonySS; + case 320: return MediaType.DOS_525_SS_DD_8; + case 360: return MediaType.DOS_525_SS_DD_9; + case 610: return MediaType.IBM33FD_512; + case 640: return MediaType.DOS_525_DS_DD_8; + case 720: return MediaType.DOS_525_DS_DD_9; + case 800: return MediaType.AppleSonySS; case 1280: return MediaType.DOS_35_DS_DD_8; case 1440: return MediaType.DOS_35_DS_DD_9; case 1600: return MediaType.ACORN_35_DS_DD; @@ -486,7 +491,7 @@ namespace DiscImageChef.CommonTypes break; case 1024: { - switch(blocks) + switch (blocks) { case 1220: return MediaType.IBM53FD_1024; case 1232: return MediaType.SHARP_35; @@ -505,10 +510,10 @@ namespace DiscImageChef.CommonTypes // Sequential access device case 0x01: { - switch(mediumType) + switch (mediumType) { case 0x00: - switch(densityCode) + switch (densityCode) { case 0x04: return MediaType.QIC11; case 0x05: return MediaType.QIC24; @@ -522,9 +527,9 @@ namespace DiscImageChef.CommonTypes case 0x28: return MediaType.IBM3490E; case 0x40: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO; - if(model.ToLowerInvariant().StartsWith("sdz", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("sdz", StringComparison.Ordinal)) return MediaType.SAIT1; break; @@ -532,7 +537,7 @@ namespace DiscImageChef.CommonTypes case 0x41: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO2; break; @@ -540,76 +545,76 @@ namespace DiscImageChef.CommonTypes case 0x42: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO2; - if(vendor.ToLowerInvariant() == "stk") return MediaType.T9840A; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T9840A; break; } case 0x43: { - if(vendor.ToLowerInvariant() == "stk") return MediaType.T9940A; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T9940A; break; } case 0x44: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO3; - if(vendor.ToLowerInvariant() == "stk") return MediaType.T9940B; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T9940B; break; } case 0x45: { - if(vendor.ToLowerInvariant() == "stk") return MediaType.T9840C; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T9840C; break; } case 0x46: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO4; - if(vendor.ToLowerInvariant() == "stk") return MediaType.T9840D; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T9840D; break; } case 0x4A: { - if(vendor.ToLowerInvariant() == "stk") return MediaType.T10000A; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T10000A; break; } case 0x4B: { - if(vendor.ToLowerInvariant() == "stk") return MediaType.T10000B; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T10000B; break; } case 0x4C: { - if(vendor.ToLowerInvariant() == "stk") return MediaType.T10000C; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T10000C; break; } case 0x4D: { - if(vendor.ToLowerInvariant() == "stk") return MediaType.T10000D; + if (vendor.ToLowerInvariant() == "stk") return MediaType.T10000D; break; } case 0x58: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO5; break; @@ -627,11 +632,11 @@ namespace DiscImageChef.CommonTypes break; case 0x01: { - switch(densityCode) + switch (densityCode) { case 0x44: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO3WORM; break; @@ -639,7 +644,7 @@ namespace DiscImageChef.CommonTypes case 0x46: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO4WORM; break; @@ -647,7 +652,7 @@ namespace DiscImageChef.CommonTypes case 0x58: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO5WORM; break; @@ -658,28 +663,31 @@ namespace DiscImageChef.CommonTypes break; case 0x18: { - switch(densityCode) + switch (densityCode) { case 0x00: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO; break; } - case 0x40: { return MediaType.LTO; } + case 0x40: + { + return MediaType.LTO; + } } } break; case 0x28: { - switch(densityCode) + switch (densityCode) { case 0x00: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO2; break; @@ -692,12 +700,12 @@ namespace DiscImageChef.CommonTypes break; case 0x33: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x25: { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) return MediaType.DDS3; break; @@ -708,12 +716,12 @@ namespace DiscImageChef.CommonTypes break; case 0x34: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x26: { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) return MediaType.DDS4; break; @@ -724,12 +732,12 @@ namespace DiscImageChef.CommonTypes break; case 0x35: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x47: { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) return MediaType.DAT72; break; @@ -740,12 +748,12 @@ namespace DiscImageChef.CommonTypes break; case 0x38: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x44: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO3; break; @@ -756,12 +764,12 @@ namespace DiscImageChef.CommonTypes break; case 0x3C: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x44: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO3WORM; break; @@ -772,12 +780,12 @@ namespace DiscImageChef.CommonTypes break; case 0x48: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x46: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO4; break; @@ -788,12 +796,12 @@ namespace DiscImageChef.CommonTypes break; case 0x4C: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x46: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO4WORM; break; @@ -804,12 +812,12 @@ namespace DiscImageChef.CommonTypes break; case 0x50: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x24: { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) return MediaType.DDS2; break; @@ -819,12 +827,12 @@ namespace DiscImageChef.CommonTypes break; case 0x58: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x58: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO5; break; @@ -835,12 +843,12 @@ namespace DiscImageChef.CommonTypes break; case 0x5C: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x58: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO5WORM; break; @@ -851,12 +859,12 @@ namespace DiscImageChef.CommonTypes break; case 0x68: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x5A: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO6; break; @@ -867,12 +875,12 @@ namespace DiscImageChef.CommonTypes break; case 0x6C: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x5A: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO6WORM; break; @@ -883,12 +891,12 @@ namespace DiscImageChef.CommonTypes break; case 0x78: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x5C: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO7; break; @@ -899,12 +907,12 @@ namespace DiscImageChef.CommonTypes break; case 0x7C: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x5C: { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) return MediaType.LTO7WORM; break; @@ -915,14 +923,14 @@ namespace DiscImageChef.CommonTypes break; case 0x81: { - switch(densityCode) + switch (densityCode) { case 0x00: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape15m; - if(vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) + if (vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; + if (model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) return MediaType.VXA1; break; @@ -934,7 +942,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape15m; break; @@ -943,14 +951,14 @@ namespace DiscImageChef.CommonTypes case 0x29: case 0x2A: { - if(vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; + if (vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; break; } case 0x80: { - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) return MediaType.VXA1; break; @@ -961,20 +969,20 @@ namespace DiscImageChef.CommonTypes break; case 0x82: { - switch(densityCode) + switch (densityCode) { case 0x00: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape28m; - if(vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; + if (vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; break; } case 0x0A: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) return MediaType.CompactTapeI; break; @@ -986,7 +994,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape28m; break; @@ -994,7 +1002,7 @@ namespace DiscImageChef.CommonTypes case 0x16: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) return MediaType.CompactTapeII; break; @@ -1003,14 +1011,14 @@ namespace DiscImageChef.CommonTypes case 0x29: case 0x2A: { - if(vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; + if (vendor.ToLowerInvariant() == "ibm") return MediaType.IBM3592; break; } case 0x81: { - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) return MediaType.VXA2; break; @@ -1018,7 +1026,7 @@ namespace DiscImageChef.CommonTypes case 0x82: { - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) return MediaType.VXA3; break; @@ -1029,13 +1037,13 @@ namespace DiscImageChef.CommonTypes break; case 0x83: { - switch(densityCode) + switch (densityCode) { case 0x00: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape54m; - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) return MediaType.DLTtapeIII; break; @@ -1047,7 +1055,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape54m; break; @@ -1059,7 +1067,7 @@ namespace DiscImageChef.CommonTypes case 0x80: case 0x81: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) return MediaType.DLTtapeIII; break; @@ -1070,13 +1078,13 @@ namespace DiscImageChef.CommonTypes break; case 0x84: { - switch(densityCode) + switch (densityCode) { case 0x00: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape80m; - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) return MediaType.DLTtapeIIIxt; break; @@ -1088,7 +1096,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape80m; break; @@ -1098,7 +1106,7 @@ namespace DiscImageChef.CommonTypes case 0x80: case 0x81: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) return MediaType.DLTtapeIIIxt; break; @@ -1109,17 +1117,17 @@ namespace DiscImageChef.CommonTypes break; case 0x85: { - switch(densityCode) + switch (densityCode) { case 0x00: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape106m; - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) return MediaType.DLTtapeIV; - if(model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) return MediaType.Travan5; break; @@ -1131,7 +1139,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape106m; break; @@ -1150,9 +1158,9 @@ namespace DiscImageChef.CommonTypes case 0x88: case 0x89: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) return MediaType.DLTtapeIV; break; @@ -1160,7 +1168,7 @@ namespace DiscImageChef.CommonTypes case 0x46: { - if(model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) return MediaType.Travan5; break; @@ -1171,16 +1179,16 @@ namespace DiscImageChef.CommonTypes break; case 0x86: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape160mXL; - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) return MediaType.SDLT1; break; @@ -1188,7 +1196,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape160mXL; break; @@ -1198,9 +1206,9 @@ namespace DiscImageChef.CommonTypes case 0x92: case 0x93: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) return MediaType.SDLT1; break; @@ -1211,14 +1219,14 @@ namespace DiscImageChef.CommonTypes break; case 0x87: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x4A: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) return MediaType.SDLT2; break; @@ -1229,16 +1237,16 @@ namespace DiscImageChef.CommonTypes break; case 0x90: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x50: case 0x98: case 0x99: { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || + model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) return MediaType.VStapeI; break; @@ -1249,14 +1257,14 @@ namespace DiscImageChef.CommonTypes break; case 0x95: { - if(model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) return MediaType.Travan7; } break; case 0xC1: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x14: @@ -1264,7 +1272,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape22m; break; @@ -1275,7 +1283,7 @@ namespace DiscImageChef.CommonTypes break; case 0xC2: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x14: @@ -1284,7 +1292,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape40m; break; @@ -1295,7 +1303,7 @@ namespace DiscImageChef.CommonTypes break; case 0xC3: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x14: @@ -1304,7 +1312,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape76m; break; @@ -1315,7 +1323,7 @@ namespace DiscImageChef.CommonTypes break; case 0xC4: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x14: @@ -1324,7 +1332,7 @@ namespace DiscImageChef.CommonTypes case 0x8C: case 0x90: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape112m; break; @@ -1335,13 +1343,13 @@ namespace DiscImageChef.CommonTypes break; case 0xD1: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x27: case 0x28: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape22mAME; break; @@ -1352,13 +1360,13 @@ namespace DiscImageChef.CommonTypes break; case 0xD2: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x27: case 0x28: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape170m; break; @@ -1369,13 +1377,13 @@ namespace DiscImageChef.CommonTypes break; case 0xD3: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x27: case 0x28: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape125m; break; @@ -1386,13 +1394,13 @@ namespace DiscImageChef.CommonTypes break; case 0xD4: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x27: case 0x28: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape45m; break; @@ -1403,13 +1411,13 @@ namespace DiscImageChef.CommonTypes break; case 0xD5: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x27: case 0x28: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape225m; break; @@ -1420,13 +1428,13 @@ namespace DiscImageChef.CommonTypes break; case 0xD6: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x27: case 0x28: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape150m; break; @@ -1437,13 +1445,13 @@ namespace DiscImageChef.CommonTypes break; case 0xD7: { - switch(densityCode) + switch (densityCode) { case 0x00: case 0x27: case 0x28: { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) + if (model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) return MediaType.Exatape75m; break; @@ -1462,14 +1470,14 @@ namespace DiscImageChef.CommonTypes // Optical device case 0x07: { - if(mediumType != 0x01 && mediumType != 0x02 && mediumType != 0x03 && mediumType != 0x05 && - mediumType != 0x07) return MediaType.UnknownMO; + if (mediumType != 0x01 && mediumType != 0x02 && mediumType != 0x03 && mediumType != 0x05 && + mediumType != 0x07) return MediaType.UnknownMO; - switch(blockSize) + switch (blockSize) { case 512: { - switch(blocks) + switch (blocks) { case 249850: return MediaType.ECMA_154; case 429975: return MediaType.ECMA_201_ROM; @@ -1488,7 +1496,7 @@ namespace DiscImageChef.CommonTypes case 1024: { - switch(blocks) + switch (blocks) { case 371371: return MediaType.ECMA_223; case 498526: return MediaType.ECMA_183; @@ -1496,47 +1504,47 @@ namespace DiscImageChef.CommonTypes case 637041: return MediaType.ECMA_184; case 936921: case 948770: return MediaType.ECMA_195; - case 1244621: return MediaType.ECMA_238; + case 1244621: return MediaType.ECMA_238; case 14476734: return MediaType.ECMA_260; case 24445990: return MediaType.ECMA_260_Double; - default: return MediaType.UnknownMO; + default: return MediaType.UnknownMO; } } case 2048: { - switch(blocks) + switch (blocks) { case 310352: // Found in real media case 318988: case 320332: case 321100: return MediaType.ECMA_239; - case 605846: return MediaType.GigaMo; + case 605846: return MediaType.GigaMo; case 1063146: return MediaType.GigaMo2; case 1128134: return MediaType.ECMA_280; case 2043664: return MediaType.ECMA_322_2k; case 7355716: return MediaType.ECMA_317; - default: return MediaType.UnknownMO; + default: return MediaType.UnknownMO; } } case 4096: { - switch(blocks) + switch (blocks) { case 1095840: return MediaType.ECMA_322; - default: return MediaType.UnknownMO; + default: return MediaType.UnknownMO; } } case 8192: { - switch(blocks) + switch (blocks) { case 1834348: return MediaType.UDO; case 3668759: return MediaType.UDO2_WORM; case 3669724: return MediaType.UDO2; - default: return MediaType.UnknownMO; + default: return MediaType.UnknownMO; } } @@ -1547,14 +1555,14 @@ namespace DiscImageChef.CommonTypes // MultiMedia Device case 0x05: { - switch(mediumType) + switch (mediumType) { case 0x00: return blockSize == 512 - ? blocks == 1281856 - ? MediaType.PD650_WORM - : MediaType.PD650 - : MediaType.CD; + ? blocks == 1281856 + ? MediaType.PD650_WORM + : MediaType.PD650 + : MediaType.CD; case 0x01: case 0x05: return MediaType.CDROM; case 0x02: @@ -1581,8 +1589,8 @@ namespace DiscImageChef.CommonTypes case 0x27: case 0x28: return MediaType.CDRW; case 0x80: - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - switch(densityCode) + if (model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) + switch (densityCode) { case 0x42: return MediaType.LTO2; case 0x44: return MediaType.LTO3; @@ -1596,11 +1604,14 @@ namespace DiscImageChef.CommonTypes break; // Host managed zoned block device - case 0x14: { return MediaType.Zone_HDD; } + case 0x14: + { + return MediaType.Zone_HDD; + } } return MediaType.Unknown; } } - #pragma warning restore RECS0063 // Warns when a culture-aware 'StartsWith' call is used by default. +#pragma warning restore RECS0063 // Warns when a culture-aware 'StartsWith' call is used by default. } \ No newline at end of file diff --git a/DiscImageChef.Core/Devices/Dumping/MMC.cs b/DiscImageChef.Core/Devices/Dumping/MMC.cs index 53cedcf34..436eb3069 100644 --- a/DiscImageChef.Core/Devices/Dumping/MMC.cs +++ b/DiscImageChef.Core/Devices/Dumping/MMC.cs @@ -56,20 +56,20 @@ namespace DiscImageChef.Core.Devices.Dumping /// internal void Mmc(ref MediaType dskType) { - bool sense; + bool sense; byte[] tmpBuf; - bool compactDisc = true; - bool isXbox = false; + var compactDisc = true; + var isXbox = false; // TODO: Log not only what is it reading, but if it was read correctly or not. - sense = dev.GetConfiguration(out byte[] cmdBuf, out _, 0, MmcGetConfigurationRt.Current, dev.Timeout, - out _); - if(!sense) + sense = dev.GetConfiguration(out var cmdBuf, out _, 0, MmcGetConfigurationRt.Current, dev.Timeout, + out _); + if (!sense) { - Features.SeparatedFeatures ftr = Features.Separate(cmdBuf); + var ftr = Features.Separate(cmdBuf); dumpLog.WriteLine("Device reports current profile is 0x{0:X4}", ftr.CurrentProfile); - switch(ftr.CurrentProfile) + switch (ftr.CurrentProfile) { case 0x0001: dskType = MediaType.GENERIC_HDD; @@ -167,45 +167,53 @@ namespace DiscImageChef.Core.Devices.Dumping } } - if(compactDisc) + if (compactDisc) { CompactDisc(ref dskType); return; } - Reader scsiReader = new Reader(dev, dev.Timeout, null, dumpRaw); - ulong blocks = scsiReader.GetDeviceBlocks(); + var scsiReader = new Reader(dev, dev.Timeout, null, dumpRaw); + var blocks = scsiReader.GetDeviceBlocks(); dumpLog.WriteLine("Device reports disc has {0} blocks", blocks); - Dictionary mediaTags = new Dictionary(); + var mediaTags = new Dictionary(); - if(dskType == MediaType.PD650) - switch(blocks + 1) + if (dskType == MediaType.PD650) + switch (blocks + 1) { case 1281856: dskType = MediaType.PD650_WORM; break; + case 58620544: + dskType = MediaType.REV120; + break; case 17090880: dskType = MediaType.REV35; break; + // TODO: Unknown value + default: + dskType = MediaType.REV70; + break; } #region Nintendo - switch(dskType) + + switch (dskType) { case MediaType.Unknown when blocks > 0: dumpLog.WriteLine("Reading Physical Format Information"); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); + if (!sense) { - PFI.PhysicalFormatInformation? nintendoPfi = PFI.Decode(cmdBuf); - if(nintendoPfi != null) - if(nintendoPfi.Value.DiskCategory == DiskCategory.Nintendo && - nintendoPfi.Value.PartVersion == 15) + var nintendoPfi = PFI.Decode(cmdBuf); + if (nintendoPfi != null) + if (nintendoPfi.Value.DiskCategory == DiskCategory.Nintendo && + nintendoPfi.Value.PartVersion == 15) { dumpLog.WriteLine("Dumping Nintendo GameCube or Wii discs is not yet implemented."); StoppingErrorMessage - ?.Invoke("Dumping Nintendo GameCube or Wii discs is not yet implemented."); + ?.Invoke("Dumping Nintendo GameCube or Wii discs is not yet implemented."); return; } } @@ -230,20 +238,20 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.HDDVDRWDL: dumpLog.WriteLine("Reading Physical Format Information"); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); - if(!sense) - if(PFI.Decode(cmdBuf).HasValue) + MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); + if (!sense) + if (PFI.Decode(cmdBuf).HasValue) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); mediaTags.Add(MediaTagType.DVD_PFI, tmpBuf); - PFI.PhysicalFormatInformation decPfi = PFI.Decode(cmdBuf).Value; + var decPfi = PFI.Decode(cmdBuf).Value; UpdateStatus?.Invoke($"PFI:\n{PFI.Prettify(decPfi)}"); // False book types - if(dskType == MediaType.DVDROM) - switch(decPfi.DiskCategory) + if (dskType == MediaType.DVDROM) + switch (decPfi.DiskCategory) { case DiskCategory.DVDPR: dskType = MediaType.DVDPR; @@ -292,39 +300,43 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading Disc Manufacturing Information"); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, - out _); - if(!sense) + MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, + out _); + if (!sense) { - if(DMI.IsXbox(cmdBuf) || DMI.IsXbox360(cmdBuf)) + if (DMI.IsXbox(cmdBuf) || DMI.IsXbox360(cmdBuf)) { - if(DMI.IsXbox(cmdBuf)) dskType = MediaType.XGD; - else if(DMI.IsXbox360(cmdBuf)) + if (DMI.IsXbox(cmdBuf)) + { + dskType = MediaType.XGD; + } + else if (DMI.IsXbox360(cmdBuf)) { dskType = MediaType.XGD2; // All XGD3 all have the same number of blocks - if(blocks == 25063 || // Locked (or non compatible drive) - blocks == 4229664 || // Xtreme unlock - blocks == 4246304) // Wxripper unlock + if (blocks == 25063 || // Locked (or non compatible drive) + blocks == 4229664 || // Xtreme unlock + blocks == 4246304) // Wxripper unlock dskType = MediaType.XGD3; } - sense = dev.ScsiInquiry(out byte[] inqBuf, out _); + sense = dev.ScsiInquiry(out var inqBuf, out _); - if(sense || !Inquiry.Decode(inqBuf).HasValue || Inquiry.Decode(inqBuf).HasValue && - !Inquiry.Decode(inqBuf).Value.KreonPresent) + if (sense || !Inquiry.Decode(inqBuf).HasValue || Inquiry.Decode(inqBuf).HasValue && + !Inquiry.Decode(inqBuf).Value.KreonPresent) { dumpLog.WriteLine("Dumping Xbox Game Discs requires a drive with Kreon firmware."); StoppingErrorMessage - ?.Invoke("Dumping Xbox Game Discs requires a drive with Kreon firmware."); + ?.Invoke("Dumping Xbox Game Discs requires a drive with Kreon firmware."); return; } - if(dumpRaw && !force) + if (dumpRaw && !force) { StoppingErrorMessage - ?.Invoke("Not continuing. If you want to continue reading cooked data when raw is not available use the force option."); + ?.Invoke( + "Not continuing. If you want to continue reading cooked data when raw is not available use the force option."); // TODO: Exit more gracefully return; } @@ -332,7 +344,7 @@ namespace DiscImageChef.Core.Devices.Dumping isXbox = true; } - if(cmdBuf.Length == 2052) + if (cmdBuf.Length == 2052) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -342,37 +354,42 @@ namespace DiscImageChef.Core.Devices.Dumping break; } + #endregion Nintendo #region All DVD and HD DVD types + #endregion All DVD and HD DVD types #region DVD-ROM - if(dskType == MediaType.DVDDownload || dskType == MediaType.DVDROM) + + if (dskType == MediaType.DVDDownload || dskType == MediaType.DVDROM) { dumpLog.WriteLine("Reading Lead-in Copyright Information."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.CopyrightInformation, 0, dev.Timeout, out _); - if(!sense) - if(CSS_CPRM.DecodeLeadInCopyright(cmdBuf).HasValue) + MmcDiscStructureFormat.CopyrightInformation, 0, dev.Timeout, out _); + if (!sense) + if (CSS_CPRM.DecodeLeadInCopyright(cmdBuf).HasValue) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); mediaTags.Add(MediaTagType.DVD_CMI, tmpBuf); } } + #endregion DVD-ROM - switch(dskType) + switch (dskType) { #region DVD-ROM and HD DVD-ROM + case MediaType.DVDDownload: case MediaType.DVDROM: case MediaType.HDDVDROM: dumpLog.WriteLine("Reading Burst Cutting Area."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.BurstCuttingArea, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.BurstCuttingArea, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -380,16 +397,18 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion DVD-ROM and HD DVD-ROM #region DVD-RAM and HD DVD-RAM + case MediaType.DVDRAM: case MediaType.HDDVDRAM: dumpLog.WriteLine("Reading Disc Description Structure."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramDds, 0, dev.Timeout, out _); - if(!sense) - if(DDS.Decode(cmdBuf).HasValue) + MmcDiscStructureFormat.DvdramDds, 0, dev.Timeout, out _); + if (!sense) + if (DDS.Decode(cmdBuf).HasValue) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -398,10 +417,10 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading Spare Area Information."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramSpareAreaInformation, 0, dev.Timeout, - out _); - if(!sense) - if(Spare.Decode(cmdBuf).HasValue) + MmcDiscStructureFormat.DvdramSpareAreaInformation, 0, dev.Timeout, + out _); + if (!sense) + if (Spare.Decode(cmdBuf).HasValue) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -409,15 +428,17 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion DVD-RAM and HD DVD-RAM #region DVD-R and DVD-RW + case MediaType.DVDR: case MediaType.DVDRW: dumpLog.WriteLine("Reading Pre-Recorded Information."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PreRecordedInfo, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.PreRecordedInfo, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -425,19 +446,21 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion DVD-R and DVD-RW } - switch(dskType) + switch (dskType) { #region DVD-R, DVD-RW and HD DVD-R + case MediaType.DVDR: case MediaType.DVDRW: case MediaType.HDDVDR: dumpLog.WriteLine("Reading Media Identifier."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrMediaIdentifier, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.DvdrMediaIdentifier, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -446,9 +469,9 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading Recordable Physical Information."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrPhysicalInformation, 0, dev.Timeout, - out _); - if(!sense) + MmcDiscStructureFormat.DvdrPhysicalInformation, 0, dev.Timeout, + out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -456,17 +479,19 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion DVD-R, DVD-RW and HD DVD-R #region All DVD+ + case MediaType.DVDPR: case MediaType.DVDPRDL: case MediaType.DVDPRW: case MediaType.DVDPRWDL: dumpLog.WriteLine("Reading ADdress In Pregroove."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Adip, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.Adip, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -475,8 +500,8 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading Disc Control Blocks."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Dcb, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.Dcb, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -484,15 +509,17 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion All DVD+ #region HD DVD-ROM + case MediaType.HDDVDROM: dumpLog.WriteLine("Reading Lead-in Copyright Information."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.HddvdCopyrightInformation, 0, dev.Timeout, - out _); - if(!sense) + MmcDiscStructureFormat.HddvdCopyrightInformation, 0, dev.Timeout, + out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -500,9 +527,11 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion HD DVD-ROM #region All Blu-ray + case MediaType.BDR: case MediaType.BDRE: case MediaType.BDROM: @@ -510,9 +539,9 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaType.BDREXL: dumpLog.WriteLine("Reading Disc Information."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.DiscInformation, 0, dev.Timeout, out _); - if(!sense) - if(DI.Decode(cmdBuf).HasValue) + MmcDiscStructureFormat.DiscInformation, 0, dev.Timeout, out _); + if (!sense) + if (DI.Decode(cmdBuf).HasValue) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -531,17 +560,19 @@ namespace DiscImageChef.Core.Devices.Dumping mediaTags.Add(MediaTagType.PAC, tmpBuf); }*/ break; + #endregion All Blu-ray } - switch(dskType) + switch (dskType) { #region BD-ROM only + case MediaType.BDROM: dumpLog.WriteLine("Reading Burst Cutting Area."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdBurstCuttingArea, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.BdBurstCuttingArea, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -549,17 +580,19 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion BD-ROM only #region Writable Blu-ray only + case MediaType.BDR: case MediaType.BDRE: case MediaType.BDRXL: case MediaType.BDREXL: dumpLog.WriteLine("Reading Disc Definition Structure."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdDds, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.BdDds, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -568,8 +601,8 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Reading Spare Area Information."); sense = dev.ReadDiscStructure(out cmdBuf, out _, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdSpareAreaInformation, 0, dev.Timeout, out _); - if(!sense) + MmcDiscStructureFormat.BdSpareAreaInformation, 0, dev.Timeout, out _); + if (!sense) { tmpBuf = new byte[cmdBuf.Length - 4]; Array.Copy(cmdBuf, 4, tmpBuf, 0, cmdBuf.Length - 4); @@ -577,10 +610,11 @@ namespace DiscImageChef.Core.Devices.Dumping } break; + #endregion Writable Blu-ray only } - if(isXbox) + if (isXbox) { Xgd(mediaTags, ref dskType); return; @@ -589,25 +623,25 @@ namespace DiscImageChef.Core.Devices.Dumping Sbc(mediaTags, ref dskType, true); } - internal static void AddMediaTagToSidecar(string outputPath, - KeyValuePair tag, - ref CICMMetadataType sidecar) + internal static void AddMediaTagToSidecar(string outputPath, + KeyValuePair tag, + ref CICMMetadataType sidecar) { - switch(tag.Key) + switch (tag.Key) { case MediaTagType.DVD_PFI: sidecar.OpticalDisc[0].PFI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.DVD_DMI: sidecar.OpticalDisc[0].DMI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; @@ -615,18 +649,18 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaTagType.HDDVD_CPI: sidecar.OpticalDisc[0].CMI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; - byte[] tmp = new byte[tag.Value.Length + 4]; + var tmp = new byte[tag.Value.Length + 4]; Array.Copy(tag.Value, 0, tmp, 4, tag.Value.Length); - tmp[0] = (byte)((tag.Value.Length & 0xFF00) >> 8); - tmp[1] = (byte)(tag.Value.Length & 0xFF); + tmp[0] = (byte) ((tag.Value.Length & 0xFF00) >> 8); + tmp[1] = (byte) (tag.Value.Length & 0xFF); - CSS_CPRM.LeadInCopyright? cpy = CSS_CPRM.DecodeLeadInCopyright(tmp); - if(cpy.HasValue && cpy.Value.CopyrightType != CopyrightType.NoProtection) + var cpy = CSS_CPRM.DecodeLeadInCopyright(tmp); + if (cpy.HasValue && cpy.Value.CopyrightType != CopyrightType.NoProtection) sidecar.OpticalDisc[0].CopyProtection = cpy.Value.CopyrightType.ToString(); break; @@ -634,8 +668,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaTagType.BD_BCA: sidecar.OpticalDisc[0].BCA = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; @@ -643,8 +677,8 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaTagType.DVDRAM_DDS: sidecar.OpticalDisc[0].DDS = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; @@ -652,72 +686,72 @@ namespace DiscImageChef.Core.Devices.Dumping case MediaTagType.BD_SpareArea: sidecar.OpticalDisc[0].SAI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.DVDR_PreRecordedInfo: sidecar.OpticalDisc[0].PRI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.DVD_MediaIdentifier: sidecar.OpticalDisc[0].MediaID = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.DVDR_PFI: sidecar.OpticalDisc[0].PFIR = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.DVD_ADIP: sidecar.OpticalDisc[0].ADIP = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.DCB: sidecar.OpticalDisc[0].DCB = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.BD_DI: sidecar.OpticalDisc[0].DI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.Xbox_SecuritySector: - if(sidecar.OpticalDisc[0].Xbox == null) sidecar.OpticalDisc[0].Xbox = new XboxType(); + if (sidecar.OpticalDisc[0].Xbox == null) sidecar.OpticalDisc[0].Xbox = new XboxType(); sidecar.OpticalDisc[0].Xbox.SecuritySectors = new[] { new XboxSecuritySectorsType { - RequestNumber = 0, + RequestNumber = 0, RequestVersion = 1, SecuritySectors = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() } } @@ -725,54 +759,54 @@ namespace DiscImageChef.Core.Devices.Dumping break; case MediaTagType.Xbox_PFI: - if(sidecar.OpticalDisc[0].Xbox == null) sidecar.OpticalDisc[0].Xbox = new XboxType(); + if (sidecar.OpticalDisc[0].Xbox == null) sidecar.OpticalDisc[0].Xbox = new XboxType(); sidecar.OpticalDisc[0].Xbox.PFI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.Xbox_DMI: - if(sidecar.OpticalDisc[0].Xbox == null) sidecar.OpticalDisc[0].Xbox = new XboxType(); + if (sidecar.OpticalDisc[0].Xbox == null) sidecar.OpticalDisc[0].Xbox = new XboxType(); sidecar.OpticalDisc[0].Xbox.DMI = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.CD_FullTOC: sidecar.OpticalDisc[0].TOC = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.CD_ATIP: sidecar.OpticalDisc[0].ATIP = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.CD_PMA: sidecar.OpticalDisc[0].PMA = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; case MediaTagType.CD_TEXT: sidecar.OpticalDisc[0].LeadInCdText = new DumpType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() }; break; @@ -781,8 +815,8 @@ namespace DiscImageChef.Core.Devices.Dumping { new BorderType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() } }; @@ -792,8 +826,8 @@ namespace DiscImageChef.Core.Devices.Dumping { new BorderType { - Image = outputPath, - Size = (ulong)tag.Value.Length, + Image = outputPath, + Size = (ulong) tag.Value.Length, Checksums = Checksum.GetChecksums(tag.Value).ToArray() } }; diff --git a/DiscImageChef.Core/Media/Info/ScsiInfo.cs b/DiscImageChef.Core/Media/Info/ScsiInfo.cs index 71f04e741..7e257cf5a 100644 --- a/DiscImageChef.Core/Media/Info/ScsiInfo.cs +++ b/DiscImageChef.Core/Media/Info/ScsiInfo.cs @@ -56,37 +56,47 @@ namespace DiscImageChef.Core.Media.Info public class ScsiInfo { /// SHA256 of PlayStation 2 boot sectors, seen in PAL discs - const string PS2_PAL_HASH = "5d04ff236613e1d8adcf9c201874acd6f6deed1e04306558b86f91cfb626f39d"; + private const string PS2_PAL_HASH = "5d04ff236613e1d8adcf9c201874acd6f6deed1e04306558b86f91cfb626f39d"; + /// SHA256 of PlayStation 2 boot sectors, seen in Japanese, American, Malaysian and Korean discs - const string PS2_NTSC_HASH = "0bada1426e2c0351b872ef2a9ad2e5a0ac3918f4c53aa53329cb2911a8e16c23"; + private const string PS2_NTSC_HASH = "0bada1426e2c0351b872ef2a9ad2e5a0ac3918f4c53aa53329cb2911a8e16c23"; + /// SHA256 of PlayStation 2 boot sectors, seen in Japanese discs - const string PS2_JAPANESE_HASH = "b82bffb809070d61fe050b7e1545df53d8f3cc648257cdff7502bc0ba6b38870"; - static readonly byte[] Ps3Id = + private const string PS2_JAPANESE_HASH = "b82bffb809070d61fe050b7e1545df53d8f3cc648257cdff7502bc0ba6b38870"; + + private static readonly byte[] Ps3Id = { 0x50, 0x6C, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x33, 0x00, 0x00, 0x00, 0x00 }; - static readonly byte[] Ps4Id = + + private static readonly byte[] Ps4Id = { 0x50, 0x6C, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x34, 0x00, 0x00, 0x00, 0x00 }; - static readonly byte[] OperaId = {0x01, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x01}; + + private static readonly byte[] OperaId = {0x01, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x01}; + // Only present on bootable CDs, but those make more than 99% of all available - static readonly byte[] FmTownsBootId = {0x49, 0x50, 0x4C, 0x34, 0xEB, 0x55, 0x06}; + private static readonly byte[] FmTownsBootId = {0x49, 0x50, 0x4C, 0x34, 0xEB, 0x55, 0x06}; + /// Present on first two seconds of second track, says "COPYRIGHT BANDAI" - static readonly byte[] PlaydiaCopyright = + private static readonly byte[] PlaydiaCopyright = { 0x43, 0x4F, 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x42, 0x41, 0x4E, 0x44, 0x41, 0x49 }; - static readonly byte[] PcEngineSignature = + + private static readonly byte[] PcEngineSignature = { 0x50, 0x43, 0x20, 0x45, 0x6E, 0x67, 0x69, 0x6E, 0x65, 0x20, 0x43, 0x44, 0x2D, 0x52, 0x4F, 0x4D, 0x20, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4D }; - static readonly byte[] PcFxSignature = + + private static readonly byte[] PcFxSignature = { 0x50, 0x43, 0x2D, 0x46, 0x58, 0x3A, 0x48, 0x75, 0x5F, 0x43, 0x44, 0x2D, 0x52, 0x4F, 0x4D }; - static readonly byte[] AtariSignature = + + private static readonly byte[] AtariSignature = { 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, 0x49, 0x52, 0x54, 0x41, @@ -98,77 +108,77 @@ namespace DiscImageChef.Core.Media.Info public ScsiInfo(Device dev) { - if(dev.Type != DeviceType.SCSI && dev.Type != DeviceType.ATAPI) return; + if (dev.Type != DeviceType.SCSI && dev.Type != DeviceType.ATAPI) return; - MediaType = MediaType.Unknown; + MediaType = MediaType.Unknown; MediaInserted = false; - int resets = 0; - uint startOfFirstDataTrack = uint.MaxValue; - bool sense; + var resets = 0; + var startOfFirstDataTrack = uint.MaxValue; + bool sense; byte[] cmdBuf; byte[] senseBuf; - bool containsFloppyPage; - byte secondSessionFirstTrack = 0; + bool containsFloppyPage; + byte secondSessionFirstTrack = 0; - if(dev.IsRemovable) + if (dev.IsRemovable) { deviceGotReset: sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) { - FixedSense? decSense = Sense.DecodeFixed(senseBuf); - if(decSense.HasValue) + var decSense = Sense.DecodeFixed(senseBuf); + if (decSense.HasValue) { // Just retry, for 5 times - if(decSense.Value.ASC == 0x29) + if (decSense.Value.ASC == 0x29) { resets++; - if(resets < 5) goto deviceGotReset; + if (resets < 5) goto deviceGotReset; } - if(decSense.Value.ASC == 0x3A) + if (decSense.Value.ASC == 0x3A) { - int leftRetries = 5; - while(leftRetries > 0) + var leftRetries = 5; + while (leftRetries > 0) { //DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Please insert media in drive"); return; } } - else if(decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) + else if (decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) { - int leftRetries = 10; - while(leftRetries > 0) + var leftRetries = 10; + while (leftRetries > 0) { //DicConsole.WriteLine("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); return; } } else { DicConsole.ErrorWriteLine("Error testing unit was ready:\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); return; } } @@ -184,28 +194,28 @@ namespace DiscImageChef.Core.Media.Info DeviceInfo = new DeviceInfo(dev); - byte scsiMediumType = 0; + byte scsiMediumType = 0; byte scsiDensityCode = 0; containsFloppyPage = false; - if(DeviceInfo.ScsiMode.HasValue) + if (DeviceInfo.ScsiMode.HasValue) { - scsiMediumType = (byte)DeviceInfo.ScsiMode.Value.Header.MediumType; - if(DeviceInfo.ScsiMode.Value.Header.BlockDescriptors != null && - DeviceInfo.ScsiMode.Value.Header.BlockDescriptors.Length >= 1) - scsiDensityCode = (byte)DeviceInfo.ScsiMode.Value.Header.BlockDescriptors[0].Density; + scsiMediumType = (byte) DeviceInfo.ScsiMode.Value.Header.MediumType; + if (DeviceInfo.ScsiMode.Value.Header.BlockDescriptors != null && + DeviceInfo.ScsiMode.Value.Header.BlockDescriptors.Length >= 1) + scsiDensityCode = (byte) DeviceInfo.ScsiMode.Value.Header.BlockDescriptors[0].Density; - if(DeviceInfo.ScsiMode.Value.Pages != null) + if (DeviceInfo.ScsiMode.Value.Pages != null) containsFloppyPage = DeviceInfo.ScsiMode.Value.Pages.Aggregate(containsFloppyPage, - (current, modePage) => - current | (modePage.Page == 0x05)); + (current, modePage) => + current | (modePage.Page == 0x05)); } - Blocks = 0; + Blocks = 0; BlockSize = 0; - switch(dev.ScsiType) + switch (dev.ScsiType) { case PeripheralDeviceTypes.DirectAccess: case PeripheralDeviceTypes.MultiMediaDevice: @@ -214,62 +224,62 @@ namespace DiscImageChef.Core.Media.Info case PeripheralDeviceTypes.SimplifiedDevice: case PeripheralDeviceTypes.WriteOnceDevice: sense = dev.ReadCapacity(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(!sense) + if (!sense) { ReadCapacity = cmdBuf; - Blocks = (ulong)((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); - BlockSize = (uint)((cmdBuf[5] << 24) + (cmdBuf[5] << 16) + (cmdBuf[6] << 8) + cmdBuf[7]); + Blocks = (ulong) ((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); + BlockSize = (uint) ((cmdBuf[5] << 24) + (cmdBuf[5] << 16) + (cmdBuf[6] << 8) + cmdBuf[7]); } sense = dev.ReadCapacity16(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(!sense) ReadCapacity16 = cmdBuf; + if (!sense) ReadCapacity16 = cmdBuf; - if(ReadCapacity == null || Blocks == 0xFFFFFFFF || Blocks == 0) + if (ReadCapacity == null || Blocks == 0xFFFFFFFF || Blocks == 0) { - if(ReadCapacity16 == null && Blocks == 0) - if(dev.ScsiType != PeripheralDeviceTypes.MultiMediaDevice) + if (ReadCapacity16 == null && Blocks == 0) + if (dev.ScsiType != PeripheralDeviceTypes.MultiMediaDevice) { DicConsole.ErrorWriteLine("Unable to get media capacity"); DicConsole.ErrorWriteLine("{0}", Sense.PrettifySense(senseBuf)); } - if(ReadCapacity16 != null) + if (ReadCapacity16 != null) { - byte[] temp = new byte[8]; + var temp = new byte[8]; Array.Copy(cmdBuf, 0, temp, 0, 8); Array.Reverse(temp); - Blocks = BitConverter.ToUInt64(temp, 0); - BlockSize = (uint)((cmdBuf[5] << 24) + (cmdBuf[5] << 16) + (cmdBuf[6] << 8) + cmdBuf[7]); + Blocks = BitConverter.ToUInt64(temp, 0); + BlockSize = (uint) ((cmdBuf[5] << 24) + (cmdBuf[5] << 16) + (cmdBuf[6] << 8) + cmdBuf[7]); } } - if(Blocks != 0 && BlockSize != 0) Blocks++; + if (Blocks != 0 && BlockSize != 0) Blocks++; break; case PeripheralDeviceTypes.SequentialAccess: byte[] medBuf; - sense = dev.ReportDensitySupport(out byte[] seqBuf, out senseBuf, false, dev.Timeout, out _); - if(!sense) + sense = dev.ReportDensitySupport(out var seqBuf, out senseBuf, false, dev.Timeout, out _); + if (!sense) { sense = dev.ReportDensitySupport(out medBuf, out senseBuf, true, dev.Timeout, out _); - if(!sense && !seqBuf.SequenceEqual(medBuf)) + if (!sense && !seqBuf.SequenceEqual(medBuf)) { - DensitySupport = seqBuf; + DensitySupport = seqBuf; DensitySupportHeader = Decoders.SCSI.SSC.DensitySupport.DecodeDensity(seqBuf); } } sense = dev.ReportDensitySupport(out seqBuf, out senseBuf, true, false, dev.Timeout, out _); - if(!sense) + if (!sense) { sense = dev.ReportDensitySupport(out medBuf, out senseBuf, true, true, dev.Timeout, out _); - if(!sense && !seqBuf.SequenceEqual(medBuf)) + if (!sense && !seqBuf.SequenceEqual(medBuf)) { - MediaTypeSupport = medBuf; + MediaTypeSupport = medBuf; MediaTypeSupportHeader = Decoders.SCSI.SSC.DensitySupport.DecodeMediumType(seqBuf); } } @@ -287,34 +297,49 @@ namespace DiscImageChef.Core.Media.Info break; } - if(dev.ScsiType == PeripheralDeviceTypes.MultiMediaDevice) + if (dev.ScsiType == PeripheralDeviceTypes.MultiMediaDevice) { sense = dev.GetConfiguration(out cmdBuf, out senseBuf, 0, MmcGetConfigurationRt.Current, dev.Timeout, - out _); - if(sense) + out _); + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ GET CONFIGURATION:\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { MmcConfiguration = cmdBuf; - Features.SeparatedFeatures ftr = Features.Separate(cmdBuf); + var ftr = Features.Separate(cmdBuf); DicConsole.DebugWriteLine("Media-Info command", "GET CONFIGURATION current profile is {0:X4}h", - ftr.CurrentProfile); + ftr.CurrentProfile); - switch(ftr.CurrentProfile) + switch (ftr.CurrentProfile) { case 0x0001: MediaType = MediaType.GENERIC_HDD; break; case 0x0002: - switch(scsiMediumType) + switch (scsiMediumType) { case 0x01: MediaType = MediaType.PD650; break; case 0x41: - MediaType = MediaType.REV35; + switch (Blocks) + { + case 58620544: + MediaType = MediaType.REV120; + break; + case 17090880: + MediaType = MediaType.REV35; + break; + default: + // TODO: Unknown value + MediaType = MediaType.REV70; + break; + } + break; default: MediaType = MediaType.Unknown; @@ -409,21 +434,21 @@ namespace DiscImageChef.Core.Media.Info } } - if(MediaType == MediaType.PD650 && Blocks == 1281856) MediaType = MediaType.PD650_WORM; + if (MediaType == MediaType.PD650 && Blocks == 1281856) MediaType = MediaType.PD650_WORM; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.RecognizedFormatLayers, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.RecognizedFormatLayers, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Recognized Format Layers\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Recognized Format Layers\n{0}", + Sense.PrettifySense(senseBuf)); else RecognizedFormatLayers = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.WriteProtectionStatus, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.WriteProtectionStatus, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Write Protection Status\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else WriteProtectionStatus = cmdBuf; // More like a drive information @@ -436,29 +461,32 @@ namespace DiscImageChef.Core.Media.Info */ #region All DVD and HD DVD types - if(MediaType == MediaType.DVDDownload || MediaType == MediaType.DVDPR || - MediaType == MediaType.DVDPRDL || MediaType == MediaType.DVDPRW || - MediaType == MediaType.DVDPRWDL || - MediaType == MediaType.DVDR || MediaType == MediaType.DVDRAM || - MediaType == MediaType.DVDRDL || - MediaType == MediaType.DVDROM || MediaType == MediaType.DVDRW || - MediaType == MediaType.DVDRWDL || - MediaType == MediaType.HDDVDR || MediaType == MediaType.HDDVDRAM || - MediaType == MediaType.HDDVDRDL || MediaType == MediaType.HDDVDROM || - MediaType == MediaType.HDDVDRW || MediaType == MediaType.HDDVDRWDL) + + if (MediaType == MediaType.DVDDownload || MediaType == MediaType.DVDPR || + MediaType == MediaType.DVDPRDL || MediaType == MediaType.DVDPRW || + MediaType == MediaType.DVDPRWDL || + MediaType == MediaType.DVDR || MediaType == MediaType.DVDRAM || + MediaType == MediaType.DVDRDL || + MediaType == MediaType.DVDROM || MediaType == MediaType.DVDRW || + MediaType == MediaType.DVDRWDL || + MediaType == MediaType.HDDVDR || MediaType == MediaType.HDDVDRAM || + MediaType == MediaType.HDDVDRDL || MediaType == MediaType.HDDVDROM || + MediaType == MediaType.HDDVDRW || MediaType == MediaType.HDDVDRWDL) { sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: PFI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { - DvdPfi = cmdBuf; + DvdPfi = cmdBuf; DecodedPfi = PFI.Decode(cmdBuf); - if(DecodedPfi.HasValue) - if(MediaType == MediaType.DVDROM) - switch(DecodedPfi.Value.DiskCategory) + if (DecodedPfi.HasValue) + if (MediaType == MediaType.DVDROM) + switch (DecodedPfi.Value.DiskCategory) { case DiskCategory.DVDPR: MediaType = MediaType.DVDPR; @@ -474,8 +502,8 @@ namespace DiscImageChef.Core.Media.Info break; case DiskCategory.DVDR: MediaType = DecodedPfi.Value.PartVersion == 6 - ? MediaType.DVDRDL - : MediaType.DVDR; + ? MediaType.DVDRDL + : MediaType.DVDR; break; case DiskCategory.DVDRAM: MediaType = MediaType.DVDRAM; @@ -485,8 +513,8 @@ namespace DiscImageChef.Core.Media.Info break; case DiskCategory.DVDRW: MediaType = DecodedPfi.Value.PartVersion == 3 - ? MediaType.DVDRWDL - : MediaType.DVDRW; + ? MediaType.DVDRWDL + : MediaType.DVDRW; break; case DiskCategory.HDDVDR: MediaType = MediaType.HDDVDR; @@ -502,8 +530,8 @@ namespace DiscImageChef.Core.Media.Info break; case DiskCategory.Nintendo: MediaType = DecodedPfi.Value.DiscSize == DVDSize.Eighty - ? MediaType.GOD - : MediaType.WOD; + ? MediaType.GOD + : MediaType.WOD; break; case DiskCategory.UMD: MediaType = MediaType.UMD; @@ -512,106 +540,121 @@ namespace DiscImageChef.Core.Media.Info } sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, + out _); + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DMI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { DvdDmi = cmdBuf; - if(DMI.IsXbox(cmdBuf)) MediaType = MediaType.XGD; - else if(DMI.IsXbox360(cmdBuf)) + if (DMI.IsXbox(cmdBuf)) + { + MediaType = MediaType.XGD; + } + else if (DMI.IsXbox360(cmdBuf)) { MediaType = MediaType.XGD2; // All XGD3 all have the same number of blocks - if(Blocks == 25063 || // Locked (or non compatible drive) - Blocks == 4229664 || // Xtreme unlock - Blocks == 4246304) // Wxripper unlock + if (Blocks == 25063 || // Locked (or non compatible drive) + Blocks == 4229664 || // Xtreme unlock + Blocks == 4246304) // Wxripper unlock MediaType = MediaType.XGD3; } } } + #endregion All DVD and HD DVD types #region DVD-ROM - if(MediaType == MediaType.DVDDownload || MediaType == MediaType.DVDROM) + + if (MediaType == MediaType.DVDDownload || MediaType == MediaType.DVDROM) { sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.CopyrightInformation, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.CopyrightInformation, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: CMI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdCmi = cmdBuf; } + #endregion DVD-ROM - switch(MediaType) + switch (MediaType) { #region DVD-ROM and HD DVD-ROM + case MediaType.DVDDownload: case MediaType.DVDROM: case MediaType.HDDVDROM: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.BurstCuttingArea, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.BurstCuttingArea, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: BCA\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdBca = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdAacs, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.DvdAacs, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DVD AACS\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdAacs = cmdBuf; break; + #endregion DVD-ROM and HD DVD-ROM #region DVD-RAM and HD DVD-RAM + case MediaType.DVDRAM: case MediaType.HDDVDRAM: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramDds, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.DvdramDds, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DDS\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdRamDds = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramMediumStatus, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.DvdramMediumStatus, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Medium Status\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdRamCartridgeStatus = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdramSpareAreaInformation, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.DvdramSpareAreaInformation, 0, dev.Timeout, + out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: SAI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdRamSpareArea = cmdBuf; break; + #endregion DVD-RAM and HD DVD-RAM #region DVD-R and HD DVD-R + case MediaType.DVDR: case MediaType.HDDVDR: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.LastBorderOutRmd, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.LastBorderOutRmd, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Last-Out Border RMD\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Last-Out Border RMD\n{0}", + Sense.PrettifySense(senseBuf)); else LastBorderOutRmd = cmdBuf; break; + #endregion DVD-R and HD DVD-R } #region Require drive authentication, won't work + /* sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.DiscKey, 0, dev.Timeout, out _); if(sense) @@ -669,237 +712,259 @@ namespace DiscImageChef.Core.Media.Info else DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_aacsdatakeys.bin", "SCSI READ DISC STRUCTURE", cmdBuf); */ + #endregion Require drive authentication, won't work #region DVD-R and DVD-RW - if(MediaType == MediaType.DVDR || MediaType == MediaType.DVDRW) + + if (MediaType == MediaType.DVDR || MediaType == MediaType.DVDRW) { sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PreRecordedInfo, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.PreRecordedInfo, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Pre-Recorded Info\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdPreRecordedInfo = cmdBuf; } + #endregion DVD-R and DVD-RW - switch(MediaType) + switch (MediaType) { #region DVD-R, DVD-RW and HD DVD-R + case MediaType.DVDR: case MediaType.DVDRW: case MediaType.HDDVDR: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrMediaIdentifier, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.DvdrMediaIdentifier, 0, dev.Timeout, + out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DVD-R Media ID\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdrMediaIdentifier = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrPhysicalInformation, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.DvdrPhysicalInformation, 0, dev.Timeout, + out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DVD-R PFI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdrPhysicalInformation = cmdBuf; break; + #endregion DVD-R, DVD-RW and HD DVD-R #region All DVD+ + case MediaType.DVDPR: case MediaType.DVDPRDL: case MediaType.DVDPRW: case MediaType.DVDPRWDL: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Adip, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.Adip, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: ADIP\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdPlusAdip = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.Dcb, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.Dcb, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DCB\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdPlusDcb = cmdBuf; break; + #endregion All DVD+ #region HD DVD-ROM + case MediaType.HDDVDROM: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.HddvdCopyrightInformation, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.HddvdCopyrightInformation, 0, dev.Timeout, + out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: HDDVD CMI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else HddvdCopyrightInformation = cmdBuf; break; + #endregion HD DVD-ROM } #region HD DVD-R - if(MediaType == MediaType.HDDVDR) + + if (MediaType == MediaType.HDDVDR) { sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.HddvdrMediumStatus, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.HddvdrMediumStatus, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: HDDVD-R Medium Status\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: HDDVD-R Medium Status\n{0}", + Sense.PrettifySense(senseBuf)); else HddvdrMediumStatus = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.HddvdrLastRmd, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.HddvdrLastRmd, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Last RMD\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else HddvdrLastRmd = cmdBuf; } + #endregion HD DVD-R #region DVD-R DL, DVD-RW DL, DVD+R DL, DVD+RW DL - if(MediaType == MediaType.DVDPRDL || MediaType == MediaType.DVDRDL || MediaType == MediaType.DVDRWDL || - MediaType == MediaType.DVDPRWDL) + + if (MediaType == MediaType.DVDPRDL || MediaType == MediaType.DVDRDL || MediaType == MediaType.DVDRWDL || + MediaType == MediaType.DVDPRWDL) { sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrLayerCapacity, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.DvdrLayerCapacity, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Layer Capacity\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdrLayerCapacity = cmdBuf; } + #endregion DVD-R DL, DVD-RW DL, DVD+R DL, DVD+RW DL - switch(MediaType) + switch (MediaType) { #region DVD-R DL + case MediaType.DVDRDL: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.MiddleZoneStart, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.MiddleZoneStart, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Middle Zone Start\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Middle Zone Start\n{0}", + Sense.PrettifySense(senseBuf)); else DvdrDlMiddleZoneStart = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.JumpIntervalSize, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.JumpIntervalSize, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Jump Interval Size\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Jump Interval Size\n{0}", + Sense.PrettifySense(senseBuf)); else DvdrDlJumpIntervalSize = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.ManualLayerJumpStartLba, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.ManualLayerJumpStartLba, 0, dev.Timeout, + out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Manual Layer Jump Start LBA\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Manual Layer Jump Start LBA\n{0}", + Sense.PrettifySense(senseBuf)); else DvdrDlManualLayerJumpStartLba = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.RemapAnchorPoint, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.RemapAnchorPoint, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Remap Anchor Point\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Remap Anchor Point\n{0}", + Sense.PrettifySense(senseBuf)); else DvdrDlRemapAnchorPoint = cmdBuf; break; + #endregion DVD-R DL #region All Blu-ray + case MediaType.BDR: case MediaType.BDRE: case MediaType.BDROM: case MediaType.BDRXL: case MediaType.BDREXL: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.DiscInformation, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.DiscInformation, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else BlurayDiscInformation = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.Pac, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.Pac, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: PAC\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else BlurayPac = cmdBuf; break; + #endregion All Blu-ray } - switch(MediaType) + switch (MediaType) { #region BD-ROM only + case MediaType.BDROM: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdBurstCuttingArea, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.BdBurstCuttingArea, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: BCA\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else BlurayBurstCuttingArea = cmdBuf; break; + #endregion BD-ROM only #region Writable Blu-ray only + case MediaType.BDR: case MediaType.BDRE: case MediaType.BDRXL: case MediaType.BDREXL: sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdDds, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.BdDds, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DDS\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else BlurayDds = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.CartridgeStatus, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.CartridgeStatus, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Cartridge Status\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Cartridge Status\n{0}", + Sense.PrettifySense(senseBuf)); else BlurayCartridgeStatus = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.BdSpareAreaInformation, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.BdSpareAreaInformation, 0, dev.Timeout, + out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", - "READ DISC STRUCTURE: Spare Area Information\n{0}", - Sense.PrettifySense(senseBuf)); + "READ DISC STRUCTURE: Spare Area Information\n{0}", + Sense.PrettifySense(senseBuf)); else BluraySpareAreaInformation = cmdBuf; sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Bd, 0, 0, - MmcDiscStructureFormat.RawDfl, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.RawDfl, 0, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Raw DFL\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else BlurayRawDfl = cmdBuf; sense = dev.ReadDiscInformation(out cmdBuf, out senseBuf, - MmcDiscInformationDataTypes.TrackResources, dev.Timeout, out _); - if(sense) + MmcDiscInformationDataTypes.TrackResources, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC INFORMATION 001b\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else BlurayTrackResources = cmdBuf; sense = dev.ReadDiscInformation(out cmdBuf, out senseBuf, - MmcDiscInformationDataTypes.PowResources, dev.Timeout, out _); - if(sense) + MmcDiscInformationDataTypes.PowResources, dev.Timeout, out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC INFORMATION 010b\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else BlurayPowResources = cmdBuf; break; + #endregion Writable Blu-ray only #region CDs + case MediaType.CD: case MediaType.CDR: case MediaType.CDROM: @@ -907,49 +972,55 @@ namespace DiscImageChef.Core.Media.Info case MediaType.Unknown: // We discarded all discs that falsify a TOC before requesting a real TOC // No TOC, no CD (or an empty one) - bool tocSense = dev.ReadTocPmaAtip(out cmdBuf, out senseBuf, false, 0, 0, dev.Timeout, out _); - if(tocSense) + var tocSense = dev.ReadTocPmaAtip(out cmdBuf, out senseBuf, false, 0, 0, dev.Timeout, out _); + if (tocSense) + { DicConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: TOC\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { - Toc = cmdBuf; + Toc = cmdBuf; DecodedToc = TOC.Decode(cmdBuf); // As we have a TOC we know it is a CD - if(MediaType == MediaType.Unknown) MediaType = MediaType.CD; + if (MediaType == MediaType.Unknown) MediaType = MediaType.CD; } // ATIP exists on blank CDs sense = dev.ReadAtip(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: ATIP\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { - Atip = cmdBuf; + Atip = cmdBuf; DecodedAtip = ATIP.Decode(cmdBuf); - if(DecodedAtip.HasValue) + if (DecodedAtip.HasValue) // Only CD-R and CD-RW have ATIP MediaType = DecodedAtip.Value.DiscType ? MediaType.CDRW : MediaType.CDR; } // We got a TOC, get information about a recorded/mastered CD - if(!tocSense) + if (!tocSense) { sense = dev.ReadDiscInformation(out cmdBuf, out senseBuf, - MmcDiscInformationDataTypes.DiscInformation, dev.Timeout, - out _); - if(sense) + MmcDiscInformationDataTypes.DiscInformation, dev.Timeout, + out _); + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ DISC INFORMATION 000b\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { - CompactDiscInformation = cmdBuf; + CompactDiscInformation = cmdBuf; DecodedCompactDiscInformation = DiscInformation.Decode000b(cmdBuf); - if(DecodedCompactDiscInformation.HasValue) - if(MediaType == MediaType.CD) - switch(DecodedCompactDiscInformation.Value.DiscType) + if (DecodedCompactDiscInformation.HasValue) + if (MediaType == MediaType.CD) + switch (DecodedCompactDiscInformation.Value.DiscType) { case 0x10: MediaType = MediaType.CDI; @@ -960,75 +1031,82 @@ namespace DiscImageChef.Core.Media.Info } } - int sessions = 1; - int firstTrackLastSession = 0; + var sessions = 1; + var firstTrackLastSession = 0; sense = dev.ReadSessionInfo(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: Session info\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { - Session = cmdBuf; + Session = cmdBuf; DecodedSession = Decoders.CD.Session.Decode(cmdBuf); - if(DecodedSession.HasValue) + if (DecodedSession.HasValue) { - sessions = DecodedSession.Value.LastCompleteSession; + sessions = DecodedSession.Value.LastCompleteSession; firstTrackLastSession = DecodedSession.Value.TrackDescriptors[0].TrackNumber; } } - if(MediaType == MediaType.CD) + if (MediaType == MediaType.CD) { - bool hasDataTrack = false; - bool hasAudioTrack = false; - bool allFirstSessionTracksAreAudio = true; - bool hasVideoTrack = false; + var hasDataTrack = false; + var hasAudioTrack = false; + var allFirstSessionTracksAreAudio = true; + var hasVideoTrack = false; - if(DecodedToc.HasValue) - foreach(TOC.CDTOCTrackDataDescriptor track in DecodedToc.Value.TrackDescriptors) + if (DecodedToc.HasValue) + foreach (var track in DecodedToc.Value.TrackDescriptors) { - if(track.TrackNumber == 1 && - ((TocControl)(track.CONTROL & 0x0D) == TocControl.DataTrack || - (TocControl)(track.CONTROL & 0x0D) == TocControl.DataTrackIncremental)) + if (track.TrackNumber == 1 && + ((TocControl) (track.CONTROL & 0x0D) == TocControl.DataTrack || + (TocControl) (track.CONTROL & 0x0D) == TocControl.DataTrackIncremental)) allFirstSessionTracksAreAudio &= firstTrackLastSession != 1; - if((TocControl)(track.CONTROL & 0x0D) == TocControl.DataTrack || - (TocControl)(track.CONTROL & 0x0D) == TocControl.DataTrackIncremental) + if ((TocControl) (track.CONTROL & 0x0D) == TocControl.DataTrack || + (TocControl) (track.CONTROL & 0x0D) == TocControl.DataTrackIncremental) { - if(track.TrackStartAddress < startOfFirstDataTrack) + if (track.TrackStartAddress < startOfFirstDataTrack) startOfFirstDataTrack = track.TrackStartAddress; - hasDataTrack = true; + hasDataTrack = true; allFirstSessionTracksAreAudio &= track.TrackNumber >= firstTrackLastSession; } - else hasAudioTrack = true; + else + { + hasAudioTrack = true; + } hasVideoTrack |= track.ADR == 4; } - if(hasDataTrack && hasAudioTrack && allFirstSessionTracksAreAudio && sessions == 2) + if (hasDataTrack && hasAudioTrack && allFirstSessionTracksAreAudio && sessions == 2) MediaType = MediaType.CDPLUS; - if(!hasDataTrack && hasAudioTrack && sessions == 1) MediaType = MediaType.CDDA; - if(hasDataTrack && !hasAudioTrack && sessions == 1) MediaType = MediaType.CDROM; - if(hasVideoTrack && !hasDataTrack && sessions == 1) MediaType = MediaType.CDV; + if (!hasDataTrack && hasAudioTrack && sessions == 1) MediaType = MediaType.CDDA; + if (hasDataTrack && !hasAudioTrack && sessions == 1) MediaType = MediaType.CDROM; + if (hasVideoTrack && !hasDataTrack && sessions == 1) MediaType = MediaType.CDV; } sense = dev.ReadRawToc(out cmdBuf, out senseBuf, 1, dev.Timeout, out _); - if(sense) + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: Raw TOC\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { RawToc = cmdBuf; FullToc = FullTOC.Decode(cmdBuf); - if(FullToc.HasValue) + if (FullToc.HasValue) { - FullTOC.TrackDataDescriptor a0Track = + var a0Track = FullToc.Value.TrackDescriptors - .FirstOrDefault(t => t.POINT == 0xA0 && t.ADR == 1); - if(a0Track.POINT == 0xA0) - switch(a0Track.PSEC) + .FirstOrDefault(t => t.POINT == 0xA0 && t.ADR == 1); + if (a0Track.POINT == 0xA0) + switch (a0Track.PSEC) { case 0x10: MediaType = MediaType.CDI; @@ -1038,64 +1116,70 @@ namespace DiscImageChef.Core.Media.Info break; } - if(FullToc.Value.TrackDescriptors.Any(t => t.SessionNumber == 2)) + if (FullToc.Value.TrackDescriptors.Any(t => t.SessionNumber == 2)) secondSessionFirstTrack = FullToc - .Value.TrackDescriptors - .Where(t => t.SessionNumber == 2).Min(t => t.POINT); + .Value.TrackDescriptors + .Where(t => t.SessionNumber == 2).Min(t => t.POINT); } } sense = dev.ReadPma(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: PMA\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else Pma = cmdBuf; sense = dev.ReadCdText(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ TOC/PMA/ATIP: CD-TEXT\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { - CdTextLeadIn = cmdBuf; + CdTextLeadIn = cmdBuf; DecodedCdTextLeadIn = CDTextOnLeadIn.Decode(cmdBuf); } - sense = dev.ReadMcn(out string mcn, out _, out _, dev.Timeout, out _); - if(!sense && mcn != null && mcn != "0000000000000") Mcn = mcn; + sense = dev.ReadMcn(out var mcn, out _, out _, dev.Timeout, out _); + if (!sense && mcn != null && mcn != "0000000000000") Mcn = mcn; Isrcs = new Dictionary(); - for(byte i = DecodedToc.Value.FirstTrack; i <= DecodedToc.Value.LastTrack; i++) + for (var i = DecodedToc.Value.FirstTrack; i <= DecodedToc.Value.LastTrack; i++) { - sense = dev.ReadIsrc(i, out string isrc, out _, out _, dev.Timeout, out _); - if(!sense && isrc != null && isrc != "000000000000") Isrcs.Add(i, isrc); + sense = dev.ReadIsrc(i, out var isrc, out _, out _, dev.Timeout, out _); + if (!sense && isrc != null && isrc != "000000000000") Isrcs.Add(i, isrc); } - if(Isrcs.Count == 0) Isrcs = null; + if (Isrcs.Count == 0) Isrcs = null; } break; + #endregion CDs } #region Nintendo - if(MediaType == MediaType.Unknown && Blocks > 0) + + if (MediaType == MediaType.Unknown && Blocks > 0) { sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); - if(sense) + MmcDiscStructureFormat.PhysicalInformation, 0, dev.Timeout, out _); + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: PFI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { DvdPfi = cmdBuf; - PFI.PhysicalFormatInformation? nintendoPfi = PFI.Decode(cmdBuf); - if(nintendoPfi != null) + var nintendoPfi = PFI.Decode(cmdBuf); + if (nintendoPfi != null) { DicConsole.WriteLine("PFI:\n{0}", PFI.Prettify(cmdBuf)); - if(nintendoPfi.Value.DiskCategory == DiskCategory.Nintendo && - nintendoPfi.Value.PartVersion == 15) - switch(nintendoPfi.Value.DiscSize) + if (nintendoPfi.Value.DiskCategory == DiskCategory.Nintendo && + nintendoPfi.Value.PartVersion == 15) + switch (nintendoPfi.Value.DiscSize) { case DVDSize.Eighty: MediaType = MediaType.GOD; @@ -1108,42 +1192,46 @@ namespace DiscImageChef.Core.Media.Info } sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, - out _); - if(sense) + MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, + out _); + if (sense) DicConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: DMI\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else DvdDmi = cmdBuf; } + #endregion Nintendo } sense = dev.ReadMediaSerialNumber(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) + { DicConsole.DebugWriteLine("Media-Info command", "READ MEDIA SERIAL NUMBER\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); + } else { - if(cmdBuf.Length >= 4) MediaSerialNumber = cmdBuf; + if (cmdBuf.Length >= 4) MediaSerialNumber = cmdBuf; } - switch(MediaType) + switch (MediaType) { #region Xbox + case MediaType.XGD: case MediaType.XGD2: case MediaType.XGD3: // We need to get INQUIRY to know if it is a Kreon drive - sense = dev.ScsiInquiry(out byte[] inqBuffer, out senseBuf); - if(!sense) + sense = dev.ScsiInquiry(out var inqBuffer, out senseBuf); + if (!sense) { - Inquiry.SCSIInquiry? inq = Inquiry.Decode(inqBuffer); - if(inq.HasValue && inq.Value.KreonPresent) + var inq = Inquiry.Decode(inqBuffer); + if (inq.HasValue && inq.Value.KreonPresent) { sense = dev.KreonExtractSs(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) DicConsole.DebugWriteLine("Media-Info command", "KREON EXTRACT SS:\n{0}", - Sense.PrettifySense(senseBuf)); + Sense.PrettifySense(senseBuf)); else XboxSecuritySector = cmdBuf; DecodedXboxSecuritySector = SS.Decode(cmdBuf); @@ -1151,178 +1239,185 @@ namespace DiscImageChef.Core.Media.Info // Get video partition size DicConsole.DebugWriteLine("Dump-media command", "Getting video partition size"); sense = dev.KreonLock(out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Cannot lock drive, not continuing."); return; } sense = dev.ReadCapacity(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Cannot get disc capacity."); return; } - ulong totalSize = - (ulong)((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); + var totalSize = + (ulong) ((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, 0, out _); - if(sense) + MmcDiscStructureFormat.PhysicalInformation, 0, 0, out _); + if (sense) { DicConsole.ErrorWriteLine("Cannot get PFI."); return; } DicConsole.DebugWriteLine("Dump-media command", "Video partition total size: {0} sectors", - totalSize); + totalSize); ulong l0Video = PFI.Decode(cmdBuf).Value.Layer0EndPSN - PFI.Decode(cmdBuf).Value.DataAreaStartPSN + 1; - ulong l1Video = totalSize - l0Video + 1; + var l1Video = totalSize - l0Video + 1; // Get game partition size DicConsole.DebugWriteLine("Dump-media command", "Getting game partition size"); sense = dev.KreonUnlockXtreme(out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Cannot unlock drive, not continuing."); return; } sense = dev.ReadCapacity(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Cannot get disc capacity."); return; } - ulong gameSize = - (ulong)((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]) + 1; + var gameSize = + (ulong) ((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]) + 1; DicConsole.DebugWriteLine("Dump-media command", "Game partition total size: {0} sectors", - gameSize); + gameSize); // Get middle zone size DicConsole.DebugWriteLine("Dump-media command", "Getting middle zone size"); sense = dev.KreonUnlockWxripper(out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Cannot unlock drive, not continuing."); return; } sense = dev.ReadCapacity(out cmdBuf, out senseBuf, dev.Timeout, out _); - if(sense) + if (sense) { DicConsole.ErrorWriteLine("Cannot get disc capacity."); return; } - totalSize = (ulong)((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); + totalSize = (ulong) ((cmdBuf[0] << 24) + (cmdBuf[1] << 16) + (cmdBuf[2] << 8) + cmdBuf[3]); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.PhysicalInformation, 0, 0, out _); - if(sense) + MmcDiscStructureFormat.PhysicalInformation, 0, 0, out _); + if (sense) { DicConsole.ErrorWriteLine("Cannot get PFI."); return; } DicConsole.DebugWriteLine("Dump-media command", "Unlocked total size: {0} sectors", - totalSize); - ulong middleZone = + totalSize); + var middleZone = totalSize - (PFI.Decode(cmdBuf).Value.Layer0EndPSN - PFI.Decode(cmdBuf).Value.DataAreaStartPSN + 1) - gameSize + 1; totalSize = l0Video + l1Video + middleZone * 2 + gameSize; - ulong layerBreak = l0Video + middleZone + gameSize / 2; + var layerBreak = l0Video + middleZone + gameSize / 2; XgdInfo = new XgdInfo { - L0Video = l0Video, - L1Video = l1Video, + L0Video = l0Video, + L1Video = l1Video, MiddleZone = middleZone, - GameSize = gameSize, - TotalSize = totalSize, + GameSize = gameSize, + TotalSize = totalSize, LayerBreak = layerBreak }; } } break; + #endregion Xbox case MediaType.Unknown: - MediaType = MediaTypeFromScsi.Get((byte)dev.ScsiType, dev.Manufacturer, dev.Model, scsiMediumType, - scsiDensityCode, Blocks, BlockSize); + MediaType = MediaTypeFromScsi.Get((byte) dev.ScsiType, dev.Manufacturer, dev.Model, scsiMediumType, + scsiDensityCode, Blocks, BlockSize); break; } - if(MediaType == MediaType.Unknown && dev.IsUsb && containsFloppyPage) MediaType = MediaType.FlashDrive; + if (MediaType == MediaType.Unknown && dev.IsUsb && containsFloppyPage) MediaType = MediaType.FlashDrive; - if(DeviceInfo.ScsiType != PeripheralDeviceTypes.MultiMediaDevice) return; + if (DeviceInfo.ScsiType != PeripheralDeviceTypes.MultiMediaDevice) return; - byte[] sector0 = null; - byte[] sector1 = null; - byte[] ps2BootSectors = null; - byte[] playdia1 = null; - byte[] playdia2 = null; - byte[] firstDataSectorNotZero = null; - byte[] secondDataSectorNotZero = null; - byte[] firstTrackSecondSession = null; + byte[] sector0 = null; + byte[] sector1 = null; + byte[] ps2BootSectors = null; + byte[] playdia1 = null; + byte[] playdia2 = null; + byte[] firstDataSectorNotZero = null; + byte[] secondDataSectorNotZero = null; + byte[] firstTrackSecondSession = null; byte[] firstTrackSecondSessionAudio = null; - byte[] videoNowColorFrame = null; + byte[] videoNowColorFrame = null; - if(secondSessionFirstTrack != 0 && DecodedToc.HasValue && - DecodedToc.Value.TrackDescriptors.Any(t => t.TrackNumber == secondSessionFirstTrack)) + if (secondSessionFirstTrack != 0 && DecodedToc.HasValue && + DecodedToc.Value.TrackDescriptors.Any(t => t.TrackNumber == secondSessionFirstTrack)) { - uint firstSectorSecondSessionFirstTrack = DecodedToc - .Value.TrackDescriptors - .First(t => t.TrackNumber == secondSessionFirstTrack) - .TrackStartAddress; + var firstSectorSecondSessionFirstTrack = DecodedToc + .Value.TrackDescriptors + .First(t => t.TrackNumber == secondSessionFirstTrack) + .TrackStartAddress; sense = dev.ReadCd(out cmdBuf, out senseBuf, firstSectorSecondSessionFirstTrack, 2352, 1, - MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, - MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, + MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) firstTrackSecondSession = cmdBuf; + if (!sense && !dev.Error) + { + firstTrackSecondSession = cmdBuf; + } else { sense = dev.ReadCd(out cmdBuf, out senseBuf, firstSectorSecondSessionFirstTrack, 2352, 1, - MmcSectorTypes.Cdda, false, false, true, MmcHeaderCodes.None, true, true, - MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.Cdda, false, false, true, MmcHeaderCodes.None, true, true, + MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) firstTrackSecondSession = cmdBuf; + if (!sense && !dev.Error) firstTrackSecondSession = cmdBuf; } sense = dev.ReadCd(out cmdBuf, out senseBuf, firstSectorSecondSessionFirstTrack - 1, 2352, 3, - MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, - MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, true, true, + MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) firstTrackSecondSessionAudio = cmdBuf; + if (!sense && !dev.Error) + { + firstTrackSecondSessionAudio = cmdBuf; + } else { sense = dev.ReadCd(out cmdBuf, out senseBuf, firstSectorSecondSessionFirstTrack - 1, 2352, 3, - MmcSectorTypes.Cdda, false, false, true, MmcHeaderCodes.None, true, true, - MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.Cdda, false, false, true, MmcHeaderCodes.None, true, true, + MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) firstTrackSecondSessionAudio = cmdBuf; + if (!sense && !dev.Error) firstTrackSecondSessionAudio = cmdBuf; } } videoNowColorFrame = new byte[9 * 2352]; - for(int i = 0; i < 9; i++) + for (var i = 0; i < 9; i++) { - sense = dev.ReadCd(out cmdBuf, out senseBuf, (uint)i, 2352, 1, MmcSectorTypes.AllTypes, false, false, - true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, - dev.Timeout, out _); + sense = dev.ReadCd(out cmdBuf, out senseBuf, (uint) i, 2352, 1, MmcSectorTypes.AllTypes, false, false, + true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, + dev.Timeout, out _); - if(sense || dev.Error) + if (sense || dev.Error) { - sense = dev.ReadCd(out cmdBuf, out senseBuf, (uint)i, 2352, 1, MmcSectorTypes.Cdda, false, false, - true, MmcHeaderCodes.None, true, true, MmcErrorField.None, MmcSubchannel.None, - dev.Timeout, out _); + sense = dev.ReadCd(out cmdBuf, out senseBuf, (uint) i, 2352, 1, MmcSectorTypes.Cdda, false, false, + true, MmcHeaderCodes.None, true, true, MmcErrorField.None, MmcSubchannel.None, + dev.Timeout, out _); - if(sense || !dev.Error) + if (sense || !dev.Error) { videoNowColorFrame = null; break; @@ -1333,30 +1428,30 @@ namespace DiscImageChef.Core.Media.Info } // Check for hidden data before start of track 1 - if(DecodedToc.HasValue && - DecodedToc.Value.TrackDescriptors.FirstOrDefault(t => t.TrackNumber == 1).TrackStartAddress > 0) + if (DecodedToc.HasValue && + DecodedToc.Value.TrackDescriptors.FirstOrDefault(t => t.TrackNumber == 1).TrackStartAddress > 0) { sense = dev.ReadCd(out cmdBuf, out senseBuf, 0, 2352, 1, MmcSectorTypes.AllTypes, false, false, true, - MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, - dev.Timeout, out _); + MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, MmcSubchannel.None, + dev.Timeout, out _); - if(!dev.Error && !sense) + if (!dev.Error && !sense) { sector0 = cmdBuf; sense = dev.ReadCd(out cmdBuf, out senseBuf, 16, 2352, 1, MmcSectorTypes.AllTypes, false, false, - true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!dev.Error && !sense) - if(MMC.IsCdi(sector0, cmdBuf)) + if (!dev.Error && !sense) + if (MMC.IsCdi(sector0, cmdBuf)) MediaType = MediaType.CDIREADY; } } sector0 = null; - switch(MediaType) + switch (MediaType) { case MediaType.CD: case MediaType.CDDA: @@ -1365,199 +1460,202 @@ namespace DiscImageChef.Core.Media.Info case MediaType.CDROMXA: { sense = dev.ReadCd(out cmdBuf, out senseBuf, 0, 2352, 1, MmcSectorTypes.AllTypes, false, false, - true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector0 = new byte[2048]; Array.Copy(cmdBuf, 16, sector0, 0, 2048); sense = dev.ReadCd(out cmdBuf, out senseBuf, 1, 2352, 1, MmcSectorTypes.AllTypes, false, false, - true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector1 = new byte[2048]; Array.Copy(cmdBuf, 16, sector1, 0, 2048); } sense = dev.ReadCd(out cmdBuf, out senseBuf, 4200, 2352, 1, MmcSectorTypes.AllTypes, false, - false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { playdia1 = new byte[2048]; Array.Copy(cmdBuf, 24, playdia1, 0, 2048); } sense = dev.ReadCd(out cmdBuf, out senseBuf, 4201, 2352, 1, MmcSectorTypes.AllTypes, false, - false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { playdia2 = new byte[2048]; Array.Copy(cmdBuf, 24, playdia2, 0, 2048); } - if(startOfFirstDataTrack != uint.MaxValue) + if (startOfFirstDataTrack != uint.MaxValue) { sense = dev.ReadCd(out cmdBuf, out senseBuf, startOfFirstDataTrack, 2352, 1, - MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, - true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, + true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { firstDataSectorNotZero = new byte[2048]; Array.Copy(cmdBuf, 16, firstDataSectorNotZero, 0, 2048); } sense = dev.ReadCd(out cmdBuf, out senseBuf, startOfFirstDataTrack + 1, 2352, 1, - MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, - true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.AllTypes, false, false, true, MmcHeaderCodes.AllHeaders, + true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { secondDataSectorNotZero = new byte[2048]; Array.Copy(cmdBuf, 16, secondDataSectorNotZero, 0, 2048); } } - MemoryStream ps2Ms = new MemoryStream(); - for(uint p = 0; p < 12; p++) + var ps2Ms = new MemoryStream(); + for (uint p = 0; p < 12; p++) { sense = dev.ReadCd(out cmdBuf, out senseBuf, p, 2352, 1, MmcSectorTypes.AllTypes, false, - false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.AllHeaders, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(sense || dev.Error) break; + if (sense || dev.Error) break; ps2Ms.Write(cmdBuf, cmdBuf[0x0F] == 0x02 ? 24 : 16, 2048); } - if(ps2Ms.Length == 0x6000) ps2BootSectors = ps2Ms.ToArray(); + if (ps2Ms.Length == 0x6000) ps2BootSectors = ps2Ms.ToArray(); } else { sense = dev.ReadCd(out cmdBuf, out senseBuf, 0, 2324, 1, MmcSectorTypes.Mode2, false, false, - true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector0 = new byte[2048]; Array.Copy(cmdBuf, 0, sector0, 0, 2048); sense = dev.ReadCd(out cmdBuf, out senseBuf, 1, 2324, 1, MmcSectorTypes.Mode2, false, false, - true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector1 = new byte[2048]; Array.Copy(cmdBuf, 1, sector0, 0, 2048); } sense = dev.ReadCd(out cmdBuf, out senseBuf, 4200, 2324, 1, MmcSectorTypes.Mode2, false, - false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { playdia1 = new byte[2048]; Array.Copy(cmdBuf, 0, playdia1, 0, 2048); } sense = dev.ReadCd(out cmdBuf, out senseBuf, 4201, 2324, 1, MmcSectorTypes.Mode2, false, - false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { playdia2 = new byte[2048]; Array.Copy(cmdBuf, 0, playdia2, 0, 2048); } - if(startOfFirstDataTrack != uint.MaxValue) + if (startOfFirstDataTrack != uint.MaxValue) { sense = dev.ReadCd(out cmdBuf, out senseBuf, startOfFirstDataTrack, 2324, 1, - MmcSectorTypes.Mode2, false, false, true, MmcHeaderCodes.None, true, - true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.Mode2, false, false, true, MmcHeaderCodes.None, true, + true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { firstDataSectorNotZero = new byte[2048]; Array.Copy(cmdBuf, 0, firstDataSectorNotZero, 0, 2048); } sense = dev.ReadCd(out cmdBuf, out senseBuf, startOfFirstDataTrack + 1, 2324, 1, - MmcSectorTypes.Mode2, false, false, true, MmcHeaderCodes.None, true, - true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); + MmcSectorTypes.Mode2, false, false, true, MmcHeaderCodes.None, true, + true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { secondDataSectorNotZero = new byte[2048]; Array.Copy(cmdBuf, 0, secondDataSectorNotZero, 0, 2048); } } - MemoryStream ps2Ms = new MemoryStream(); - for(uint p = 0; p < 12; p++) + var ps2Ms = new MemoryStream(); + for (uint p = 0; p < 12; p++) { sense = dev.ReadCd(out cmdBuf, out senseBuf, p, 2324, 1, MmcSectorTypes.Mode2, false, - false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(sense || dev.Error) break; + if (sense || dev.Error) break; ps2Ms.Write(cmdBuf, 0, 2048); } - if(ps2Ms.Length == 0x6000) ps2BootSectors = ps2Ms.ToArray(); + if (ps2Ms.Length == 0x6000) ps2BootSectors = ps2Ms.ToArray(); } else { sense = dev.ReadCd(out cmdBuf, out senseBuf, 0, 2048, 1, MmcSectorTypes.Mode1, false, false, - true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector0 = cmdBuf; sense = dev.ReadCd(out cmdBuf, out senseBuf, 0, 2048, 1, MmcSectorTypes.Mode1, false, - false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) sector1 = cmdBuf; + if (!sense && !dev.Error) sector1 = cmdBuf; sense = dev.ReadCd(out cmdBuf, out senseBuf, 0, 2048, 12, MmcSectorTypes.Mode1, false, - false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, - MmcSubchannel.None, dev.Timeout, out _); + false, true, MmcHeaderCodes.None, true, true, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); - if(!sense && !dev.Error) ps2BootSectors = cmdBuf; + if (!sense && !dev.Error) ps2BootSectors = cmdBuf; - if(startOfFirstDataTrack != uint.MaxValue) + if (startOfFirstDataTrack != uint.MaxValue) { sense = dev.ReadCd(out cmdBuf, out senseBuf, startOfFirstDataTrack, 2048, 1, - MmcSectorTypes.Mode1, false, false, true, MmcHeaderCodes.None, - true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, - out _); + MmcSectorTypes.Mode1, false, false, true, MmcHeaderCodes.None, + true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, + out _); - if(!sense && !dev.Error) firstDataSectorNotZero = cmdBuf; + if (!sense && !dev.Error) firstDataSectorNotZero = cmdBuf; sense = dev.ReadCd(out cmdBuf, out senseBuf, startOfFirstDataTrack + 1, 2048, 1, - MmcSectorTypes.Mode1, false, false, true, MmcHeaderCodes.None, - true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, - out _); + MmcSectorTypes.Mode1, false, false, true, MmcHeaderCodes.None, + true, true, MmcErrorField.None, MmcSubchannel.None, dev.Timeout, + out _); - if(!sense && !dev.Error) secondDataSectorNotZero = cmdBuf; + if (!sense && !dev.Error) secondDataSectorNotZero = cmdBuf; } } - else goto case MediaType.DVDROM; + else + { + goto case MediaType.DVDROM; + } } } @@ -1571,75 +1669,75 @@ namespace DiscImageChef.Core.Media.Info case MediaType.BDROM: case MediaType.Unknown: sense = dev.Read16(out cmdBuf, out senseBuf, 0, false, true, false, 0, BlockSize, 0, 1, false, - dev.Timeout, out _); + dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector0 = cmdBuf; sense = dev.Read16(out cmdBuf, out senseBuf, 0, false, true, false, 1, BlockSize, 0, 1, false, - dev.Timeout, out _); + dev.Timeout, out _); - if(!sense && !dev.Error) sector1 = cmdBuf; + if (!sense && !dev.Error) sector1 = cmdBuf; sense = dev.Read16(out cmdBuf, out senseBuf, 0, false, true, false, 0, BlockSize, 0, 12, false, - dev.Timeout, out _); + dev.Timeout, out _); - if(!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; + if (!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; } else { sense = dev.Read12(out cmdBuf, out senseBuf, 0, false, true, false, false, 0, BlockSize, 0, 1, - false, dev.Timeout, out _); + false, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector0 = cmdBuf; sense = dev.Read12(out cmdBuf, out senseBuf, 0, false, true, false, false, 1, BlockSize, 0, - 1, false, dev.Timeout, out _); + 1, false, dev.Timeout, out _); - if(!sense && !dev.Error) sector1 = cmdBuf; + if (!sense && !dev.Error) sector1 = cmdBuf; sense = dev.Read12(out cmdBuf, out senseBuf, 0, false, true, false, false, 0, BlockSize, 0, - 12, false, dev.Timeout, out _); + 12, false, dev.Timeout, out _); - if(!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; + if (!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; } else { sense = dev.Read10(out cmdBuf, out senseBuf, 0, false, true, false, false, 0, BlockSize, 0, - 1, dev.Timeout, out _); + 1, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector0 = cmdBuf; sense = dev.Read10(out cmdBuf, out senseBuf, 0, false, true, false, false, 1, BlockSize, - 0, 1, dev.Timeout, out _); + 0, 1, dev.Timeout, out _); - if(!sense && !dev.Error) sector1 = cmdBuf; + if (!sense && !dev.Error) sector1 = cmdBuf; sense = dev.Read10(out cmdBuf, out senseBuf, 0, false, true, false, false, 0, BlockSize, - 0, 12, dev.Timeout, out _); + 0, 12, dev.Timeout, out _); - if(!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; + if (!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; } else { sense = dev.Read6(out cmdBuf, out senseBuf, 0, BlockSize, 1, dev.Timeout, out _); - if(!sense && !dev.Error) + if (!sense && !dev.Error) { sector0 = cmdBuf; sense = dev.Read6(out cmdBuf, out senseBuf, 1, BlockSize, 1, dev.Timeout, out _); - if(!sense && !dev.Error) sector1 = cmdBuf; + if (!sense && !dev.Error) sector1 = cmdBuf; sense = dev.Read6(out cmdBuf, out senseBuf, 0, BlockSize, 12, dev.Timeout, out _); - if(!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; + if (!sense && !dev.Error && cmdBuf.Length == 0x6000) ps2BootSectors = cmdBuf; } } } @@ -1673,9 +1771,9 @@ namespace DiscImageChef.Core.Media.Info case MediaType.BDREXL: return; } - if(sector0 == null) return; + if (sector0 == null) return; - switch(MediaType) + switch (MediaType) { case MediaType.CD: case MediaType.CDDA: @@ -1687,92 +1785,92 @@ namespace DiscImageChef.Core.Media.Info // TODO: Neo-Geo CD requires reading the filesystem and checking that the file "/IPL.TXT" is correct // TODO: Pippin requires interpreting Apple Partition Map, reading HFS and checking for Pippin signatures { - if(CD.DecodeIPBin(sector0).HasValue) + if (CD.DecodeIPBin(sector0).HasValue) { MediaType = MediaType.MEGACD; return; } - if(Saturn.DecodeIPBin(sector0).HasValue) MediaType = MediaType.SATURNCD; + if (Saturn.DecodeIPBin(sector0).HasValue) MediaType = MediaType.SATURNCD; // Are GDR detectable ??? - if(Dreamcast.DecodeIPBin(sector0).HasValue) MediaType = MediaType.GDROM; + if (Dreamcast.DecodeIPBin(sector0).HasValue) MediaType = MediaType.GDROM; - if(ps2BootSectors != null && ps2BootSectors.Length == 0x6000) + if (ps2BootSectors != null && ps2BootSectors.Length == 0x6000) { // The decryption key is applied as XOR. As first byte is originally always NULL, it gives us the key :) - byte decryptByte = ps2BootSectors[0]; - for(int i = 0; i < 0x6000; i++) ps2BootSectors[i] ^= decryptByte; + var decryptByte = ps2BootSectors[0]; + for (var i = 0; i < 0x6000; i++) ps2BootSectors[i] ^= decryptByte; - string ps2BootSectorsHash = Sha256Context.Data(ps2BootSectors, out _); + var ps2BootSectorsHash = Sha256Context.Data(ps2BootSectors, out _); DicConsole.DebugWriteLine("Media-info Command", "PlayStation 2 boot sectors SHA256: {0}", - ps2BootSectorsHash); - if(ps2BootSectorsHash == PS2_PAL_HASH || ps2BootSectorsHash == PS2_NTSC_HASH || - ps2BootSectorsHash == PS2_JAPANESE_HASH) MediaType = MediaType.PS2CD; + ps2BootSectorsHash); + if (ps2BootSectorsHash == PS2_PAL_HASH || ps2BootSectorsHash == PS2_NTSC_HASH || + ps2BootSectorsHash == PS2_JAPANESE_HASH) MediaType = MediaType.PS2CD; } - if(sector0 != null) + if (sector0 != null) { - byte[] syncBytes = new byte[7]; + var syncBytes = new byte[7]; Array.Copy(sector0, 0, syncBytes, 0, 7); - if(OperaId.SequenceEqual(syncBytes)) MediaType = MediaType.ThreeDO; - if(FmTownsBootId.SequenceEqual(syncBytes)) MediaType = MediaType.FMTOWNS; + if (OperaId.SequenceEqual(syncBytes)) MediaType = MediaType.ThreeDO; + if (FmTownsBootId.SequenceEqual(syncBytes)) MediaType = MediaType.FMTOWNS; } - if(playdia1 != null && playdia2 != null) + if (playdia1 != null && playdia2 != null) { - byte[] pd1 = new byte[PlaydiaCopyright.Length]; - byte[] pd2 = new byte[PlaydiaCopyright.Length]; + var pd1 = new byte[PlaydiaCopyright.Length]; + var pd2 = new byte[PlaydiaCopyright.Length]; Array.Copy(playdia1, 38, pd1, 0, pd1.Length); - Array.Copy(playdia2, 0, pd2, 0, pd1.Length); + Array.Copy(playdia2, 0, pd2, 0, pd1.Length); - if(PlaydiaCopyright.SequenceEqual(pd1) && PlaydiaCopyright.SequenceEqual(pd2)) + if (PlaydiaCopyright.SequenceEqual(pd1) && PlaydiaCopyright.SequenceEqual(pd2)) MediaType = MediaType.Playdia; } - if(secondDataSectorNotZero != null) + if (secondDataSectorNotZero != null) { - byte[] pce = new byte[PcEngineSignature.Length]; + var pce = new byte[PcEngineSignature.Length]; Array.Copy(secondDataSectorNotZero, 32, pce, 0, pce.Length); - if(PcEngineSignature.SequenceEqual(pce)) MediaType = MediaType.SuperCDROM2; + if (PcEngineSignature.SequenceEqual(pce)) MediaType = MediaType.SuperCDROM2; } - if(firstDataSectorNotZero != null) + if (firstDataSectorNotZero != null) { - byte[] pcfx = new byte[PcFxSignature.Length]; + var pcfx = new byte[PcFxSignature.Length]; Array.Copy(firstDataSectorNotZero, 0, pcfx, 0, pcfx.Length); - if(PcFxSignature.SequenceEqual(pcfx)) MediaType = MediaType.PCFX; + if (PcFxSignature.SequenceEqual(pcfx)) MediaType = MediaType.PCFX; } - if(firstTrackSecondSessionAudio != null) + if (firstTrackSecondSessionAudio != null) { - byte[] jaguar = new byte[AtariSignature.Length]; - for(int i = 0; i + jaguar.Length <= firstTrackSecondSessionAudio.Length; i += 2) + var jaguar = new byte[AtariSignature.Length]; + for (var i = 0; i + jaguar.Length <= firstTrackSecondSessionAudio.Length; i += 2) { Array.Copy(firstTrackSecondSessionAudio, i, jaguar, 0, jaguar.Length); - if(!AtariSignature.SequenceEqual(jaguar)) continue; + if (!AtariSignature.SequenceEqual(jaguar)) continue; MediaType = MediaType.JaguarCD; break; } } - if(firstTrackSecondSession != null) - if(firstTrackSecondSession.Length >= 2336) + if (firstTrackSecondSession != null) + if (firstTrackSecondSession.Length >= 2336) { - byte[] milcd = new byte[2048]; + var milcd = new byte[2048]; Array.Copy(firstTrackSecondSession, 24, milcd, 0, 2048); - if(Dreamcast.DecodeIPBin(milcd).HasValue) MediaType = MediaType.MilCD; + if (Dreamcast.DecodeIPBin(milcd).HasValue) MediaType = MediaType.MilCD; } // TODO: Detect black and white VideoNow // TODO: Detect VideoNow XP - if(MMC.IsVideoNowColor(videoNowColorFrame)) MediaType = MediaType.VideoNowColor; + if (MMC.IsVideoNowColor(videoNowColorFrame)) MediaType = MediaType.VideoNowColor; break; } @@ -1784,25 +1882,25 @@ namespace DiscImageChef.Core.Media.Info case MediaType.BDROM: case MediaType.Unknown: // TODO: Nuon requires reading the filesystem, searching for a file called "/NUON/NUON.RUN" - if(ps2BootSectors != null && ps2BootSectors.Length == 0x6000) + if (ps2BootSectors != null && ps2BootSectors.Length == 0x6000) { // The decryption key is applied as XOR. As first byte is originally always NULL, it gives us the key :) - byte decryptByte = ps2BootSectors[0]; - for(int i = 0; i < 0x6000; i++) ps2BootSectors[i] ^= decryptByte; + var decryptByte = ps2BootSectors[0]; + for (var i = 0; i < 0x6000; i++) ps2BootSectors[i] ^= decryptByte; - string ps2BootSectorsHash = Sha256Context.Data(ps2BootSectors, out _); + var ps2BootSectorsHash = Sha256Context.Data(ps2BootSectors, out _); DicConsole.DebugWriteLine("Media-info Command", "PlayStation 2 boot sectors SHA256: {0}", - ps2BootSectorsHash); - if(ps2BootSectorsHash == PS2_PAL_HASH || ps2BootSectorsHash == PS2_NTSC_HASH || - ps2BootSectorsHash == PS2_JAPANESE_HASH) MediaType = MediaType.PS2DVD; + ps2BootSectorsHash); + if (ps2BootSectorsHash == PS2_PAL_HASH || ps2BootSectorsHash == PS2_NTSC_HASH || + ps2BootSectorsHash == PS2_JAPANESE_HASH) MediaType = MediaType.PS2DVD; } - if(sector1 != null) + if (sector1 != null) { - byte[] tmp = new byte[Ps3Id.Length]; + var tmp = new byte[Ps3Id.Length]; Array.Copy(sector1, 0, tmp, 0, tmp.Length); - if(tmp.SequenceEqual(Ps3Id)) - switch(MediaType) + if (tmp.SequenceEqual(Ps3Id)) + switch (MediaType) { case MediaType.BDROM: MediaType = MediaType.PS3BD; @@ -1814,7 +1912,7 @@ namespace DiscImageChef.Core.Media.Info tmp = new byte[Ps4Id.Length]; Array.Copy(sector1, 512, tmp, 0, tmp.Length); - if(tmp.SequenceEqual(Ps4Id) && MediaType == MediaType.BDROM) MediaType = MediaType.PS4BD; + if (tmp.SequenceEqual(Ps4Id) && MediaType == MediaType.BDROM) MediaType = MediaType.PS4BD; } // TODO: Identify discs that require reading tracks (PC-FX, PlayStation, Sega, etc) @@ -1822,70 +1920,70 @@ namespace DiscImageChef.Core.Media.Info } } - public byte[] MediaSerialNumber { get; } - public byte[] XboxSecuritySector { get; } - public SS.SecuritySector? DecodedXboxSecuritySector { get; } - public XgdInfo XgdInfo { get; } - public byte[] MmcConfiguration { get; } - public byte[] RecognizedFormatLayers { get; } - public byte[] WriteProtectionStatus { get; } - public byte[] DvdPfi { get; } - public PFI.PhysicalFormatInformation? DecodedPfi { get; } - public byte[] DvdDmi { get; } - public byte[] DvdCmi { get; } - public byte[] DvdBca { get; } - public byte[] DvdAacs { get; } - public byte[] DvdRamDds { get; } - public byte[] DvdRamCartridgeStatus { get; } - public byte[] DvdRamSpareArea { get; } - public byte[] LastBorderOutRmd { get; } - public byte[] DvdPreRecordedInfo { get; } - public byte[] DvdrMediaIdentifier { get; } - public byte[] DvdrPhysicalInformation { get; } - public byte[] DvdPlusAdip { get; } - public byte[] DvdPlusDcb { get; } - public byte[] HddvdCopyrightInformation { get; } - public byte[] HddvdrMediumStatus { get; } - public byte[] HddvdrLastRmd { get; } - public byte[] DvdrLayerCapacity { get; } - public byte[] DvdrDlMiddleZoneStart { get; } - public byte[] DvdrDlJumpIntervalSize { get; } - public byte[] DvdrDlManualLayerJumpStartLba { get; } - public byte[] DvdrDlRemapAnchorPoint { get; } - public byte[] BlurayDiscInformation { get; } - public byte[] BlurayPac { get; } - public byte[] BlurayBurstCuttingArea { get; } - public byte[] BlurayDds { get; } - public byte[] BlurayCartridgeStatus { get; } - public byte[] BluraySpareAreaInformation { get; } - public byte[] BlurayRawDfl { get; } - public byte[] BlurayPowResources { get; } - public byte[] Toc { get; } - public byte[] Atip { get; } - public byte[] CompactDiscInformation { get; } - public byte[] Session { get; } - public byte[] RawToc { get; } - public byte[] Pma { get; } - public byte[] CdTextLeadIn { get; } - public TOC.CDTOC? DecodedToc { get; } - public ATIP.CDATIP? DecodedAtip { get; } - public Session.CDSessionInfo? DecodedSession { get; } - public FullTOC.CDFullTOC? FullToc { get; } - public CDTextOnLeadIn.CDText? DecodedCdTextLeadIn { get; } - public byte[] BlurayTrackResources { get; } + public byte[] MediaSerialNumber { get; } + public byte[] XboxSecuritySector { get; } + public SS.SecuritySector? DecodedXboxSecuritySector { get; } + public XgdInfo XgdInfo { get; } + public byte[] MmcConfiguration { get; } + public byte[] RecognizedFormatLayers { get; } + public byte[] WriteProtectionStatus { get; } + public byte[] DvdPfi { get; } + public PFI.PhysicalFormatInformation? DecodedPfi { get; } + public byte[] DvdDmi { get; } + public byte[] DvdCmi { get; } + public byte[] DvdBca { get; } + public byte[] DvdAacs { get; } + public byte[] DvdRamDds { get; } + public byte[] DvdRamCartridgeStatus { get; } + public byte[] DvdRamSpareArea { get; } + public byte[] LastBorderOutRmd { get; } + public byte[] DvdPreRecordedInfo { get; } + public byte[] DvdrMediaIdentifier { get; } + public byte[] DvdrPhysicalInformation { get; } + public byte[] DvdPlusAdip { get; } + public byte[] DvdPlusDcb { get; } + public byte[] HddvdCopyrightInformation { get; } + public byte[] HddvdrMediumStatus { get; } + public byte[] HddvdrLastRmd { get; } + public byte[] DvdrLayerCapacity { get; } + public byte[] DvdrDlMiddleZoneStart { get; } + public byte[] DvdrDlJumpIntervalSize { get; } + public byte[] DvdrDlManualLayerJumpStartLba { get; } + public byte[] DvdrDlRemapAnchorPoint { get; } + public byte[] BlurayDiscInformation { get; } + public byte[] BlurayPac { get; } + public byte[] BlurayBurstCuttingArea { get; } + public byte[] BlurayDds { get; } + public byte[] BlurayCartridgeStatus { get; } + public byte[] BluraySpareAreaInformation { get; } + public byte[] BlurayRawDfl { get; } + public byte[] BlurayPowResources { get; } + public byte[] Toc { get; } + public byte[] Atip { get; } + public byte[] CompactDiscInformation { get; } + public byte[] Session { get; } + public byte[] RawToc { get; } + public byte[] Pma { get; } + public byte[] CdTextLeadIn { get; } + public TOC.CDTOC? DecodedToc { get; } + public ATIP.CDATIP? DecodedAtip { get; } + public Session.CDSessionInfo? DecodedSession { get; } + public FullTOC.CDFullTOC? FullToc { get; } + public CDTextOnLeadIn.CDText? DecodedCdTextLeadIn { get; } + public byte[] BlurayTrackResources { get; } public DiscInformation.StandardDiscInformation? DecodedCompactDiscInformation { get; } - public string Mcn { get; } - public Dictionary Isrcs { get; } - public bool MediaInserted { get; } - public MediaType MediaType { get; } - public DeviceInfo DeviceInfo { get; } - public byte[] ReadCapacity { get; } - public ulong Blocks { get; } - public uint BlockSize { get; } - public byte[] ReadCapacity16 { get; } - public byte[] DensitySupport { get; } - public DensitySupport.DensitySupportHeader? DensitySupportHeader { get; } - public byte[] MediaTypeSupport { get; } - public DensitySupport.MediaTypeSupportHeader? MediaTypeSupportHeader { get; } + public string Mcn { get; } + public Dictionary Isrcs { get; } + public bool MediaInserted { get; } + public MediaType MediaType { get; } + public DeviceInfo DeviceInfo { get; } + public byte[] ReadCapacity { get; } + public ulong Blocks { get; } + public uint BlockSize { get; } + public byte[] ReadCapacity16 { get; } + public byte[] DensitySupport { get; } + public DensitySupport.DensitySupportHeader? DensitySupportHeader { get; } + public byte[] MediaTypeSupport { get; } + public DensitySupport.MediaTypeSupportHeader? MediaTypeSupportHeader { get; } } } \ No newline at end of file diff --git a/DiscImageChef.DiscImages/ZZZRawImage/Helpers.cs b/DiscImageChef.DiscImages/ZZZRawImage/Helpers.cs index 572c4b31a..706fca179 100644 --- a/DiscImageChef.DiscImages/ZZZRawImage/Helpers.cs +++ b/DiscImageChef.DiscImages/ZZZRawImage/Helpers.cs @@ -36,32 +36,33 @@ namespace DiscImageChef.DiscImages { public partial class ZZZRawImage { - MediaType CalculateDiskType() + private MediaType CalculateDiskType() { - if(imageInfo.SectorSize == 2048) + if (imageInfo.SectorSize == 2048) { - if(imageInfo.Sectors == 17090880) return MediaType.REV35; - if(imageInfo.Sectors <= 360000) return MediaType.CD; - if(imageInfo.Sectors <= 2295104) return MediaType.DVDPR; - if(imageInfo.Sectors <= 2298496) return MediaType.DVDR; - if(imageInfo.Sectors <= 4171712) return MediaType.DVDRDL; - if(imageInfo.Sectors <= 4173824) return MediaType.DVDPRDL; - if(imageInfo.Sectors <= 24438784) return MediaType.BDR; + if (imageInfo.Sectors == 58620544) return MediaType.REV120; + if (imageInfo.Sectors == 17090880) return MediaType.REV35; + if (imageInfo.Sectors <= 360000) return MediaType.CD; + if (imageInfo.Sectors <= 2295104) return MediaType.DVDPR; + if (imageInfo.Sectors <= 2298496) return MediaType.DVDR; + if (imageInfo.Sectors <= 4171712) return MediaType.DVDRDL; + if (imageInfo.Sectors <= 4173824) return MediaType.DVDPRDL; + if (imageInfo.Sectors <= 24438784) return MediaType.BDR; return imageInfo.Sectors <= 62500864 ? MediaType.BDRXL : MediaType.Unknown; } - switch(imageInfo.ImageSize) + switch (imageInfo.ImageSize) { - case 80384: return MediaType.ECMA_66; - case 81664: return MediaType.IBM23FD; - case 92160: return MediaType.ATARI_525_SD; + case 80384: return MediaType.ECMA_66; + case 81664: return MediaType.IBM23FD; + case 92160: return MediaType.ATARI_525_SD; case 102400: return MediaType.ACORN_525_SS_SD_40; case 116480: return MediaType.Apple32SS; case 133120: return MediaType.ATARI_525_ED; case 143360: return MediaType.Apple33SS; case 163840: - if(imageInfo.SectorSize == 256) return MediaType.ACORN_525_SS_DD_40; + if (imageInfo.SectorSize == 256) return MediaType.ACORN_525_SS_DD_40; return MediaType.DOS_525_SS_DD_8; case 184320: return MediaType.DOS_525_SS_DD_9; @@ -75,15 +76,15 @@ namespace DiscImageChef.DiscImages case 322560: return MediaType.Apricot_35; case 325632: return MediaType.ECMA_70; case 327680: - if(imageInfo.SectorSize == 256) return MediaType.ACORN_525_SS_DD_80; + if (imageInfo.SectorSize == 256) return MediaType.ACORN_525_SS_DD_80; return MediaType.DOS_525_DS_DD_8; case 368640: - if(extension == ".st") return MediaType.DOS_35_SS_DD_9; + if (extension == ".st") return MediaType.DOS_35_SS_DD_9; return MediaType.DOS_525_DS_DD_9; case 409600: - if(extension == ".st") return MediaType.ATARI_35_SS_DD; + if (extension == ".st") return MediaType.ATARI_35_SS_DD; return MediaType.AppleSonySS; case 450560: return MediaType.ATARI_35_SS_DD_11; @@ -93,62 +94,64 @@ namespace DiscImageChef.DiscImages case 655360: return MediaType.ACORN_525_DS_DD; case 737280: return MediaType.DOS_35_DS_DD_9; case 819200: - if(imageInfo.SectorSize == 256) return MediaType.CBM_35_DD; - if((extension == ".adf" || extension == ".adl") && imageInfo.SectorSize == 1024) + if (imageInfo.SectorSize == 256) return MediaType.CBM_35_DD; + if ((extension == ".adf" || extension == ".adl") && imageInfo.SectorSize == 1024) return MediaType.ACORN_35_DS_DD; - if(extension == ".st") return MediaType.ATARI_35_DS_DD; + if (extension == ".st") return MediaType.ATARI_35_DS_DD; return MediaType.AppleSonyDS; case 839680: return MediaType.FDFORMAT_35_DD; case 901120: - if(extension == ".st") return MediaType.ATARI_35_DS_DD_11; + if (extension == ".st") return MediaType.ATARI_35_DS_DD_11; return MediaType.CBM_AMIGA_35_DD; - case 988416: return MediaType.IBM43FD_256; - case 995072: return MediaType.IBM53FD_256; - case 1021696: return MediaType.ECMA_99_26; - case 1146624: return MediaType.IBM53FD_512; - case 1177344: return MediaType.ECMA_99_15; - case 1222400: return MediaType.IBM53FD_1024; - case 1228800: return MediaType.DOS_525_HD; - case 1255168: return MediaType.ECMA_69_8; - case 1261568: return MediaType.NEC_525_HD; - case 1304320: return MediaType.ECMA_99_8; - case 1427456: return MediaType.FDFORMAT_525_HD; - case 1474560: return MediaType.DOS_35_HD; - case 1638400: return MediaType.ACORN_35_DS_HD; - case 1720320: return MediaType.DMF; - case 1763328: return MediaType.FDFORMAT_35_HD; - case 1802240: return MediaType.CBM_AMIGA_35_HD; - case 1880064: return MediaType.XDF_35; - case 1884160: return MediaType.XDF_35; - case 2949120: return MediaType.DOS_35_ED; - case 9338880: return MediaType.NEC_35_TD; - case 20818944: return MediaType.Floptical; - case 33554432: return MediaType.FD32MB; - case 40387584: return MediaType.PocketZip; - case 100663296: return MediaType.ZIP100; - case 126222336: return MediaType.LS120; - case 127923200: return MediaType.ECMA_154; - case 201410560: return MediaType.HiFD; - case 229632000: return MediaType.ECMA_201; - case 240386048: return MediaType.LS240; - case 250640384: return MediaType.ZIP250; - case 481520640: return MediaType.ECMA_183_512; - case 533403648: return MediaType.ECMA_183; - case 596787200: return MediaType.ECMA_184_512; - case 654540800: return MediaType.ECMA_184; + case 988416: return MediaType.IBM43FD_256; + case 995072: return MediaType.IBM53FD_256; + case 1021696: return MediaType.ECMA_99_26; + case 1146624: return MediaType.IBM53FD_512; + case 1177344: return MediaType.ECMA_99_15; + case 1222400: return MediaType.IBM53FD_1024; + case 1228800: return MediaType.DOS_525_HD; + case 1255168: return MediaType.ECMA_69_8; + case 1261568: return MediaType.NEC_525_HD; + case 1304320: return MediaType.ECMA_99_8; + case 1427456: return MediaType.FDFORMAT_525_HD; + case 1474560: return MediaType.DOS_35_HD; + case 1638400: return MediaType.ACORN_35_DS_HD; + case 1720320: return MediaType.DMF; + case 1763328: return MediaType.FDFORMAT_35_HD; + case 1802240: return MediaType.CBM_AMIGA_35_HD; + case 1880064: return MediaType.XDF_35; + case 1884160: return MediaType.XDF_35; + case 2949120: return MediaType.DOS_35_ED; + case 9338880: return MediaType.NEC_35_TD; + case 20818944: return MediaType.Floptical; + case 33554432: return MediaType.FD32MB; + case 40387584: return MediaType.PocketZip; + case 100663296: return MediaType.ZIP100; + case 126222336: return MediaType.LS120; + case 127923200: return MediaType.ECMA_154; + case 201410560: return MediaType.HiFD; + case 229632000: return MediaType.ECMA_201; + case 240386048: return MediaType.LS240; + case 250640384: return MediaType.ZIP250; + case 481520640: return MediaType.ECMA_183_512; + case 533403648: return MediaType.ECMA_183; + case 596787200: return MediaType.ECMA_184_512; + case 654540800: return MediaType.ECMA_184; case 656310272 when imageInfo.SectorSize == 512: return MediaType.PD650; case 664829952 when imageInfo.SectorSize == 512: return MediaType.PD650; - case 1070617600: return MediaType.Jaz; + case 1070617600: return MediaType.Jaz; #region Commodore + case 174848: case 175531: return MediaType.CBM_1540; case 196608: case 197376: return MediaType.CBM_1540_Ext; case 349696: case 351062: return MediaType.CBM_1571; + #endregion Commodore default: return MediaType.GENERIC_HDD; diff --git a/DiscImageChef/Commands/DeviceReport.cs b/DiscImageChef/Commands/DeviceReport.cs index 6668e8cbd..5463957cb 100644 --- a/DiscImageChef/Commands/DeviceReport.cs +++ b/DiscImageChef/Commands/DeviceReport.cs @@ -51,14 +51,14 @@ using DeviceReport = DiscImageChef.Core.Devices.Report.DeviceReport; namespace DiscImageChef.Commands { - class DeviceReportCommand : Command + internal class DeviceReportCommand : Command { - string devicePath; + private string devicePath; - bool showHelp; + private bool showHelp; public DeviceReportCommand() : base("device-report", - "Tests the device capabilities and creates an JSON report of them.") + "Tests the device capabilities and creates an JSON report of them.") { Options = new OptionSet { @@ -76,92 +76,93 @@ namespace DiscImageChef.Commands { List extra = Options.Parse(arguments); - if(showHelp) + if (showHelp) { Options.WriteOptionDescriptions(CommandSet.Out); - return (int)ErrorNumber.HelpRequested; + return (int) ErrorNumber.HelpRequested; } MainClass.PrintCopyright(); - if(MainClass.Debug) DicConsole.DebugWriteLineEvent += System.Console.Error.WriteLine; - if(MainClass.Verbose) DicConsole.VerboseWriteLineEvent += System.Console.WriteLine; + if (MainClass.Debug) DicConsole.DebugWriteLineEvent += System.Console.Error.WriteLine; + if (MainClass.Verbose) DicConsole.VerboseWriteLineEvent += System.Console.WriteLine; Statistics.AddCommand("device-report"); - if(extra.Count > 1) + if (extra.Count > 1) { DicConsole.ErrorWriteLine("Too many arguments."); - return (int)ErrorNumber.UnexpectedArgumentCount; + return (int) ErrorNumber.UnexpectedArgumentCount; } - if(extra.Count == 0) + if (extra.Count == 0) { DicConsole.ErrorWriteLine("Missing device path."); - return (int)ErrorNumber.MissingArgument; + return (int) ErrorNumber.MissingArgument; } devicePath = extra[0]; - DicConsole.DebugWriteLine("Device-Report command", "--debug={0}", MainClass.Debug); - DicConsole.DebugWriteLine("Device-Report command", "--device={0}", devicePath); + DicConsole.DebugWriteLine("Device-Report command", "--debug={0}", MainClass.Debug); + DicConsole.DebugWriteLine("Device-Report command", "--device={0}", devicePath); DicConsole.DebugWriteLine("Device-Report command", "--verbose={0}", MainClass.Verbose); - if(!DetectOS.IsAdmin) + if (!DetectOS.IsAdmin) { DicConsole - .ErrorWriteLine("Because of the commands sent to a device, device report must be run with administrative privileges."); + .ErrorWriteLine( + "Because of the commands sent to a device, device report must be run with administrative privileges."); DicConsole.ErrorWriteLine("Not continuing."); - return (int)ErrorNumber.NotEnoughPermissions; + return (int) ErrorNumber.NotEnoughPermissions; } - if(devicePath.Length == 2 && devicePath[1] == ':' && devicePath[0] != '/' && char.IsLetter(devicePath[0])) + if (devicePath.Length == 2 && devicePath[1] == ':' && devicePath[0] != '/' && char.IsLetter(devicePath[0])) devicePath = "\\\\.\\" + char.ToUpper(devicePath[0]) + ':'; - Device dev = new Device(devicePath); + var dev = new Device(devicePath); - if(dev.Error) + if (dev.Error) { DicConsole.ErrorWriteLine("Error {0} opening device.", dev.LastError); - return (int)ErrorNumber.CannotOpenDevice; + return (int) ErrorNumber.CannotOpenDevice; } Statistics.AddDevice(dev); - DeviceReportV2 report = new DeviceReportV2 + var report = new DeviceReportV2 { Manufacturer = dev.Manufacturer, Model = dev.Model, Revision = dev.Revision, Type = dev.Type }; - bool removable = false; + bool removable = false; string jsonFile; - if(!string.IsNullOrWhiteSpace(dev.Manufacturer) && !string.IsNullOrWhiteSpace(dev.Revision)) + if (!string.IsNullOrWhiteSpace(dev.Manufacturer) && !string.IsNullOrWhiteSpace(dev.Revision)) jsonFile = dev.Manufacturer + "_" + dev.Model + "_" + dev.Revision + ".json"; - else if(!string.IsNullOrWhiteSpace(dev.Manufacturer)) - jsonFile = dev.Manufacturer + "_" + dev.Model + ".json"; - else if(!string.IsNullOrWhiteSpace(dev.Revision)) jsonFile = dev.Model + "_" + dev.Revision + ".json"; - else jsonFile = dev.Model + ".json"; + else if (!string.IsNullOrWhiteSpace(dev.Manufacturer)) + jsonFile = dev.Manufacturer + "_" + dev.Model + ".json"; + else if (!string.IsNullOrWhiteSpace(dev.Revision)) jsonFile = dev.Model + "_" + dev.Revision + ".json"; + else jsonFile = dev.Model + ".json"; jsonFile = jsonFile.Replace('\\', '_').Replace('/', '_').Replace('?', '_'); - DeviceReport reporter = new DeviceReport(dev, MainClass.Debug); + var reporter = new DeviceReport(dev, MainClass.Debug); ConsoleKeyInfo pressedKey; - if(dev.IsUsb) + if (dev.IsUsb) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Is the device natively USB (in case of doubt, press Y)? (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key == ConsoleKey.Y) + if (pressedKey.Key == ConsoleKey.Y) { report.USB = reporter.UsbReport(); pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Is the media removable from the reading/writing elements? (Y/N): "); pressedKey = System.Console.ReadKey(); @@ -169,26 +170,26 @@ namespace DiscImageChef.Commands } report.USB.RemovableMedia = pressedKey.Key == ConsoleKey.Y; - removable = report.USB.RemovableMedia; + removable = report.USB.RemovableMedia; } } - if(dev.IsFireWire) + if (dev.IsFireWire) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Is the device natively FireWire (in case of doubt, press Y)? (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key != ConsoleKey.Y) + if (pressedKey.Key != ConsoleKey.Y) { report.FireWire = reporter.FireWireReport(); pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Is the media removable from the reading/writing elements? (Y/N): "); pressedKey = System.Console.ReadKey(); @@ -196,17 +197,17 @@ namespace DiscImageChef.Commands } report.FireWire.RemovableMedia = pressedKey.Key == ConsoleKey.Y; - removable = report.FireWire.RemovableMedia; + removable = report.FireWire.RemovableMedia; } } - if(dev.IsPcmcia) report.PCMCIA = reporter.PcmciaReport(); + if (dev.IsPcmcia) report.PCMCIA = reporter.PcmciaReport(); byte[] buffer; string mediumTypeName; string mediumModel; - switch(dev.Type) + switch (dev.Type) { case DeviceType.ATA: { @@ -214,23 +215,23 @@ namespace DiscImageChef.Commands dev.AtaIdentify(out buffer, out _, dev.Timeout, out _); - if(!Identify.Decode(buffer).HasValue) break; + if (!Identify.Decode(buffer).HasValue) break; report.ATA = new Ata {Identify = DeviceReport.ClearIdentify(buffer)}; - if(report.ATA.IdentifyDevice == null) break; + if (report.ATA.IdentifyDevice == null) break; - if((ushort)report.ATA.IdentifyDevice?.GeneralConfiguration == 0x848A) + if ((ushort) report.ATA.IdentifyDevice?.GeneralConfiguration == 0x848A) { report.CompactFlash = true; - removable = false; + removable = false; } - else if(!removable && - report.ATA.IdentifyDevice?.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit - .Removable) == true) + else if (!removable && + report.ATA.IdentifyDevice?.GeneralConfiguration.HasFlag(Identify.GeneralConfigurationBit + .Removable) == true) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Is the media removable from the reading/writing elements? (Y/N): "); pressedKey = System.Console.ReadKey(); @@ -240,10 +241,10 @@ namespace DiscImageChef.Commands removable = pressedKey.Key == ConsoleKey.Y; } - if(removable) + if (removable) { DicConsole - .WriteLine("Please remove any media from the device and press any key when it is out."); + .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 _, dev.Timeout, out _); @@ -251,17 +252,17 @@ namespace DiscImageChef.Commands List mediaTests = new List(); pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.N) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Do you have media that you can insert in the drive? (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key != ConsoleKey.Y) continue; + if (pressedKey.Key != ConsoleKey.Y) continue; DicConsole.WriteLine("Please insert it in the drive and press any key when it is ready."); System.Console.ReadKey(true); @@ -271,16 +272,19 @@ namespace DiscImageChef.Commands DicConsole.Write("Please write the media model and press enter: "); mediumModel = System.Console.ReadLine(); - TestedMedia mediaTest = reporter.ReportAtaMedia(); + var mediaTest = reporter.ReportAtaMedia(); mediaTest.MediumTypeName = mediumTypeName; - mediaTest.Model = mediumModel; + mediaTest.Model = mediumModel; mediaTests.Add(mediaTest); } report.ATA.RemovableMedias = mediaTests; } - else report.ATA.ReadCapabilities = reporter.ReportAta(report.ATA.IdentifyDevice.Value); + else + { + report.ATA.ReadCapabilities = reporter.ReportAta(report.ATA.IdentifyDevice.Value); + } break; } @@ -297,18 +301,19 @@ namespace DiscImageChef.Commands dev.AtapiIdentify(out buffer, out _, dev.Timeout, out _); - if(Identify.Decode(buffer).HasValue) + if (Identify.Decode(buffer).HasValue) report.ATAPI = new Ata {Identify = DeviceReport.ClearIdentify(buffer)}; goto case DeviceType.SCSI; case DeviceType.SCSI: - if(!dev.IsUsb && !dev.IsFireWire && dev.IsRemovable) + if (!dev.IsUsb && !dev.IsFireWire && dev.IsRemovable) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Is the media removable from the reading/writing elements (flash memories ARE NOT removable)? (Y/N): "); + .Write( + "Is the media removable from the reading/writing elements (flash memories ARE NOT removable)? (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } @@ -316,9 +321,9 @@ namespace DiscImageChef.Commands removable = pressedKey.Key == ConsoleKey.Y; } - if(removable) + if (removable) { - switch(dev.ScsiType) + switch (dev.ScsiType) { case PeripheralDeviceTypes.MultiMediaDevice: dev.AllowMediumRemoval(out buffer, dev.Timeout, out _); @@ -332,30 +337,30 @@ namespace DiscImageChef.Commands } DicConsole - .WriteLine("Please remove any media from the device and press any key when it is out."); + .WriteLine("Please remove any media from the device and press any key when it is out."); System.Console.ReadKey(true); } report.SCSI = reporter.ReportScsiInquiry(); - if(report.SCSI == null) break; + if (report.SCSI == null) break; report.SCSI.EVPDPages = reporter.ReportEvpdPages(StringHandlers - .CToString(report.SCSI.Inquiry?.VendorIdentification)?.Trim() - .ToLowerInvariant()); + .CToString(report.SCSI.Inquiry?.VendorIdentification)?.Trim() + .ToLowerInvariant()); reporter.ReportScsiModes(ref report, out byte[] cdromMode); string mediumManufacturer; byte[] senseBuffer; - bool sense; + bool sense; - switch(dev.ScsiType) + switch (dev.ScsiType) { case PeripheralDeviceTypes.MultiMediaDevice: { bool iomegaRev = dev.Manufacturer.ToLowerInvariant() == "iomega" && - dev.Model.ToLowerInvariant() == "rrd"; + dev.Model.ToLowerInvariant().StartsWith("rrd"); List mediaTypes = new List(); @@ -364,121 +369,124 @@ namespace DiscImageChef.Commands ModeSense2AData = cdromMode, Features = reporter.ReportMmcFeatures() }; - if(cdromMode != null && !iomegaRev) + if (cdromMode != null && !iomegaRev) { mediaTypes.Add("CD-ROM"); mediaTypes.Add("Audio CD"); mediaTypes.Add("Enhanced CD (aka E-CD, CD-Plus or CD+)"); - if(report.SCSI.MultiMediaDevice.ModeSense2A.ReadCDR) mediaTypes.Add("CD-R"); - if(report.SCSI.MultiMediaDevice.ModeSense2A.ReadCDRW) + if (report.SCSI.MultiMediaDevice.ModeSense2A.ReadCDR) mediaTypes.Add("CD-R"); + if (report.SCSI.MultiMediaDevice.ModeSense2A.ReadCDRW) { mediaTypes.Add("CD-RW Ultra Speed (marked 16x or higher)"); mediaTypes.Add("CD-RW High Speed (marked between 8x and 12x)"); mediaTypes.Add("CD-RW (marked 4x or lower)"); } - if(report.SCSI.MultiMediaDevice.ModeSense2A.ReadDVDROM) mediaTypes.Add("DVD-ROM"); - if(report.SCSI.MultiMediaDevice.ModeSense2A.ReadDVDRAM) + if (report.SCSI.MultiMediaDevice.ModeSense2A.ReadDVDROM) mediaTypes.Add("DVD-ROM"); + if (report.SCSI.MultiMediaDevice.ModeSense2A.ReadDVDRAM) { mediaTypes.Add("DVD-RAM (1st gen, marked 2.6Gb or 5.2Gb)"); mediaTypes.Add("DVD-RAM (2nd gen, marked 4.7Gb or 9.4Gb)"); } - if(report.SCSI.MultiMediaDevice.ModeSense2A.ReadDVDR) mediaTypes.Add("DVD-R"); + if (report.SCSI.MultiMediaDevice.ModeSense2A.ReadDVDR) mediaTypes.Add("DVD-R"); } - if(report.SCSI.MultiMediaDevice.Features != null && !iomegaRev) + if (report.SCSI.MultiMediaDevice.Features != null && !iomegaRev) { - if(report.SCSI.MultiMediaDevice.Features.CanReadBD || - report.SCSI.MultiMediaDevice.Features.CanReadBDR || - report.SCSI.MultiMediaDevice.Features.CanReadBDRE1 || - report.SCSI.MultiMediaDevice.Features.CanReadBDRE2 || - report.SCSI.MultiMediaDevice.Features.CanReadBDROM || - report.SCSI.MultiMediaDevice.Features.CanReadOldBDR || - report.SCSI.MultiMediaDevice.Features.CanReadOldBDRE || - report.SCSI.MultiMediaDevice.Features.CanReadOldBDROM) + if (report.SCSI.MultiMediaDevice.Features.CanReadBD || + report.SCSI.MultiMediaDevice.Features.CanReadBDR || + report.SCSI.MultiMediaDevice.Features.CanReadBDRE1 || + report.SCSI.MultiMediaDevice.Features.CanReadBDRE2 || + report.SCSI.MultiMediaDevice.Features.CanReadBDROM || + report.SCSI.MultiMediaDevice.Features.CanReadOldBDR || + report.SCSI.MultiMediaDevice.Features.CanReadOldBDRE || + report.SCSI.MultiMediaDevice.Features.CanReadOldBDROM) { - if(!mediaTypes.Contains("BD-ROM")) mediaTypes.Add("BD-ROM"); - if(!mediaTypes.Contains("BD-R HTL (not LTH)")) mediaTypes.Add("BD-R HTL (not LTH)"); - if(!mediaTypes.Contains("BD-RE")) mediaTypes.Add("BD-RE"); - if(!mediaTypes.Contains("BD-R LTH")) mediaTypes.Add("BD-R LTH"); - if(!mediaTypes.Contains("BD-R Triple Layer (100Gb)")) + if (!mediaTypes.Contains("BD-ROM")) mediaTypes.Add("BD-ROM"); + if (!mediaTypes.Contains("BD-R HTL (not LTH)")) + mediaTypes.Add("BD-R HTL (not LTH)"); + if (!mediaTypes.Contains("BD-RE")) mediaTypes.Add("BD-RE"); + if (!mediaTypes.Contains("BD-R LTH")) mediaTypes.Add("BD-R LTH"); + if (!mediaTypes.Contains("BD-R Triple Layer (100Gb)")) mediaTypes.Add("BD-R Triple Layer (100Gb)"); - if(!mediaTypes.Contains("BD-R Quad Layer (128Gb)")) + if (!mediaTypes.Contains("BD-R Quad Layer (128Gb)")) mediaTypes.Add("BD-R Quad Layer (128Gb)"); - if(!mediaTypes.Contains("Ultra HD Blu-ray movie")) + if (!mediaTypes.Contains("Ultra HD Blu-ray movie")) mediaTypes.Add("Ultra HD Blu-ray movie"); - if(!mediaTypes.Contains("PlayStation 3 game")) mediaTypes.Add("PlayStation 3 game"); - if(!mediaTypes.Contains("PlayStation 4 game")) mediaTypes.Add("PlayStation 4 game"); - if(!mediaTypes.Contains("Xbox One game")) mediaTypes.Add("Xbox One game"); - if(!mediaTypes.Contains("Nintendo Wii U game")) + if (!mediaTypes.Contains("PlayStation 3 game")) + mediaTypes.Add("PlayStation 3 game"); + if (!mediaTypes.Contains("PlayStation 4 game")) + mediaTypes.Add("PlayStation 4 game"); + if (!mediaTypes.Contains("Xbox One game")) mediaTypes.Add("Xbox One game"); + if (!mediaTypes.Contains("Nintendo Wii U game")) mediaTypes.Add("Nintendo Wii U game"); } - if(report.SCSI.MultiMediaDevice.Features.CanReadCD || - report.SCSI.MultiMediaDevice.Features.MultiRead) + if (report.SCSI.MultiMediaDevice.Features.CanReadCD || + report.SCSI.MultiMediaDevice.Features.MultiRead) { - if(!mediaTypes.Contains("CD-ROM")) mediaTypes.Add("CD-ROM"); - if(!mediaTypes.Contains("Audio CD")) mediaTypes.Add("Audio CD"); - if(!mediaTypes.Contains("Enhanced CD (aka E-CD, CD-Plus or CD+)")) + if (!mediaTypes.Contains("CD-ROM")) mediaTypes.Add("CD-ROM"); + if (!mediaTypes.Contains("Audio CD")) mediaTypes.Add("Audio CD"); + if (!mediaTypes.Contains("Enhanced CD (aka E-CD, CD-Plus or CD+)")) mediaTypes.Add("Enhanced CD (aka E-CD, CD-Plus or CD+)"); - if(!mediaTypes.Contains("CD-R")) mediaTypes.Add("CD-R"); - if(!mediaTypes.Contains("CD-RW Ultra Speed (marked 16x or higher)")) + if (!mediaTypes.Contains("CD-R")) mediaTypes.Add("CD-R"); + if (!mediaTypes.Contains("CD-RW Ultra Speed (marked 16x or higher)")) mediaTypes.Add("CD-RW Ultra Speed (marked 16x or higher)"); - if(!mediaTypes.Contains("CD-RW High Speed (marked between 8x and 12x)")) + if (!mediaTypes.Contains("CD-RW High Speed (marked between 8x and 12x)")) mediaTypes.Add("CD-RW High Speed (marked between 8x and 12x)"); - if(!mediaTypes.Contains("CD-RW (marked 4x or lower)")) + if (!mediaTypes.Contains("CD-RW (marked 4x or lower)")) mediaTypes.Add("CD-RW (marked 4x or lower)"); } - if(report.SCSI.MultiMediaDevice.Features.CanReadCDMRW) - if(!mediaTypes.Contains("CD-MRW")) + if (report.SCSI.MultiMediaDevice.Features.CanReadCDMRW) + if (!mediaTypes.Contains("CD-MRW")) mediaTypes.Add("CD-MRW"); - if(report.SCSI.MultiMediaDevice.Features.CanReadDDCD) + if (report.SCSI.MultiMediaDevice.Features.CanReadDDCD) { - if(!mediaTypes.Contains("DDCD-ROM")) mediaTypes.Add("DDCD-ROM"); - if(!mediaTypes.Contains("DDCD-R")) mediaTypes.Add("DDCD-R"); - if(!mediaTypes.Contains("DDCD-RW")) mediaTypes.Add("DDCD-RW"); + if (!mediaTypes.Contains("DDCD-ROM")) mediaTypes.Add("DDCD-ROM"); + if (!mediaTypes.Contains("DDCD-R")) mediaTypes.Add("DDCD-R"); + if (!mediaTypes.Contains("DDCD-RW")) mediaTypes.Add("DDCD-RW"); } - if(report.SCSI.MultiMediaDevice.Features.CanReadDVD || - report.SCSI.MultiMediaDevice.Features.DVDMultiRead || - report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusR || - report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusRDL || - report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusRW || - report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusRWDL) + if (report.SCSI.MultiMediaDevice.Features.CanReadDVD || + report.SCSI.MultiMediaDevice.Features.DVDMultiRead || + report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusR || + report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusRDL || + report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusRW || + report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusRWDL) { - if(!mediaTypes.Contains("DVD-ROM")) mediaTypes.Add("DVD-ROM"); - if(!mediaTypes.Contains("DVD-R")) mediaTypes.Add("DVD-R"); - if(!mediaTypes.Contains("DVD-RW")) mediaTypes.Add("DVD-RW"); - if(!mediaTypes.Contains("DVD+R")) mediaTypes.Add("DVD+R"); - if(!mediaTypes.Contains("DVD+RW")) mediaTypes.Add("DVD+RW"); - if(!mediaTypes.Contains("DVD-R DL")) mediaTypes.Add("DVD-R DL"); - if(!mediaTypes.Contains("DVD+R DL")) mediaTypes.Add("DVD+R DL"); - if(!mediaTypes.Contains("Nintendo GameCube game")) + if (!mediaTypes.Contains("DVD-ROM")) mediaTypes.Add("DVD-ROM"); + if (!mediaTypes.Contains("DVD-R")) mediaTypes.Add("DVD-R"); + if (!mediaTypes.Contains("DVD-RW")) mediaTypes.Add("DVD-RW"); + if (!mediaTypes.Contains("DVD+R")) mediaTypes.Add("DVD+R"); + if (!mediaTypes.Contains("DVD+RW")) mediaTypes.Add("DVD+RW"); + if (!mediaTypes.Contains("DVD-R DL")) mediaTypes.Add("DVD-R DL"); + if (!mediaTypes.Contains("DVD+R DL")) mediaTypes.Add("DVD+R DL"); + if (!mediaTypes.Contains("Nintendo GameCube game")) mediaTypes.Add("Nintendo GameCube game"); - if(!mediaTypes.Contains("Nintendo Wii game")) mediaTypes.Add("Nintendo Wii game"); + if (!mediaTypes.Contains("Nintendo Wii game")) mediaTypes.Add("Nintendo Wii game"); } - if(report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusMRW) - if(!mediaTypes.Contains("DVD+MRW")) + if (report.SCSI.MultiMediaDevice.Features.CanReadDVDPlusMRW) + if (!mediaTypes.Contains("DVD+MRW")) mediaTypes.Add("DVD+MRW"); - if(report.SCSI.MultiMediaDevice.Features.CanReadHDDVD || - report.SCSI.MultiMediaDevice.Features.CanReadHDDVDR) + if (report.SCSI.MultiMediaDevice.Features.CanReadHDDVD || + report.SCSI.MultiMediaDevice.Features.CanReadHDDVDR) { - if(!mediaTypes.Contains("HD DVD-ROM")) mediaTypes.Add("HD DVD-ROM"); - if(!mediaTypes.Contains("HD DVD-R")) mediaTypes.Add("HD DVD-R"); - if(!mediaTypes.Contains("HD DVD-RW")) mediaTypes.Add("HD DVD-RW"); + if (!mediaTypes.Contains("HD DVD-ROM")) mediaTypes.Add("HD DVD-ROM"); + if (!mediaTypes.Contains("HD DVD-R")) mediaTypes.Add("HD DVD-R"); + if (!mediaTypes.Contains("HD DVD-RW")) mediaTypes.Add("HD DVD-RW"); } - if(report.SCSI.MultiMediaDevice.Features.CanReadHDDVDRAM) - if(!mediaTypes.Contains("HD DVD-RAM")) + if (report.SCSI.MultiMediaDevice.Features.CanReadHDDVDRAM) + if (!mediaTypes.Contains("HD DVD-RAM")) mediaTypes.Add("HD DVD-RAM"); } - if(iomegaRev) + if (iomegaRev) { mediaTypes.Add("REV 35Gb"); mediaTypes.Add("REV 70Gb"); @@ -487,18 +495,18 @@ namespace DiscImageChef.Commands // Very old CD drives do not contain mode page 2Ah neither GET CONFIGURATION, so just try all CDs on them // Also don't get confident, some drives didn't know CD-RW but are able to read them - if(mediaTypes.Count == 0 || mediaTypes.Contains("CD-ROM")) + if (mediaTypes.Count == 0 || mediaTypes.Contains("CD-ROM")) { - if(!mediaTypes.Contains("CD-ROM")) mediaTypes.Add("CD-ROM"); - if(!mediaTypes.Contains("Audio CD")) mediaTypes.Add("Audio CD"); - if(!mediaTypes.Contains("CD-R")) mediaTypes.Add("CD-R"); - if(!mediaTypes.Contains("CD-RW Ultra Speed (marked 16x or higher)")) + if (!mediaTypes.Contains("CD-ROM")) mediaTypes.Add("CD-ROM"); + if (!mediaTypes.Contains("Audio CD")) mediaTypes.Add("Audio CD"); + if (!mediaTypes.Contains("CD-R")) mediaTypes.Add("CD-R"); + if (!mediaTypes.Contains("CD-RW Ultra Speed (marked 16x or higher)")) mediaTypes.Add("CD-RW Ultra Speed (marked 16x or higher)"); - if(!mediaTypes.Contains("CD-RW High Speed (marked between 8x and 12x)")) + if (!mediaTypes.Contains("CD-RW High Speed (marked between 8x and 12x)")) mediaTypes.Add("CD-RW High Speed (marked between 8x and 12x)"); - if(!mediaTypes.Contains("CD-RW (marked 4x or lower)")) + if (!mediaTypes.Contains("CD-RW (marked 4x or lower)")) mediaTypes.Add("CD-RW (marked 4x or lower)"); - if(!mediaTypes.Contains("Enhanced CD (aka E-CD, CD-Plus or CD+)")) + if (!mediaTypes.Contains("Enhanced CD (aka E-CD, CD-Plus or CD+)")) mediaTypes.Add("Enhanced CD (aka E-CD, CD-Plus or CD+)"); } @@ -507,19 +515,20 @@ namespace DiscImageChef.Commands bool tryPlextor = false, tryHldtst = false, tryPioneer = false, tryNec = false; tryPlextor |= dev.Manufacturer.ToLowerInvariant() == "plextor"; - tryHldtst |= dev.Manufacturer.ToLowerInvariant() == "hl-dt-st"; + tryHldtst |= dev.Manufacturer.ToLowerInvariant() == "hl-dt-st"; tryPioneer |= dev.Manufacturer.ToLowerInvariant() == "pioneer"; - tryNec |= dev.Manufacturer.ToLowerInvariant() == "nec"; + tryNec |= dev.Manufacturer.ToLowerInvariant() == "nec"; - if(MainClass.Debug && !iomegaRev) + if (MainClass.Debug && !iomegaRev) { - if(!tryPlextor) + if (!tryPlextor) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Do you have want to try Plextor vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); + .Write( + "Do you have want to try Plextor vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } @@ -527,13 +536,14 @@ namespace DiscImageChef.Commands tryPlextor |= pressedKey.Key == ConsoleKey.Y; } - if(!tryNec) + if (!tryNec) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Do you have want to try NEC vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); + .Write( + "Do you have want to try NEC vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } @@ -541,13 +551,14 @@ namespace DiscImageChef.Commands tryNec |= pressedKey.Key == ConsoleKey.Y; } - if(!tryPioneer) + if (!tryPioneer) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Do you have want to try Pioneer vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); + .Write( + "Do you have want to try Pioneer vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } @@ -555,13 +566,14 @@ namespace DiscImageChef.Commands tryPioneer |= pressedKey.Key == ConsoleKey.Y; } - if(!tryHldtst) + if (!tryHldtst) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Do you have want to try HL-DT-ST (aka LG) vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); + .Write( + "Do you have want to try HL-DT-ST (aka LG) vendor commands? THIS IS DANGEROUS AND CAN IRREVERSIBLY DESTROY YOUR DRIVE (IF IN DOUBT PRESS 'N') (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } @@ -570,59 +582,60 @@ namespace DiscImageChef.Commands } } - if(dev.Model.StartsWith("PD-", StringComparison.Ordinal)) mediaTypes.Add("PD-650"); + if (dev.Model.StartsWith("PD-", StringComparison.Ordinal)) mediaTypes.Add("PD-650"); List mediaTests = new List(); - foreach(string mediaType in mediaTypes) + foreach (string mediaType in mediaTypes) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + 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); + mediaType); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key != ConsoleKey.Y) continue; + if (pressedKey.Key != ConsoleKey.Y) continue; dev.AllowMediumRemoval(out senseBuffer, dev.Timeout, out _); dev.EjectTray(out senseBuffer, dev.Timeout, out _); DicConsole - .WriteLine("Please insert it in the drive and press any key when it is ready."); + .WriteLine("Please insert it in the drive and press any key when it is ready."); System.Console.ReadKey(true); bool mediaIsRecognized = true; sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(sense) + if (sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); - if(decSense.HasValue) - if(decSense.Value.ASC == 0x3A) + if (decSense.HasValue) + { + if (decSense.Value.ASC == 0x3A) { int leftRetries = 50; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } mediaIsRecognized &= !sense; } - else if(decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) + else if (decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) { int leftRetries = 50; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } @@ -630,15 +643,15 @@ namespace DiscImageChef.Commands mediaIsRecognized &= !sense; } // These should be trapped by the OS but seems in some cases they're not - else if(decSense.Value.ASC == 0x28) + else if (decSense.Value.ASC == 0x28) { int leftRetries = 50; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } @@ -648,74 +661,76 @@ namespace DiscImageChef.Commands else { DicConsole.DebugWriteLine("Device-Report command", - "Device not ready. Sense {0}h ASC {1:X2}h ASCQ {2:X2}h", - decSense.Value.SenseKey, decSense.Value.ASC, - decSense.Value.ASCQ); + "Device not ready. Sense {0}h ASC {1:X2}h ASCQ {2:X2}h", + decSense.Value.SenseKey, decSense.Value.ASC, + decSense.Value.ASCQ); mediaIsRecognized = false; } + } else { DicConsole.DebugWriteLine("Device-Report command", - "Got sense status but no sense buffer"); + "Got sense status but no sense buffer"); mediaIsRecognized = false; } } - TestedMedia mediaTest = new TestedMedia(); - if(mediaIsRecognized) + var mediaTest = new TestedMedia(); + if (mediaIsRecognized) { mediaTest = reporter.ReportMmcMedia(mediaType, tryPlextor, tryPioneer, tryNec, - tryHldtst); + tryHldtst); - if(mediaTest is null) continue; + if (mediaTest is null) continue; - if(mediaTest.SupportsReadLong == true && - mediaTest.LongBlockSize == mediaTest.BlockSize) + if (mediaTest.SupportsReadLong == true && + mediaTest.LongBlockSize == mediaTest.BlockSize) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): "); + .Write( + "Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key == ConsoleKey.Y) + if (pressedKey.Key == ConsoleKey.Y) { - for(ushort i = (ushort)mediaTest.BlockSize;; i++) + for (ushort i = (ushort) mediaTest.BlockSize;; i++) { DicConsole.Write("\rTrying to READ LONG with a size of {0} bytes...", - i); + i); sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, i, - dev.Timeout, out _); - if(!sense) + dev.Timeout, out _); + if (!sense) { - if(MainClass.Debug) mediaTest.ReadLong10Data = buffer; + if (MainClass.Debug) mediaTest.ReadLong10Data = buffer; mediaTest.LongBlockSize = i; break; } - if(i == ushort.MaxValue) break; + if (i == ushort.MaxValue) break; } DicConsole.WriteLine(); } } - if(MainClass.Debug && mediaTest.SupportsReadLong == true && - mediaTest.LongBlockSize != mediaTest.BlockSize) + if (MainClass.Debug && mediaTest.SupportsReadLong == true && + mediaTest.LongBlockSize != mediaTest.BlockSize) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - (ushort)mediaTest.LongBlockSize, dev.Timeout, out _); - if(!sense) mediaTest.ReadLong10Data = buffer; + (ushort) mediaTest.LongBlockSize, dev.Timeout, out _); + if (!sense) mediaTest.ReadLong10Data = buffer; } // TODO: READ LONG (16) } - mediaTest.MediumTypeName = mediaType; + mediaTest.MediumTypeName = mediaType; mediaTest.MediaIsRecognized = mediaIsRecognized; mediaTests.Add(mediaTest); @@ -733,20 +748,20 @@ namespace DiscImageChef.Commands List seqTests = new List(); pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.N) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Do you have media that you can insert in the drive? (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key != ConsoleKey.Y) continue; + if (pressedKey.Key != ConsoleKey.Y) continue; DicConsole - .WriteLine("Please insert it in the drive and press any key when it is ready."); + .WriteLine("Please insert it in the drive and press any key when it is ready."); System.Console.ReadKey(true); DicConsole.Write("Please write a description of the media type and press enter: "); @@ -760,34 +775,35 @@ namespace DiscImageChef.Commands sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); DicConsole.DebugWriteLine("Device reporting", "sense = {0}", sense); - if(sense) + if (sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); - if(decSense.HasValue) - if(decSense.Value.ASC == 0x3A) + if (decSense.HasValue) + { + if (decSense.Value.ASC == 0x3A) { int leftRetries = 50; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } mediaIsRecognized &= !sense; } - else if(decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) + else if (decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) { int leftRetries = 50; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } @@ -795,15 +811,15 @@ namespace DiscImageChef.Commands mediaIsRecognized &= !sense; } // These should be trapped by the OS but seems in some cases they're not - else if(decSense.Value.ASC == 0x28) + else if (decSense.Value.ASC == 0x28) { int leftRetries = 50; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } @@ -813,26 +829,27 @@ namespace DiscImageChef.Commands else { DicConsole.DebugWriteLine("Device-Report command", - "Device not ready. Sense {0} ASC {1:X2}h ASCQ {2:X2}h", - decSense.Value.SenseKey, decSense.Value.ASC, - decSense.Value.ASCQ); + "Device not ready. Sense {0} ASC {1:X2}h ASCQ {2:X2}h", + decSense.Value.SenseKey, decSense.Value.ASC, + decSense.Value.ASCQ); mediaIsRecognized = false; } + } else { DicConsole.DebugWriteLine("Device-Report command", - "Got sense status but no sense buffer"); + "Got sense status but no sense buffer"); mediaIsRecognized = false; } } - TestedSequentialMedia seqTest = new TestedSequentialMedia(); + var seqTest = new TestedSequentialMedia(); - if(mediaIsRecognized) seqTest = reporter.ReportSscMedia(); + if (mediaIsRecognized) seqTest = reporter.ReportSscMedia(); - seqTest.MediumTypeName = mediumTypeName; - seqTest.Manufacturer = mediumManufacturer; - seqTest.Model = mediumModel; + seqTest.MediumTypeName = mediumTypeName; + seqTest.Manufacturer = mediumManufacturer; + seqTest.Model = mediumModel; seqTest.MediaIsRecognized = mediaIsRecognized; seqTests.Add(seqTest); @@ -848,25 +865,25 @@ namespace DiscImageChef.Commands break; default: { - if(removable) + if (removable) { List mediaTests = new List(); pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.N) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole.Write("Do you have media that you can insert in the drive? (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key != ConsoleKey.Y) continue; + if (pressedKey.Key != ConsoleKey.Y) continue; DicConsole - .WriteLine("Please insert it in the drive and press any key when it is ready."); + .WriteLine("Please insert it in the drive and press any key when it is ready."); System.Console.ReadKey(true); DicConsole.Write("Please write a description of the media type and press enter: "); @@ -879,95 +896,99 @@ namespace DiscImageChef.Commands bool mediaIsRecognized = true; sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(sense) + if (sense) { FixedSense? decSense = Sense.DecodeFixed(senseBuffer); - if(decSense.HasValue) - if(decSense.Value.ASC == 0x3A) + if (decSense.HasValue) + if (decSense.Value.ASC == 0x3A) { int leftRetries = 20; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } mediaIsRecognized &= !sense; } - else if(decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) + else if (decSense.Value.ASC == 0x04 && decSense.Value.ASCQ == 0x01) { int leftRetries = 20; - while(leftRetries > 0) + while (leftRetries > 0) { DicConsole.Write("\rWaiting for drive to become ready"); Thread.Sleep(2000); sense = dev.ScsiTestUnitReady(out senseBuffer, dev.Timeout, out _); - if(!sense) break; + if (!sense) break; leftRetries--; } mediaIsRecognized &= !sense; } - else mediaIsRecognized = false; + else + { + mediaIsRecognized = false; + } else mediaIsRecognized = false; } - TestedMedia mediaTest = new TestedMedia(); + var mediaTest = new TestedMedia(); - if(mediaIsRecognized) + if (mediaIsRecognized) { mediaTest = reporter.ReportScsiMedia(); - if(mediaTest.SupportsReadLong == true && - mediaTest.LongBlockSize == mediaTest.BlockSize) + if (mediaTest.SupportsReadLong == true && + mediaTest.LongBlockSize == mediaTest.BlockSize) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): "); + .Write( + "Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key == ConsoleKey.Y) + if (pressedKey.Key == ConsoleKey.Y) { - for(ushort i = (ushort)mediaTest.BlockSize;; i++) + for (ushort i = (ushort) mediaTest.BlockSize;; i++) { DicConsole - .Write("\rTrying to READ LONG with a size of {0} bytes...", i); + .Write("\rTrying to READ LONG with a size of {0} bytes...", i); sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - i, dev.Timeout, out _); - if(!sense) + i, dev.Timeout, out _); + if (!sense) { mediaTest.LongBlockSize = i; break; } - if(i == ushort.MaxValue) break; + if (i == ushort.MaxValue) break; } DicConsole.WriteLine(); } } - if(MainClass.Debug && mediaTest.SupportsReadLong == true && - mediaTest.LongBlockSize != mediaTest.BlockSize) + if (MainClass.Debug && mediaTest.SupportsReadLong == true && + mediaTest.LongBlockSize != mediaTest.BlockSize) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - (ushort)mediaTest.LongBlockSize, dev.Timeout, out _); - if(!sense) mediaTest.ReadLong10Data = buffer; + (ushort) mediaTest.LongBlockSize, dev.Timeout, out _); + if (!sense) mediaTest.ReadLong10Data = buffer; } } - mediaTest.MediumTypeName = mediumTypeName; - mediaTest.Manufacturer = mediumManufacturer; - mediaTest.Model = mediumModel; + mediaTest.MediumTypeName = mediumTypeName; + mediaTest.Manufacturer = mediumManufacturer; + mediaTest.Model = mediumModel; mediaTest.MediaIsRecognized = mediaIsRecognized; mediaTests.Add(mediaTest); @@ -979,50 +1000,51 @@ namespace DiscImageChef.Commands { report.SCSI.ReadCapabilities = reporter.ReportScsi(); - if(report.SCSI.ReadCapabilities.SupportsReadLong == true && - report.SCSI.ReadCapabilities.LongBlockSize == - report.SCSI.ReadCapabilities.BlockSize) + if (report.SCSI.ReadCapabilities.SupportsReadLong == true && + report.SCSI.ReadCapabilities.LongBlockSize == + report.SCSI.ReadCapabilities.BlockSize) { pressedKey = new ConsoleKeyInfo(); - while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) + while (pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N) { DicConsole - .Write("Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): "); + .Write( + "Drive supports SCSI READ LONG but I cannot find the correct size. Do you want me to try? (This can take hours) (Y/N): "); pressedKey = System.Console.ReadKey(); DicConsole.WriteLine(); } - if(pressedKey.Key == ConsoleKey.Y) + if (pressedKey.Key == ConsoleKey.Y) { - for(ushort i = (ushort)report.SCSI.ReadCapabilities.BlockSize;; 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, - dev.Timeout, out _); - if(!sense) + dev.Timeout, out _); + if (!sense) { - if(MainClass.Debug) + if (MainClass.Debug) report.SCSI.ReadCapabilities.ReadLong10Data = buffer; report.SCSI.ReadCapabilities.LongBlockSize = i; break; } - if(i == ushort.MaxValue) break; + if (i == ushort.MaxValue) break; } DicConsole.WriteLine(); } } - if(MainClass.Debug && report.SCSI.ReadCapabilities.SupportsReadLong == true && - report.SCSI.ReadCapabilities.LongBlockSize != - report.SCSI.ReadCapabilities.BlockSize) + if (MainClass.Debug && report.SCSI.ReadCapabilities.SupportsReadLong == true && + report.SCSI.ReadCapabilities.LongBlockSize != + report.SCSI.ReadCapabilities.BlockSize) { sense = dev.ReadLong10(out buffer, out senseBuffer, false, false, 0, - (ushort)report.SCSI.ReadCapabilities.LongBlockSize, - dev.Timeout, out _); - if(!sense) report.SCSI.ReadCapabilities.ReadLong10Data = buffer; + (ushort) report.SCSI.ReadCapabilities.LongBlockSize, + dev.Timeout, out _); + if (!sense) report.SCSI.ReadCapabilities.ReadLong10Data = buffer; } } @@ -1034,25 +1056,25 @@ namespace DiscImageChef.Commands default: throw new NotSupportedException("Unknown device type."); } - FileStream jsonFs = new FileStream(jsonFile, FileMode.Create); + FileStream jsonFs = new FileStream(jsonFile, FileMode.Create); StreamWriter jsonSw = new StreamWriter(jsonFs); jsonSw.Write(JsonConvert.SerializeObject(report, Formatting.Indented, - new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore - })); + new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + })); jsonSw.Close(); jsonFs.Close(); - using(DicContext ctx = DicContext.Create(Settings.Settings.LocalDbPath)) + using (var ctx = DicContext.Create(Settings.Settings.LocalDbPath)) { ctx.Reports.Add(new Report(report)); ctx.SaveChanges(); } // TODO: - if(Settings.Settings.Current.ShareReports) Remote.SubmitReport(report); - return (int)ErrorNumber.NoError; + if (Settings.Settings.Current.ShareReports) Remote.SubmitReport(report); + return (int) ErrorNumber.NoError; } } } \ No newline at end of file