diff --git a/DiscImageChef.CommonTypes.csproj b/DiscImageChef.CommonTypes.csproj index 19f4a6ab7..0aa63206d 100644 --- a/DiscImageChef.CommonTypes.csproj +++ b/DiscImageChef.CommonTypes.csproj @@ -36,6 +36,7 @@ + \ No newline at end of file diff --git a/MediaType.cs b/MediaType.cs index 723645a1e..217d26344 100644 --- a/MediaType.cs +++ b/MediaType.cs @@ -184,9 +184,12 @@ namespace DiscImageChef.CommonTypes #endregion MiniDisc based #region Plasmon UDO - /// Ultra Density Optical + /// 5.25", Phase-Change, 1834348 sectors, 8192 bytes/sector, Ultra Density Optical, ECMA-350, ISO 17345 UDO, + /// 5.25", Phase-Change, 3669724 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976 UDO2, + /// 5.25", Write-Once, 3668759 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976 + UDO2_WORM, #endregion Plasmon UDO #region Sony game media @@ -399,18 +402,6 @@ namespace DiscImageChef.CommonTypes ECMA_78, /// 5,25", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, FM ECMA_78_2, - /// 3,5", M.O., 250000 sectors, 512 bytes/sector - ECMA_154, - /// 5,25", M.O., 940470 sectors, 512 bytes/sector - ECMA_183_512, - /// 5,25", M.O., 520902 sectors, 1024 bytes/sector - ECMA_183_1024, - /// 5,25", M.O., 1165600 sectors, 512 bytes/sector - ECMA_184_512, - /// 5,25", M.O., 639200 sectors, 1024 bytes/sector - ECMA_184_1024, - /// 3,5", M.O., 448500 sectors, 512 bytes/sector - ECMA_201, #endregion ECMA floppy standards #region FDFORMAT, non-standard floppy formats @@ -449,7 +440,6 @@ namespace DiscImageChef.CommonTypes #region Iomega Bernoulli, Bernoulli2, - DataPlay, Ditto, DittoMax, Jaz, @@ -501,7 +491,9 @@ namespace DiscImageChef.CommonTypes #region Exatape Exatape15m, + Exatape22m, Exatape22mAME, + Exatape28m, Exatape40m, Exatape45m, Exatape54m, @@ -509,7 +501,7 @@ namespace DiscImageChef.CommonTypes Exatape76m, Exatape80m, Exatape106m, - Exatape106mXL, + Exatape160mXL, Exatape112m, Exatape125m, Exatape150m, @@ -540,6 +532,7 @@ namespace DiscImageChef.CommonTypes SQ800, SQ1500, SQ2000, + SyJet, #endregion SyQuest #region Nintendo @@ -679,9 +672,64 @@ namespace DiscImageChef.CommonTypes VXA3, #endregion VXA + #region Magneto-optical + /// 5,25", M.O., ??? sectors, 1024 bytes/sector, ECMA-153, ISO 11560 + ECMA_153, + /// 5,25", M.O., ??? sectors, 512 bytes/sector, ECMA-153, ISO 11560 + ECMA_153_512, + /// 3,5", M.O., 249850 sectors, 512 bytes/sector, ECMA-154, ISO 10090 + ECMA_154, + /// 5,25", M.O., 904995 sectors, 512 bytes/sector, ECMA-183, ISO 13481 + ECMA_183_512, + /// 5,25", M.O., 498526 sectors, 1024 bytes/sector, ECMA-183, ISO 13481 + ECMA_183, + /// 5,25", M.O., 1128772 or 1163337 sectors, 512 bytes/sector, ECMA-183, ISO 13549 + ECMA_184_512, + /// 5,25", M.O., 603466 or 637041 sectors, 1024 bytes/sector, ECMA-183, ISO 13549 + ECMA_184, + /// 300mm, M.O., ??? sectors, 1024 bytes/sector, ECMA-189, ISO 13614 + ECMA_189, + /// 300mm, M.O., ??? sectors, 1024 bytes/sector, ECMA-190, ISO 13403 + ECMA_190, + /// 5,25", M.O., 936921 or 948770 sectors, 1024 bytes/sector, ECMA-195, ISO 13842 + ECMA_195, + /// 5,25", M.O., 1644581 or 1647371 sectors, 512 bytes/sector, ECMA-195, ISO 13842 + ECMA_195_512, + /// 3,5", M.O., 446325 sectors, 512 bytes/sector, ECMA-201, ISO 13963 + ECMA_201, + /// 3,5", M.O., 429975 sectors, 512 bytes/sector, embossed, ISO 13963 + ECMA_201_ROM, + /// 3,5", M.O., 371371 sectors, 1024 bytes/sector, ECMA-223 + ECMA_223, + /// 3,5", M.O., 694929 sectors, 512 bytes/sector, ECMA-223 + ECMA_223_512, + /// 5,25", M.O., 1244621 sectors, 1024 bytes/sector, ECMA-238, ISO 15486 + ECMA_238, + /// 3,5", M.O., 318988, 320332 or 321100 sectors, 2048 bytes/sector, ECMA-239, ISO 15498 + ECMA_239, + /// 356mm, M.O., 14476734 sectors, 1024 bytes/sector, ECMA-260, ISO 15898 + ECMA_260, + /// 356mm, M.O., 24445990 sectors, 1024 bytes/sector, ECMA-260, ISO 15898 + ECMA_260_Double, + /// 5,25", M.O., 1128134 sectors, 2048 bytes/sector, ECMA-280, ISO 18093 + ECMA_280, + /// 300mm, M.O., 7355716 sectors, 2048 bytes/sector, ECMA-317, ISO 20162 + ECMA_317, + /// 5,25", M.O., 1095840 sectors, 4096 bytes/sector, ECMA-322, ISO 22092 + ECMA_322, + /// 5,25", M.O., 2043664 sectors, 2048 bytes/sector, ECMA-322, ISO 22092 + ECMA_322_2k, + /// 3,5", M.O., 605846 sectors, 2048 bytes/sector, Cherry Book, GigaMo, ECMA-351, ISO 17346 + GigaMo, + /// 3,5", M.O., 1063146 sectors, 2048 bytes/sector, Cherry Book 2, GigaMo 2, ECMA-353, ISO 22533 + GigaMo2, + UnknownMO, + #endregion Magneto-optical + #region Other floppy standards CompactFloppy, DemiDiskette, + /// 3.5", 652 tracks, 2 sides, 512 bytes/sector, Floptical, ECMA-207, ISO 14169 Floptical, HiFD, LS120, @@ -713,13 +761,23 @@ namespace DiscImageChef.CommonTypes SmartMedia, xD, XQD, + DataPlay, + /// 120mm, Phase-Change, 1298496 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485 + PD650, + /// 120mm, Write-Once, 1281856 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485 + PD650_WORM, #endregion Miscellaneous #region Generic hard disks Microdrive, RDX, - GENERIC_HDD + /// Imation 320Gb RDX + RDX320, + GENERIC_HDD, + Zone_HDD, + // USB flash drives + FlashDrive #endregion Generic hard disks }; } - + \ No newline at end of file diff --git a/MediaTypeFromSCSI.cs b/MediaTypeFromSCSI.cs new file mode 100644 index 000000000..5687a49a8 --- /dev/null +++ b/MediaTypeFromSCSI.cs @@ -0,0 +1,1621 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : MediaTypeFromSCSI.cs +// Version : 1.0 +// Author(s) : Natalia Portillo +// +// Component : Component +// +// Revision : $Revision$ +// Last change by : $Author$ +// Date : $Date$ +// +// --[ Description ] ---------------------------------------------------------- +// +// Description +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2011-2015 Claunia.com +// ****************************************************************************/ +// //$Id$ + +namespace DiscImageChef.CommonTypes +{ + public static class MediaTypeFromSCSI + { + public static MediaType Get(byte scsiPeripheralType, string vendor, string model, byte mediumType, byte densityCode, ulong blocks, uint blockSize) + { + switch (scsiPeripheralType) + { + // Direct access device + case 0x00: + // Simpilified access device + case 0x0E: + { + if (mediumType == 0x03 || mediumType == 0x05 || mediumType == 0x07) + { + goto case 0x07; + } + + if (vendor.ToLowerInvariant() == "syquest") + { + if (blocks == 173400 && blockSize == 256) + return MediaType.SQ400; + if (blockSize == 512) + { + if (model.ToLowerInvariant().StartsWith("syjet")) + return MediaType.SyJet; + + switch (blocks) + { + case 262144: + return MediaType.EZ135; + case 524288: + return MediaType.SQ327; + } + } + + return MediaType.Unknown; + } + + if (model.ToLowerInvariant().StartsWith("zip")) + { + if (blockSize == 512) + { + if (blocks == 196608) + return MediaType.ZIP100; + if (blocks == 489532) + return MediaType.ZIP250; + return MediaType.ZIP750; + } + + return MediaType.Unknown; + } + + if (model.ToLowerInvariant().StartsWith("jaz")) + { + if (blockSize == 512) + { + if (blocks == 2091050) + return MediaType.Jaz; + if (blocks == 3915600) + return MediaType.Jaz2; + } + + return MediaType.Unknown; + } + + if (model.ToLowerInvariant().StartsWith("ls-")) + { + if (blockSize == 512) + { + if (blocks == 246528) + return MediaType.LS120; + if (blocks == 2880) + return MediaType.DOS_35_HD; + if (blocks == 1440) + return MediaType.DOS_35_DS_DD_9; + } + + return MediaType.Unknown; + } + + if (model.ToLowerInvariant().StartsWith("rdx")) + { + if (blockSize == 512) + { + if (blocks == 625134256) + return MediaType.RDX320; + return MediaType.RDX; + } + + return MediaType.Unknown; + } + + switch (mediumType) + { + case 0x01: + switch (blockSize) + { + case 128: + switch (blocks) + { + 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; + } + break; + case 256: + 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 1121: + return MediaType.IBM33FD_256; + case 1280: + return MediaType.ACORN_525_SS_DD_80; + case 2002: + return MediaType.RX02; + } + break; + case 319: + switch (blocks) + { + case 256: + return MediaType.IBM23FD; + } + break; + case 512: + 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 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; + case 694929: + return MediaType.ECMA_223_512; + case 904995: + return MediaType.ECMA_183_512; + case 1128772: + case 1163337: + return MediaType.ECMA_184_512; + case 1281856: + return MediaType.PD650_WORM; + case 1298496: + return MediaType.PD650; + case 1644581: + case 1647371: + return MediaType.ECMA_195_512; + } + break; + case 1024: + { + switch (blocks) + { + 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 14476734: + return MediaType.ECMA_260; + case 24445990: + return MediaType.ECMA_260_Double; + } + } + break; + case 2048: + { + switch (blocks) + { + case 318988: + case 320332: + case 321100: + return MediaType.ECMA_239; + 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; + } + } + break; + case 4096: + { + switch (blocks) + { + case 1095840: + return MediaType.ECMA_322; + } + } + break; + case 8192: + { + switch (blocks) + { + case 1834348: + return MediaType.UDO; + case 3668759: + return MediaType.UDO2_WORM; + case 3669724: + return MediaType.UDO2; + } + } + break; + } + return MediaType.Unknown; + case 0x02: + switch (blockSize) + { + case 128: + switch (blocks) + { + case 3848: + return MediaType.IBM43FD_128; + case 4004: + return MediaType.ECMA_59; + } + break; + case 256: + switch (blocks) + { + case 910: + return MediaType.Apple32DS; + case 1120: + return MediaType.Apple33DS; + case 1280: + return MediaType.ECMA_70; + case 2560: + return MediaType.ECMA_78; + case 3848: + return MediaType.IBM53FD_256; + case 4004: + return MediaType.ECMA_99_26; + } + break; + case 512: + 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.ECMA_100; + case 1600: + return MediaType.ACORN_35_DS_DD; + 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.ECMA_125; + case 3360: + return MediaType.DMF; + case 3444: + return MediaType.FDFORMAT_35_HD; + case 3520: + return MediaType.CBM_AMIGA_35_HD; + case 5760: + return MediaType.ECMA_147; + case 249850: + return MediaType.ECMA_154; + case 429975: + return MediaType.ECMA_201_ROM; + case 446325: + return MediaType.ECMA_201; + case 694929: + return MediaType.ECMA_223_512; + case 904995: + return MediaType.ECMA_183_512; + case 1128772: + case 1163337: + return MediaType.ECMA_184_512; + case 1281856: + return MediaType.PD650_WORM; + case 1298496: + return MediaType.PD650; + case 1644581: + case 1647371: + return MediaType.ECMA_195_512; + } + break; + case 1024: + switch (blocks) + { + 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 14476734: + return MediaType.ECMA_260; + case 24445990: + return MediaType.ECMA_260_Double; + } + break; + case 2048: + { + switch (blocks) + { + case 318988: + case 320332: + case 321100: + return MediaType.ECMA_239; + 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; + } + } + break; + case 4096: + { + switch (blocks) + { + case 1095840: + return MediaType.ECMA_322; + } + } + break; + case 8192: + { + switch (blocks) + { + case 1834348: + return MediaType.UDO; + case 3668759: + return MediaType.UDO2_WORM; + case 3669724: + return MediaType.UDO2; + } + } + break; + } + return MediaType.Unknown; + case 0x09: + return MediaType.ECMA_54; + case 0x0A: + return MediaType.ECMA_59; + case 0x0B: + switch (blockSize) + { + case 256: + return MediaType.ECMA_69_26; + case 512: + return MediaType.ECMA_69_15; + case 1024: + return MediaType.ECMA_69_8; + } + return MediaType.Unknown; + case 0x0E: + return MediaType.ECMA_66; + case 0x12: + return MediaType.ECMA_70; + case 0x16: + switch (blockSize) + { + case 256: + return MediaType.ECMA_78; + case 512: + return MediaType.ECMA_78_2; + } + return MediaType.Unknown; + case 0x1A: + switch (blockSize) + { + 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.ECMA_100; + case 0x93: + return MediaType.NEC_35_HD_15; + case 0x94: + return MediaType.ECMA_125; + } + + switch (blockSize) + { + case 128: + { + switch (blocks) + { + 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; + case 3848: + return MediaType.IBM43FD_128; + case 4004: + return MediaType.ECMA_59; + } + } + break; + case 256: + { + 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 1120: + return MediaType.Apple33DS; + case 1121: + return MediaType.IBM33FD_256; + case 1280: + return MediaType.ECMA_70; + case 2002: + return MediaType.RX02; + case 2560: + return MediaType.ECMA_78; + case 3848: + return MediaType.IBM53FD_256; + case 4004: + return MediaType.ECMA_99_26; + } + } + break; + case 319: + switch (blocks) + { + case 256: + return MediaType.IBM23FD; + } + break; + case 512: + { + 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 1280: + return MediaType.DOS_35_DS_DD_8; + case 1440: + return MediaType.ECMA_100; + case 1600: + return MediaType.ACORN_35_DS_DD; + 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.ECMA_125; + case 3360: + return MediaType.DMF; + case 3444: + return MediaType.FDFORMAT_35_HD; + case 3520: + return MediaType.CBM_AMIGA_35_HD; + case 5760: + return MediaType.ECMA_147; + } + } + break; + case 1024: + { + switch (blocks) + { + 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; + } + } + break; + } + + return MediaType.Unknown; + } + // Sequential access device + case 0x01: + { + switch (mediumType) + { + case 0x00: + switch (densityCode) + { + case 0x04: + return MediaType.QIC11; + case 0x05: + return MediaType.QIC24; + case 0x09: + return MediaType.IBM3490; + case 0x0F: + return MediaType.QIC120; + case 0x10: + return MediaType.QIC150; + case 0x28: + return MediaType.IBM3490E; + case 0x40: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO; + if (model.ToLowerInvariant().StartsWith("sdz")) + return MediaType.SAIT1; + break; + } + case 0x41: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO2; + break; + } + case 0x42: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO2; + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T9840A; + break; + } + case 0x43: + { + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T9940A; + break; + } + case 0x44: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO3; + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T9940B; + break; + } + case 0x45: + { + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T9840C; + break; + } + case 0x46: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO4; + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T9840D; + break; + } + case 0x4A: + { + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T10000A; + break; + } + case 0x4B: + { + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T10000B; + break; + } + case 0x4C: + { + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T10000C; + break; + } + case 0x4D: + { + if (vendor.ToLowerInvariant() == "stk") + return MediaType.T10000D; + break; + } + case 0x58: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO5; + break; + } + } + break; + case 0x01: + { + switch (densityCode) + { + case 0x44: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO3WORM; + break; + } + case 0x46: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO4WORM; + break; + } + case 0x58: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO5WORM; + break; + } + } + } + break; + case 0x18: + { + switch (densityCode) + { + case 0x00: + case 0x40: + { + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO; + break; + } + } + } + } + break; + case 0x28: + { + switch (densityCode) + { + case 0x00: + case 0x42: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO2; + break; + } + } + } + break; + case 0x33: + { + switch (densityCode) + { + case 0x00: + case 0x25: + { + if (model.ToLowerInvariant().StartsWith("dat")) + return MediaType.DDS3; + break; + } + } + } + break; + case 0x34: + { + switch (densityCode) + { + case 0x00: + case 0x26: + { + if (model.ToLowerInvariant().StartsWith("dat")) + return MediaType.DDS4; + break; + } + } + } + break; + case 0x35: + { + switch (densityCode) + { + case 0x00: + case 0x47: + { + if (model.ToLowerInvariant().StartsWith("dat")) + return MediaType.DAT72; + break; + } + } + } + break; + case 0x38: + { + switch (densityCode) + { + case 0x00: + case 0x44: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO3; + break; + } + } + } + break; + case 0x3C: + { + switch (densityCode) + { + case 0x00: + case 0x44: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO3WORM; + break; + } + } + } + break; + case 0x48: + { + switch (densityCode) + { + case 0x00: + case 0x46: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO4; + break; + } + } + } + break; + case 0x4C: + { + switch (densityCode) + { + case 0x00: + case 0x46: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO4WORM; + break; + } + } + } + break; + case 0x58: + { + switch (densityCode) + { + case 0x00: + case 0x58: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO5; + break; + } + } + } + break; + case 0x5C: + { + switch (densityCode) + { + case 0x00: + case 0x58: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO5WORM; + break; + } + } + } + break; + case 0x68: + { + switch (densityCode) + { + case 0x00: + case 0x5A: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO6; + break; + } + } + } + break; + case 0x6C: + { + switch (densityCode) + { + case 0x00: + case 0x5A: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO6WORM; + break; + } + } + } + break; + case 0x78: + { + switch (densityCode) + { + case 0x00: + case 0x5C: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO7; + break; + } + } + } + break; + case 0x7C: + { + switch (densityCode) + { + case 0x00: + case 0x5C: + { + if (model.ToLowerInvariant().StartsWith("ult")) + return MediaType.LTO7WORM; + break; + } + } + } + break; + case 0x81: + { + switch (densityCode) + { + case 0x00: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape15m; + if (vendor.ToLowerInvariant() == "ibm") + return MediaType.IBM3592; + if (model.ToLowerInvariant().StartsWith("vxa")) + return MediaType.VXA1; + break; + } + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape15m; + break; + } + case 0x29: + case 0x2A: + { + if (vendor.ToLowerInvariant() == "ibm") + return MediaType.IBM3592; + break; + } + case 0x80: + { + if (model.ToLowerInvariant().StartsWith("vxa")) + return MediaType.VXA1; + break; + } + } + } + break; + case 0x82: + { + switch (densityCode) + { + case 0x00: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape28m; + if (vendor.ToLowerInvariant() == "ibm") + return MediaType.IBM3592; + break; + } + case 0x0A: + { + if (model.ToLowerInvariant().StartsWith("dlt")) + return MediaType.CompactTapeI; + break; + } + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape28m; + break; + } + case 0x16: + { + if (model.ToLowerInvariant().StartsWith("dlt")) + return MediaType.CompactTapeII; + break; + } + case 0x29: + case 0x2A: + { + if (vendor.ToLowerInvariant() == "ibm") + return MediaType.IBM3592; + break; + } + case 0x81: + { + if (model.ToLowerInvariant().StartsWith("vxa")) + return MediaType.VXA2; + break; + } + case 0x82: + { + if (model.ToLowerInvariant().StartsWith("vxa")) + return MediaType.VXA3; + break; + } + } + } + break; + case 0x83: + { + switch (densityCode) + { + case 0x00: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape54m; + if (model.ToLowerInvariant().StartsWith("dlt")) + return MediaType.DLTtapeIII; + break; + } + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape54m; + break; + } + case 0x17: + case 0x18: + case 0x19: + case 0x80: + case 0x81: + { + if (model.ToLowerInvariant().StartsWith("dlt")) + return MediaType.DLTtapeIII; + break; + } + } + } + break; + case 0x84: + { + switch (densityCode) + { + case 0x00: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape80m; + if (model.ToLowerInvariant().StartsWith("dlt")) + return MediaType.DLTtapeIIIxt; + break; + } + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape80m; + break; + } + case 0x19: + case 0x80: + case 0x81: + { + if (model.ToLowerInvariant().StartsWith("dlt")) + return MediaType.DLTtapeIIIxt; + break; + } + } + } + break; + case 0x85: + { + switch (densityCode) + { + case 0x00: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape106m; + if (model.ToLowerInvariant().StartsWith("dlt") || + model.ToLowerInvariant().StartsWith("sdlt") || + model.ToLowerInvariant().StartsWith("superdlt")) + return MediaType.DLTtapeIV; + if (model.ToLowerInvariant().StartsWith("stt")) + return MediaType.Travan5; + break; + } + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape106m; + break; + } + case 0x1A: + case 0x1B: + case 0x40: + case 0x41: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + { + if (model.ToLowerInvariant().StartsWith("dlt") || + model.ToLowerInvariant().StartsWith("sdlt") || + model.ToLowerInvariant().StartsWith("superdlt")) + return MediaType.DLTtapeIV; + break; + } + case 0x46: + { + if (model.ToLowerInvariant().StartsWith("stt")) + return MediaType.Travan5; + break; + } + } + } + break; + case 0x86: + { + switch (densityCode) + { + case 0x00: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape160mXL; + if (model.ToLowerInvariant().StartsWith("dlt") || + model.ToLowerInvariant().StartsWith("sdlt") || + model.ToLowerInvariant().StartsWith("superdlt")) + return MediaType.SDLT1; + break; + } + case 0x8C: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape160mXL; + break; + } + case 0x91: + case 0x92: + case 0x93: + { + if (model.ToLowerInvariant().StartsWith("dlt") || + model.ToLowerInvariant().StartsWith("sdlt") || + model.ToLowerInvariant().StartsWith("superdlt")) + return MediaType.SDLT1; + break; + } + } + } + break; + case 0x87: + { + switch (densityCode) + { + case 0x00: + case 0x4A: + { + if (model.ToLowerInvariant().StartsWith("dlt") || + model.ToLowerInvariant().StartsWith("sdlt") || + model.ToLowerInvariant().StartsWith("superdlt")) + return MediaType.SDLT2; + break; + } + } + } + break; + case 0x90: + { + switch (densityCode) + { + case 0x00: + case 0x50: + case 0x98: + case 0x99: + { + if (model.ToLowerInvariant().StartsWith("dlt") || + model.ToLowerInvariant().StartsWith("sdlt") || + model.ToLowerInvariant().StartsWith("superdlt")) + return MediaType.VStapeI; + break; + } + } + } + break; + case 0x95: + { + if (model.ToLowerInvariant().StartsWith("stt")) + return MediaType.Travan7; + } + break; + case 0xC1: + { + switch (densityCode) + { + case 0x00: + case 0x14: + case 0x15: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape22m; + break; + } + } + } + break; + case 0xC2: + { + switch (densityCode) + { + case 0x00: + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape40m; + break; + } + } + } + break; + case 0xC3: + { + switch (densityCode) + { + case 0x00: + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape76m; + break; + } + } + } + break; + case 0xC4: + { + switch (densityCode) + { + case 0x00: + case 0x14: + case 0x15: + case 0x27: + case 0x8C: + case 0x90: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape112m; + break; + } + } + } + break; + case 0xD1: + { + switch (densityCode) + { + case 0x00: + case 0x27: + case 0x28: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape22mAME; + break; + } + } + } + break; + case 0xD2: + { + switch (densityCode) + { + case 0x00: + case 0x27: + case 0x28: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape170m; + break; + } + } + } + break; + case 0xD3: + { + switch (densityCode) + { + case 0x00: + case 0x27: + case 0x28: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape125m; + break; + } + } + } + break; + case 0xD4: + { + switch (densityCode) + { + case 0x00: + case 0x27: + case 0x28: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape45m; + break; + } + } + } + break; + case 0xD5: + { + switch (densityCode) + { + case 0x00: + case 0x27: + case 0x28: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape225m; + break; + } + } + } + break; + case 0xD6: + { + switch (densityCode) + { + case 0x00: + case 0x27: + case 0x28: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape150m; + break; + } + } + } + break; + case 0xD7: + { + switch (densityCode) + { + case 0x00: + case 0x27: + case 0x28: + { + if (model.ToLowerInvariant().StartsWith("exb")) + return MediaType.Exatape75m; + break; + } + } + } + break; + } + + return MediaType.Unknown; + } + // Write-once device + case 0x04: + // Optical device + case 0x07: + { + if (mediumType == 0x01 || mediumType == 0x02 || mediumType == 0x03 || mediumType == 0x05 || mediumType == 0x07) + { + switch (blockSize) + { + case 512: + { + switch (blocks) + { + case 249850: + return MediaType.ECMA_154; + case 429975: + return MediaType.ECMA_201_ROM; + case 446325: + return MediaType.ECMA_201; + case 694929: + return MediaType.ECMA_223_512; + case 904995: + return MediaType.ECMA_183_512; + case 1128772: + case 1163337: + return MediaType.ECMA_184_512; + case 1281856: + return MediaType.PD650_WORM; + case 1298496: + return MediaType.PD650; + case 1644581: + case 1647371: + return MediaType.ECMA_195_512; + default: + return MediaType.UnknownMO; + } + } + case 1024: + { + switch (blocks) + { + 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 14476734: + return MediaType.ECMA_260; + case 24445990: + return MediaType.ECMA_260_Double; + default: + return MediaType.UnknownMO; + } + } + case 2048: + { + switch (blocks) + { + case 318988: + case 320332: + case 321100: + return MediaType.ECMA_239; + 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; + } + } + case 4096: + { + switch (blocks) + { + case 1095840: + return MediaType.ECMA_322; + default: + return MediaType.UnknownMO; + } + } + case 8192: + { + 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; + } + } + + return MediaType.UnknownMO; + } + // MultiMedia Device + case 0x05: + { + switch (mediumType) + { + case 0x00: + return MediaType.CD; + case 0x01: + case 0x05: + return MediaType.CDROM; + case 0x02: + case 0x06: + return MediaType.CDDA; + case 0x03: + case 0x07: + return MediaType.CDPLUS; + case 0x04: + return MediaType.PCD; + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + return MediaType.CDR; + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + return MediaType.CDRW; + case 0x80: + if (model.ToLowerInvariant().StartsWith("ult")) + { + switch (densityCode) + { + case 0x42: + return MediaType.LTO2; + case 0x44: + return MediaType.LTO3; + case 0x46: + return MediaType.LTO4; + case 0x58: + return MediaType.LTO5; + } + } + break; + } + } + break; + // Host managed zoned block device + case 0x14: + { + return MediaType.Zone_HDD; + } + } + + return MediaType.Unknown; + } + } +} \ No newline at end of file