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