diff --git a/ATA/Identify.cs b/ATA/Identify.cs
index e8c7d4d4f..d79bdc1a5 100644
--- a/ATA/Identify.cs
+++ b/ATA/Identify.cs
@@ -127,7 +127,8 @@ namespace DiscImageChef.Decoders.ATA
/// Words 10 to 19
/// Device serial number, right justified, padded with spaces
///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string SerialNumber;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
+ public string SerialNumber;
///
/// Word 20
/// Manufacturer defined
@@ -153,12 +154,14 @@ namespace DiscImageChef.Decoders.ATA
/// Words 23 to 26
/// Firmware revision, left justified, padded with spaces
///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string FirmwareRevision;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
+ public string FirmwareRevision;
///
/// Words 27 to 46
/// Model number, left justified, padded with spaces
///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)] public string Model;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
+ public string Model;
///
/// Word 47 bits 7 to 0
/// Maximum number of sectors that can be transferred per
@@ -565,7 +568,8 @@ namespace DiscImageChef.Decoders.ATA
/// Words 121 to 125
/// Reserved
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] public ushort[] ReservedWords121;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
+ public ushort[] ReservedWords121;
///
/// Word 126
@@ -591,7 +595,8 @@ namespace DiscImageChef.Decoders.ATA
///
/// Words 129 to 159
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 31)] public ushort[] ReservedWords129;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 31)]
+ public ushort[] ReservedWords129;
///
/// Word 160
@@ -607,7 +612,8 @@ namespace DiscImageChef.Decoders.ATA
/// Words 161 to 167
/// Reserved for CFA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public ushort[] ReservedCFA;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
+ public ushort[] ReservedCFA;
///
/// Word 168
@@ -624,7 +630,8 @@ namespace DiscImageChef.Decoders.ATA
/// Words 170 to 173
/// Additional product identifier
///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string AdditionalPID;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
+ public string AdditionalPID;
///
/// Word 174
@@ -641,12 +648,14 @@ namespace DiscImageChef.Decoders.ATA
/// Words 176 to 195
/// Current media serial number
///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)] public string MediaSerial;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
+ public string MediaSerial;
///
/// Words 196 to 205
/// Current media manufacturer
///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string MediaManufacturer;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
+ public string MediaManufacturer;
///
/// Word 206
@@ -759,7 +768,8 @@ namespace DiscImageChef.Decoders.ATA
/// Words 224 to 229
/// Reserved for CE-ATA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public ushort[] ReservedCEATA224;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
+ public ushort[] ReservedCEATA224;
///
/// Words 230 to 233
@@ -781,7 +791,8 @@ namespace DiscImageChef.Decoders.ATA
///
/// Words 236 to 254
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 19)] public ushort[] ReservedWords;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 19)]
+ public ushort[] ReservedWords;
///
/// Word 255 bits 7 to 0
@@ -1490,10 +1501,10 @@ namespace DiscImageChef.Decoders.ATA
[Flags]
public enum SCTCommandTransportBit : ushort
{
- Vendor15 = 0x8000,
- Vendor14 = 0x4000,
- Vendor13 = 0x2000,
- Vendor12 = 0x1000,
+ Vendor15 = 0x8000,
+ Vendor14 = 0x4000,
+ Vendor13 = 0x2000,
+ Vendor12 = 0x1000,
Reserved11 = 0x0800,
Reserved10 = 0x0400,
Reserved09 = 0x0200,
@@ -1857,14 +1868,14 @@ namespace DiscImageChef.Decoders.ATA
IdentifyDevice ATAID = (IdentifyDevice)Marshal.PtrToStructure(ptr, typeof(IdentifyDevice));
Marshal.FreeHGlobal(ptr);
- ATAID.WWN = DescrambleWWN(ATAID.WWN);
+ ATAID.WWN = DescrambleWWN(ATAID.WWN);
ATAID.WWNExtension = DescrambleWWN(ATAID.WWNExtension);
- ATAID.SerialNumber = DescrambleATAString(IdentifyDeviceResponse, 10 * 2, 20);
- ATAID.FirmwareRevision = DescrambleATAString(IdentifyDeviceResponse, 23 * 2, 8);
- ATAID.Model = DescrambleATAString(IdentifyDeviceResponse, 27 * 2, 40);
- ATAID.AdditionalPID = DescrambleATAString(IdentifyDeviceResponse, 170 * 2, 8);
- ATAID.MediaSerial = DescrambleATAString(IdentifyDeviceResponse, 176 * 2, 40);
+ ATAID.SerialNumber = DescrambleATAString(IdentifyDeviceResponse, 10 * 2, 20);
+ ATAID.FirmwareRevision = DescrambleATAString(IdentifyDeviceResponse, 23 * 2, 8);
+ ATAID.Model = DescrambleATAString(IdentifyDeviceResponse, 27 * 2, 40);
+ ATAID.AdditionalPID = DescrambleATAString(IdentifyDeviceResponse, 170 * 2, 8);
+ ATAID.MediaSerial = DescrambleATAString(IdentifyDeviceResponse, 176 * 2, 40);
ATAID.MediaManufacturer = DescrambleATAString(IdentifyDeviceResponse, 196 * 2, 20);
return ATAID;
@@ -1885,12 +1896,14 @@ namespace DiscImageChef.Decoders.ATA
StringBuilder sb = new StringBuilder();
bool atapi = false;
- bool cfa = false;
+ bool cfa = false;
IdentifyDevice ATAID = IdentifyDeviceResponse.Value;
if(ATAID.GeneralConfiguration.HasFlag(GeneralConfigurationBit.NonMagnetic))
- if((ushort)ATAID.GeneralConfiguration != 0x848A) atapi = true;
- else cfa = true;
+ if((ushort)ATAID.GeneralConfiguration != 0x848A)
+ atapi = true;
+ else
+ cfa = true;
if(atapi) sb.AppendLine("ATAPI device");
else if(cfa) sb.AppendLine("CompactFlash device");
@@ -1924,7 +1937,7 @@ namespace DiscImageChef.Decoders.ATA
ata5 = false,
ata6 = false,
ata7 = false,
- acs = false,
+ acs = false,
acs2 = false,
acs3 = false,
acs4 = false;
@@ -1957,7 +1970,7 @@ namespace DiscImageChef.Decoders.ATA
ata5 |= ATAID.MajorVersion.HasFlag(MajorVersionBit.AtaAtapi5);
ata6 |= ATAID.MajorVersion.HasFlag(MajorVersionBit.AtaAtapi6);
ata7 |= ATAID.MajorVersion.HasFlag(MajorVersionBit.AtaAtapi7);
- acs |= ATAID.MajorVersion.HasFlag(MajorVersionBit.Ata8ACS);
+ acs |= ATAID.MajorVersion.HasFlag(MajorVersionBit.Ata8ACS);
acs2 |= ATAID.MajorVersion.HasFlag(MajorVersionBit.ACS2);
acs3 |= ATAID.MajorVersion.HasFlag(MajorVersionBit.ACS3);
acs4 |= ATAID.MajorVersion.HasFlag(MajorVersionBit.ACS4);
@@ -1972,66 +1985,77 @@ namespace DiscImageChef.Decoders.ATA
maxatalevel = 1;
if(minatalevel > 1) minatalevel = 1;
}
+
if(ata2)
{
sb.Append("ATA-2 ");
maxatalevel = 2;
if(minatalevel > 2) minatalevel = 2;
}
+
if(ata3)
{
sb.Append("ATA-3 ");
maxatalevel = 3;
if(minatalevel > 3) minatalevel = 3;
}
+
if(ata4)
{
sb.Append("ATA/ATAPI-4 ");
maxatalevel = 4;
if(minatalevel > 4) minatalevel = 4;
}
+
if(ata5)
{
sb.Append("ATA/ATAPI-5 ");
maxatalevel = 5;
if(minatalevel > 5) minatalevel = 5;
}
+
if(ata6)
{
sb.Append("ATA/ATAPI-6 ");
maxatalevel = 6;
if(minatalevel > 6) minatalevel = 6;
}
+
if(ata7)
{
sb.Append("ATA/ATAPI-7 ");
maxatalevel = 7;
if(minatalevel > 7) minatalevel = 7;
}
+
if(acs)
{
sb.Append("ATA8-ACS ");
maxatalevel = 8;
if(minatalevel > 8) minatalevel = 8;
}
+
if(acs2)
{
sb.Append("ATA8-ACS2 ");
maxatalevel = 9;
if(minatalevel > 9) minatalevel = 9;
}
+
if(acs3)
{
sb.Append("ATA8-ACS3 ");
maxatalevel = 10;
if(minatalevel > 10) minatalevel = 10;
}
+
if(acs4)
{
sb.Append("ATA8-ACS4 ");
maxatalevel = 11;
if(minatalevel > 11) minatalevel = 11;
}
+
sb.AppendLine();
sb.Append("Maximum ATA revision supported: ");
@@ -2365,8 +2389,10 @@ namespace DiscImageChef.Decoders.ATA
}
if(ATAID.NominalRotationRate != 0x0000 && ATAID.NominalRotationRate != 0xFFFF)
- if(ATAID.NominalRotationRate == 0x0001) sb.AppendLine("Device does not rotate.");
- else sb.AppendFormat("Device rotate at {0} rpm", ATAID.NominalRotationRate).AppendLine();
+ if(ATAID.NominalRotationRate == 0x0001)
+ sb.AppendLine("Device does not rotate.");
+ else
+ sb.AppendFormat("Device rotate at {0} rpm", ATAID.NominalRotationRate).AppendLine();
uint logicalsectorsize = 0;
if(!atapi)
@@ -2376,17 +2402,19 @@ namespace DiscImageChef.Decoders.ATA
if((ATAID.PhysLogSectorSize & 0x8000) == 0x0000 && (ATAID.PhysLogSectorSize & 0x4000) == 0x4000)
{
if((ATAID.PhysLogSectorSize & 0x1000) == 0x1000)
- if(ATAID.LogicalSectorWords <= 255 || ATAID.LogicalAlignment == 0xFFFF) logicalsectorsize = 512;
- else logicalsectorsize = ATAID.LogicalSectorWords * 2;
+ if(ATAID.LogicalSectorWords <= 255 || ATAID.LogicalAlignment == 0xFFFF)
+ logicalsectorsize = 512;
+ else
+ logicalsectorsize = ATAID.LogicalSectorWords * 2;
else logicalsectorsize = 512;
if((ATAID.PhysLogSectorSize & 0x2000) == 0x2000)
- physicalsectorsize = logicalsectorsize * (uint)Math.Pow(2, ATAID.PhysLogSectorSize & 0xF);
+ physicalsectorsize = logicalsectorsize * (uint)Math.Pow(2, ATAID.PhysLogSectorSize & 0xF);
else physicalsectorsize = logicalsectorsize;
}
else
{
- logicalsectorsize = 512;
+ logicalsectorsize = 512;
physicalsectorsize = 512;
}
@@ -2394,7 +2422,7 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendFormat("Logical sector size: {0} bytes", logicalsectorsize).AppendLine();
if(logicalsectorsize != physicalsectorsize && (ATAID.LogicalAlignment & 0x8000) == 0x0000 &&
- (ATAID.LogicalAlignment & 0x4000) == 0x4000)
+ (ATAID.LogicalAlignment & 0x4000) == 0x4000)
sb.AppendFormat("Logical sector starts at offset {0} from physical sector",
ATAID.LogicalAlignment & 0x3FFF).AppendLine();
@@ -2428,70 +2456,75 @@ namespace DiscImageChef.Decoders.ATA
if(minatalevel <= 5)
if(ATAID.CurrentSectors > 0)
sb.AppendFormat("Device size in CHS mode: {0} bytes, {1} Mb, {2} MiB",
- (ulong)ATAID.CurrentSectors * logicalsectorsize,
+ (ulong)ATAID.CurrentSectors * logicalsectorsize,
(ulong)ATAID.CurrentSectors * logicalsectorsize / 1000 / 1000,
- (ulong)ATAID.CurrentSectors * 512 / 1024 / 1024).AppendLine();
+ (ulong)ATAID.CurrentSectors * 512 / 1024 / 1024).AppendLine();
else
{
ulong currentSectors = (ulong)(ATAID.Cylinders * ATAID.Heads * ATAID.SectorsPerTrack);
sb.AppendFormat("Device size in CHS mode: {0} bytes, {1} Mb, {2} MiB",
- currentSectors * logicalsectorsize,
+ currentSectors * logicalsectorsize,
currentSectors * logicalsectorsize / 1000 / 1000,
- currentSectors * 512 / 1024 / 1024).AppendLine();
+ currentSectors * 512 / 1024 / 1024).AppendLine();
}
if(ATAID.Capabilities.HasFlag(CapabilitiesBit.LBASupport))
if((ulong)ATAID.LBASectors * logicalsectorsize / 1024 / 1024 > 1000000)
sb.AppendFormat("Device size in 28-bit LBA mode: {0} bytes, {1} Tb, {2} TiB",
- (ulong)ATAID.LBASectors * logicalsectorsize,
+ (ulong)ATAID.LBASectors *
+ logicalsectorsize,
(ulong)ATAID.LBASectors * logicalsectorsize / 1000 / 1000 / 1000 / 1000,
- (ulong)ATAID.LBASectors * 512 / 1024 / 1024 / 1024 / 1024).AppendLine();
+ (ulong)ATAID.LBASectors * 512 / 1024 / 1024 / 1024 / 1024)
+ .AppendLine();
else if((ulong)ATAID.LBASectors * logicalsectorsize / 1024 / 1024 > 1000)
sb.AppendFormat("Device size in 28-bit LBA mode: {0} bytes, {1} Gb, {2} GiB",
- (ulong)ATAID.LBASectors * logicalsectorsize,
+ (ulong)ATAID.LBASectors * logicalsectorsize,
(ulong)ATAID.LBASectors * logicalsectorsize / 1000 / 1000 / 1000,
- (ulong)ATAID.LBASectors * 512 / 1024 / 1024 / 1024).AppendLine();
+ (ulong)ATAID.LBASectors * 512 / 1024 / 1024 / 1024).AppendLine();
else
sb.AppendFormat("Device size in 28-bit LBA mode: {0} bytes, {1} Mb, {2} MiB",
- (ulong)ATAID.LBASectors * logicalsectorsize,
+ (ulong)ATAID.LBASectors * logicalsectorsize,
(ulong)ATAID.LBASectors * logicalsectorsize / 1000 / 1000,
- (ulong)ATAID.LBASectors * 512 / 1024 / 1024).AppendLine();
+ (ulong)ATAID.LBASectors * 512 / 1024 / 1024).AppendLine();
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.LBA48))
if(ATAID.CommandSet5.HasFlag(CommandSetBit5.ExtSectors))
if(ATAID.ExtendedUserSectors * logicalsectorsize / 1024 / 1024 > 1000000)
sb.AppendFormat("Device size in 48-bit LBA mode: {0} bytes, {1} Tb, {2} TiB",
- ATAID.ExtendedUserSectors * logicalsectorsize,
+ ATAID.ExtendedUserSectors *
+ logicalsectorsize,
ATAID.ExtendedUserSectors * logicalsectorsize / 1000 / 1000 / 1000 / 1000,
ATAID.ExtendedUserSectors * logicalsectorsize / 1024 / 1024 / 1024 / 1024)
.AppendLine();
else if(ATAID.ExtendedUserSectors * logicalsectorsize / 1024 / 1024 > 1000)
sb.AppendFormat("Device size in 48-bit LBA mode: {0} bytes, {1} Gb, {2} GiB",
- ATAID.ExtendedUserSectors * logicalsectorsize,
+ ATAID.ExtendedUserSectors *
+ logicalsectorsize,
ATAID.ExtendedUserSectors * logicalsectorsize / 1000 / 1000 / 1000,
ATAID.ExtendedUserSectors * logicalsectorsize / 1024 / 1024 / 1024)
.AppendLine();
else
sb.AppendFormat("Device size in 48-bit LBA mode: {0} bytes, {1} Mb, {2} MiB",
- ATAID.ExtendedUserSectors * logicalsectorsize,
+ ATAID.ExtendedUserSectors * logicalsectorsize,
ATAID.ExtendedUserSectors * logicalsectorsize / 1000 / 1000,
ATAID.ExtendedUserSectors * logicalsectorsize / 1024 / 1024).AppendLine();
else
{
if(ATAID.LBA48Sectors * logicalsectorsize / 1024 / 1024 > 1000000)
sb.AppendFormat("Device size in 48-bit LBA mode: {0} bytes, {1} Tb, {2} TiB",
- ATAID.LBA48Sectors * logicalsectorsize,
+ ATAID.LBA48Sectors *
+ logicalsectorsize,
ATAID.LBA48Sectors * logicalsectorsize / 1000 / 1000 / 1000 / 1000,
ATAID.LBA48Sectors * logicalsectorsize / 1024 / 1024 / 1024 / 1024)
.AppendLine();
else if(ATAID.LBA48Sectors * logicalsectorsize / 1024 / 1024 > 1000)
sb.AppendFormat("Device size in 48-bit LBA mode: {0} bytes, {1} Gb, {2} GiB",
- ATAID.LBA48Sectors * logicalsectorsize,
+ ATAID.LBA48Sectors * logicalsectorsize,
ATAID.LBA48Sectors * logicalsectorsize / 1000 / 1000 / 1000,
ATAID.LBA48Sectors * logicalsectorsize / 1024 / 1024 / 1024).AppendLine();
else
sb.AppendFormat("Device size in 48-bit LBA mode: {0} bytes, {1} Mb, {2} MiB",
- ATAID.LBA48Sectors * logicalsectorsize,
+ ATAID.LBA48Sectors * logicalsectorsize,
ATAID.LBA48Sectors * logicalsectorsize / 1000 / 1000,
ATAID.LBA48Sectors * logicalsectorsize / 1024 / 1024).AppendLine();
}
@@ -2505,6 +2538,7 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendFormat("{0} bytes per unformatted sector", ATAID.UnformattedBPS).AppendLine();
}
}
+
if((ushort)ATAID.SpecificConfiguration != 0x0000 && (ushort)ATAID.SpecificConfiguration != 0xFFFF)
switch(ATAID.SpecificConfiguration)
{
@@ -2562,6 +2596,7 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().Append("IORDY is supported");
if(ATAID.Capabilities.HasFlag(CapabilitiesBit.CanDisableIORDY)) sb.Append(" and can be disabled");
}
+
if(ATAID.Capabilities.HasFlag(CapabilitiesBit.DMASupport)) sb.AppendLine().Append("DMA is supported");
if(ATAID.Capabilities2.HasFlag(CapabilitiesBit2.MustBeSet) &&
@@ -2623,36 +2658,43 @@ namespace DiscImageChef.Decoders.ATA
sb.Append("DMA0 ");
if(ATAID.DMAActive.HasFlag(TransferMode.Mode0)) sb.Append("(active) ");
}
+
if(ATAID.DMASupported.HasFlag(TransferMode.Mode1))
{
sb.Append("DMA1 ");
if(ATAID.DMAActive.HasFlag(TransferMode.Mode1)) sb.Append("(active) ");
}
+
if(ATAID.DMASupported.HasFlag(TransferMode.Mode2))
{
sb.Append("DMA2 ");
if(ATAID.DMAActive.HasFlag(TransferMode.Mode2)) sb.Append("(active) ");
}
+
if(ATAID.DMASupported.HasFlag(TransferMode.Mode3))
{
sb.Append("DMA3 ");
if(ATAID.DMAActive.HasFlag(TransferMode.Mode3)) sb.Append("(active) ");
}
+
if(ATAID.DMASupported.HasFlag(TransferMode.Mode4))
{
sb.Append("DMA4 ");
if(ATAID.DMAActive.HasFlag(TransferMode.Mode4)) sb.Append("(active) ");
}
+
if(ATAID.DMASupported.HasFlag(TransferMode.Mode5))
{
sb.Append("DMA5 ");
if(ATAID.DMAActive.HasFlag(TransferMode.Mode5)) sb.Append("(active) ");
}
+
if(ATAID.DMASupported.HasFlag(TransferMode.Mode6))
{
sb.Append("DMA6 ");
if(ATAID.DMAActive.HasFlag(TransferMode.Mode6)) sb.Append("(active) ");
}
+
if(ATAID.DMASupported.HasFlag(TransferMode.Mode7))
{
sb.Append("DMA7 ");
@@ -2666,36 +2708,43 @@ namespace DiscImageChef.Decoders.ATA
sb.Append("MDMA0 ");
if(ATAID.MDMAActive.HasFlag(TransferMode.Mode0)) sb.Append("(active) ");
}
+
if(ATAID.MDMASupported.HasFlag(TransferMode.Mode1))
{
sb.Append("MDMA1 ");
if(ATAID.MDMAActive.HasFlag(TransferMode.Mode1)) sb.Append("(active) ");
}
+
if(ATAID.MDMASupported.HasFlag(TransferMode.Mode2))
{
sb.Append("MDMA2 ");
if(ATAID.MDMAActive.HasFlag(TransferMode.Mode2)) sb.Append("(active) ");
}
+
if(ATAID.MDMASupported.HasFlag(TransferMode.Mode3))
{
sb.Append("MDMA3 ");
if(ATAID.MDMAActive.HasFlag(TransferMode.Mode3)) sb.Append("(active) ");
}
+
if(ATAID.MDMASupported.HasFlag(TransferMode.Mode4))
{
sb.Append("MDMA4 ");
if(ATAID.MDMAActive.HasFlag(TransferMode.Mode4)) sb.Append("(active) ");
}
+
if(ATAID.MDMASupported.HasFlag(TransferMode.Mode5))
{
sb.Append("MDMA5 ");
if(ATAID.MDMAActive.HasFlag(TransferMode.Mode5)) sb.Append("(active) ");
}
+
if(ATAID.MDMASupported.HasFlag(TransferMode.Mode6))
{
sb.Append("MDMA6 ");
if(ATAID.MDMAActive.HasFlag(TransferMode.Mode6)) sb.Append("(active) ");
}
+
if(ATAID.MDMASupported.HasFlag(TransferMode.Mode7))
{
sb.Append("MDMA7 ");
@@ -2708,36 +2757,43 @@ namespace DiscImageChef.Decoders.ATA
sb.Append("UDMA0 ");
if(ATAID.UDMAActive.HasFlag(TransferMode.Mode0)) sb.Append("(active) ");
}
+
if(ATAID.UDMASupported.HasFlag(TransferMode.Mode1))
{
sb.Append("UDMA1 ");
if(ATAID.UDMAActive.HasFlag(TransferMode.Mode1)) sb.Append("(active) ");
}
+
if(ATAID.UDMASupported.HasFlag(TransferMode.Mode2))
{
sb.Append("UDMA2 ");
if(ATAID.UDMAActive.HasFlag(TransferMode.Mode2)) sb.Append("(active) ");
}
+
if(ATAID.UDMASupported.HasFlag(TransferMode.Mode3))
{
sb.Append("UDMA3 ");
if(ATAID.UDMAActive.HasFlag(TransferMode.Mode3)) sb.Append("(active) ");
}
+
if(ATAID.UDMASupported.HasFlag(TransferMode.Mode4))
{
sb.Append("UDMA4 ");
if(ATAID.UDMAActive.HasFlag(TransferMode.Mode4)) sb.Append("(active) ");
}
+
if(ATAID.UDMASupported.HasFlag(TransferMode.Mode5))
{
sb.Append("UDMA5 ");
if(ATAID.UDMAActive.HasFlag(TransferMode.Mode5)) sb.Append("(active) ");
}
+
if(ATAID.UDMASupported.HasFlag(TransferMode.Mode6))
{
sb.Append("UDMA6 ");
if(ATAID.UDMAActive.HasFlag(TransferMode.Mode6)) sb.Append("(active) ");
}
+
if(ATAID.UDMASupported.HasFlag(TransferMode.Mode7))
{
sb.Append("UDMA7 ");
@@ -2876,66 +2932,79 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().Append("NOP is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.Nop)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.ReadBuffer))
{
sb.AppendLine().Append("READ BUFFER is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.ReadBuffer)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.WriteBuffer))
{
sb.AppendLine().Append("WRITE BUFFER is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.WriteBuffer)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.HPA))
{
sb.AppendLine().Append("Host Protected Area is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.HPA)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.DeviceReset))
{
sb.AppendLine().Append("DEVICE RESET is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.DeviceReset)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.Service))
{
sb.AppendLine().Append("SERVICE interrupt is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.Service)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.Release))
{
sb.AppendLine().Append("Release is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.Release)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.LookAhead))
{
sb.AppendLine().Append("Look-ahead read is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.LookAhead)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.WriteCache))
{
sb.AppendLine().Append("Write cache is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.WriteCache)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.Packet))
{
sb.AppendLine().Append("PACKET is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.Packet)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.PowerManagement))
{
sb.AppendLine().Append("Power management is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.PowerManagement)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.RemovableMedia))
{
sb.AppendLine().Append("Removable media feature set is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.RemovableMedia)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet.HasFlag(CommandSetBit.SecurityMode))
{
sb.AppendLine().Append("Security mode is supported");
if(ATAID.EnabledCommandSet.HasFlag(CommandSetBit.SecurityMode)) sb.Append(" and enabled");
}
+
if(ATAID.Capabilities.HasFlag(CapabilitiesBit.LBASupport))
sb.AppendLine().Append("28-bit LBA is supported");
@@ -2947,21 +3016,25 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().Append("48-bit LBA is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.LBA48)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.FlushCache))
{
sb.AppendLine().Append("FLUSH CACHE is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.FlushCache)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.FlushCacheExt))
{
sb.AppendLine().Append("FLUSH CACHE EXT is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.FlushCacheExt)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.DCO))
{
sb.AppendLine().Append("Device Configuration Overlay feature set is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.DCO)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.AAM))
{
sb.AppendLine().Append("Automatic Acoustic Management is supported");
@@ -2969,17 +3042,20 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendFormat(" and enabled with value {0} (vendor recommends {1}", ATAID.CurrentAAM,
ATAID.RecommendedAAM);
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.SetMax))
{
sb.AppendLine().Append("SET MAX security extension is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.SetMax)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.AddressOffsetReservedAreaBoot))
{
sb.AppendLine().Append("Address Offset Reserved Area Boot is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.AddressOffsetReservedAreaBoot))
sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.SetFeaturesRequired))
sb.AppendLine().Append("SET FEATURES is required before spin-up");
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.PowerUpInStandby))
@@ -2987,28 +3063,33 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().Append("Power-up in standby is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.PowerUpInStandby)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.RemovableNotification))
{
sb.AppendLine().Append("Removable Media Status Notification is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.RemovableNotification))
sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.APM))
{
sb.AppendLine().Append("Advanced Power Management is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.APM))
sb.AppendFormat(" and enabled with value {0}", ATAID.CurrentAPM);
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.CompactFlash))
{
sb.AppendLine().Append("CompactFlash feature set is supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.CompactFlash)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.RWQueuedDMA))
{
sb.AppendLine().Append("READ DMA QUEUED and WRITE DMA QUEUED are supported");
if(ATAID.EnabledCommandSet2.HasFlag(CommandSetBit2.RWQueuedDMA)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet2.HasFlag(CommandSetBit2.DownloadMicrocode))
{
sb.AppendLine().Append("DOWNLOAD MICROCODE is supported");
@@ -3033,16 +3114,19 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().Append("S.M.A.R.T. self-testing is supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.SMARTSelfTest)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.SMARTLog))
{
sb.AppendLine().Append("S.M.A.R.T. error logging is supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.SMARTLog)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.IdleImmediate))
{
sb.AppendLine().Append("IDLE IMMEDIATE with UNLOAD FEATURE is supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.IdleImmediate)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.WriteURG))
sb.AppendLine().Append("URG bit is supported in WRITE STREAM DMA EXT and WRITE STREAM EXT");
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.ReadURG))
@@ -3054,26 +3138,31 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().Append("WRITE DMA QUEUED FUA EXT is supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.FUAWriteQ)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.FUAWrite))
{
sb.AppendLine().Append("WRITE DMA FUA EXT and WRITE MULTIPLE FUA EXT are supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.FUAWrite)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.GPL))
{
sb.AppendLine().Append("General Purpose Logging is supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.GPL)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.Streaming))
{
sb.AppendLine().Append("Streaming feature set is supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.Streaming)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.MCPT))
{
sb.AppendLine().Append("Media Card Pass Through command set is supported");
if(ATAID.EnabledCommandSet3.HasFlag(CommandSetBit3.MCPT)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet3.HasFlag(CommandSetBit3.MediaSerial))
{
sb.AppendLine().Append("Media Serial is supported");
@@ -3089,42 +3178,50 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().Append("DSN feature set is supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.DSN)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.AMAC))
{
sb.AppendLine().Append("Accessible Max Address Configuration is supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.AMAC)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.ExtPowerCond))
{
sb.AppendLine().Append("Extended Power Conditions are supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.ExtPowerCond)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.ExtStatusReport))
{
sb.AppendLine().Append("Extended Status Reporting is supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.ExtStatusReport)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.FreeFallControl))
{
sb.AppendLine().Append("Free-fall control feature set is supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.FreeFallControl)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.SegmentedDownloadMicrocode))
{
sb.AppendLine().Append("Segmented feature in DOWNLOAD MICROCODE is supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.SegmentedDownloadMicrocode))
sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.RWDMAExtGpl))
{
sb.AppendLine().Append("READ/WRITE DMA EXT GPL are supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.RWDMAExtGpl)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.WriteUnc))
{
sb.AppendLine().Append("WRITE UNCORRECTABLE is supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.WriteUnc)) sb.Append(" and enabled");
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.WRV))
{
sb.AppendLine().Append("Write/Read/Verify is supported");
@@ -3134,12 +3231,14 @@ namespace DiscImageChef.Decoders.ATA
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.WRV))
sb.AppendLine().AppendFormat("Current Write/Read/Verify mode: {0}", ATAID.WRVMode);
}
+
if(ATAID.CommandSet4.HasFlag(CommandSetBit4.DT1825))
{
sb.AppendLine().Append("DT1825 is supported");
if(ATAID.EnabledCommandSet4.HasFlag(CommandSetBit4.DT1825)) sb.Append(" and enabled");
}
}
+
if(ATAID.Capabilities3.HasFlag(CapabilitiesBit3.BlockErase))
sb.AppendLine().Append("BLOCK ERASE EXT is supported");
if(ATAID.Capabilities3.HasFlag(CapabilitiesBit3.Overwrite))
@@ -3171,6 +3270,7 @@ namespace DiscImageChef.Decoders.ATA
if(ATAID.CommandSet5.HasFlag(CommandSetBit5.ReadZeroTrim))
sb.AppendLine().Append("Read after TRIM returns empty data");
}
+
if(ATAID.CommandSet5.HasFlag(CommandSetBit5.LongPhysSectorAligError))
sb.AppendLine().Append("Device supports Long Physical Sector Alignment Error Reporting Control");
if(ATAID.CommandSet5.HasFlag(CommandSetBit5.Encrypted))
@@ -3192,7 +3292,7 @@ namespace DiscImageChef.Decoders.ATA
}
if(!ata1 && maxatalevel >= 8)
- if(ATAID.TrustedComputing.HasFlag(TrustedComputingBit.Set) &&
+ if(ATAID.TrustedComputing.HasFlag(TrustedComputingBit.Set) &&
!ATAID.TrustedComputing.HasFlag(TrustedComputingBit.Clear) &&
ATAID.TrustedComputing.HasFlag(TrustedComputingBit.TrustedComputing))
sb.AppendLine().Append("Trusted Computing feature set is supported");
@@ -3216,21 +3316,25 @@ namespace DiscImageChef.Decoders.ATA
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.NonZeroBufferOffset))
sb.Append(" and enabled");
}
+
if(ATAID.SATAFeatures.HasFlag(SATAFeaturesBit.DMASetup))
{
sb.AppendLine().Append("DMA Setup auto-activation is supported");
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.DMASetup)) sb.Append(" and enabled");
}
+
if(ATAID.SATAFeatures.HasFlag(SATAFeaturesBit.InitPowerMgmt))
{
sb.AppendLine().Append("Device-initiated power management is supported");
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.InitPowerMgmt)) sb.Append(" and enabled");
}
+
if(ATAID.SATAFeatures.HasFlag(SATAFeaturesBit.InOrderData))
{
sb.AppendLine().Append("In-order data delivery is supported");
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.InOrderData)) sb.Append(" and enabled");
}
+
if(!atapi)
if(ATAID.SATAFeatures.HasFlag(SATAFeaturesBit.HardwareFeatureControl))
{
@@ -3238,6 +3342,7 @@ namespace DiscImageChef.Decoders.ATA
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.HardwareFeatureControl))
sb.Append(" and enabled");
}
+
if(atapi)
if(ATAID.SATAFeatures.HasFlag(SATAFeaturesBit.AsyncNotification))
{
@@ -3245,18 +3350,21 @@ namespace DiscImageChef.Decoders.ATA
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.AsyncNotification))
sb.Append(" and enabled");
}
+
if(ATAID.SATAFeatures.HasFlag(SATAFeaturesBit.SettingsPreserve))
{
sb.AppendLine().Append("Software Settings Preservation is supported");
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.SettingsPreserve))
sb.Append(" and enabled");
}
+
if(ATAID.SATAFeatures.HasFlag(SATAFeaturesBit.NCQAutoSense))
sb.AppendLine().Append("NCQ Autosense is supported");
if(ATAID.EnabledSATAFeatures.HasFlag(SATAFeaturesBit.EnabledSlumber))
sb.AppendLine().Append("Automatic Partial to Slumber transitions are enabled");
}
}
+
if((ATAID.RemovableStatusSet & 0x03) > 0)
sb.AppendLine().Append("Removable Media Status Notification feature set is supported");
@@ -3304,15 +3412,15 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendFormat("Master password revision code: {0}", ATAID.MasterPasswordRevisionCode).AppendLine();
}
- if(ATAID.CommandSet3.HasFlag(CommandSetBit3.MustBeSet) &&
+ if(ATAID.CommandSet3.HasFlag(CommandSetBit3.MustBeSet) &&
!ATAID.CommandSet3.HasFlag(CommandSetBit3.MustBeClear) &&
ATAID.CommandSet3.HasFlag(CommandSetBit3.Streaming))
{
sb.AppendLine().AppendLine("Streaming:");
- sb.AppendFormat("Minimum request size is {0}", ATAID.StreamMinReqSize);
- sb.AppendFormat("Streaming transfer time in PIO is {0}", ATAID.StreamTransferTimePIO);
- sb.AppendFormat("Streaming transfer time in DMA is {0}", ATAID.StreamTransferTimeDMA);
- sb.AppendFormat("Streaming access latency is {0}", ATAID.StreamAccessLatency);
+ sb.AppendFormat("Minimum request size is {0}", ATAID.StreamMinReqSize);
+ sb.AppendFormat("Streaming transfer time in PIO is {0}", ATAID.StreamTransferTimePIO);
+ sb.AppendFormat("Streaming transfer time in DMA is {0}", ATAID.StreamTransferTimeDMA);
+ sb.AppendFormat("Streaming access latency is {0}", ATAID.StreamAccessLatency);
sb.AppendFormat("Streaming performance granularity is {0}", ATAID.StreamPerformanceGranularity);
}
@@ -3343,11 +3451,12 @@ namespace DiscImageChef.Decoders.ATA
sb.AppendLine().AppendFormat("Version {0}", (ATAID.NVCacheCaps & 0x0F00) >> 8).AppendLine();
}
+
sb.AppendLine().AppendFormat("Non-Volatile Cache is {0} bytes", ATAID.NVCacheSize * logicalsectorsize)
.AppendLine();
}
-#if DEBUG
+ #if DEBUG
sb.AppendLine();
if(ATAID.VendorWord9 != 0x0000 && ATAID.VendorWord9 != 0xFFFF)
sb.AppendFormat("Word 9: 0x{0:X4}", ATAID.VendorWord9).AppendLine();
@@ -3397,13 +3506,13 @@ namespace DiscImageChef.Decoders.ATA
for(int i = 0; i < ATAID.ReservedWords.Length; i++)
if(ATAID.ReservedWords[i] != 0x0000 && ATAID.ReservedWords[i] != 0xFFFF)
sb.AppendFormat("Word {1}: 0x{0:X4}", ATAID.ReservedWords[i], 236 + i).AppendLine();
-#endif
+ #endif
return sb.ToString();
}
static ulong DescrambleWWN(ulong WWN)
{
- byte[] qwb = BitConverter.GetBytes(WWN);
+ byte[] qwb = BitConverter.GetBytes(WWN);
byte[] qword = new byte[8];
qword[7] = qwb[1];
@@ -3425,7 +3534,7 @@ namespace DiscImageChef.Decoders.ATA
for(int i = 0; i < length; i += 2)
{
outbuf[i] = buffer[offset + i + 1];
- outbuf[i + 1] = buffer[offset + i];
+ outbuf[i + 1] = buffer[offset + i];
}
string outStr = StringHandlers.CToString(outbuf);
diff --git a/ATA/Registers.cs b/ATA/Registers.cs
index 56da0b6cb..e2121f17b 100644
--- a/ATA/Registers.cs
+++ b/ATA/Registers.cs
@@ -61,8 +61,8 @@ namespace DiscImageChef.Decoders.ATA
public ushort LbaLow;
public ushort LbaMid;
public ushort LbaHigh;
- public byte DeviceHead;
- public byte Command;
+ public byte DeviceHead;
+ public byte Command;
}
public struct AtaErrorRegistersChs
@@ -89,12 +89,12 @@ namespace DiscImageChef.Decoders.ATA
public struct AtaErrorRegistersLba48
{
- public byte Status;
- public byte Error;
+ public byte Status;
+ public byte Error;
public ushort SectorCount;
public ushort LbaLow;
public ushort LbaMid;
public ushort LbaHigh;
- public byte DeviceHead;
+ public byte DeviceHead;
}
}
\ No newline at end of file
diff --git a/Blu-ray/BCA.cs b/Blu-ray/BCA.cs
index c45727c34..dc9170502 100644
--- a/Blu-ray/BCA.cs
+++ b/Blu-ray/BCA.cs
@@ -75,9 +75,9 @@ namespace DiscImageChef.Decoders.Bluray
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(BCAResponse, 0);
- decoded.Reserved1 = BCAResponse[2];
- decoded.Reserved2 = BCAResponse[3];
- decoded.BCA = new byte[64];
+ decoded.Reserved1 = BCAResponse[2];
+ decoded.Reserved2 = BCAResponse[3];
+ decoded.BCA = new byte[64];
Array.Copy(BCAResponse, 4, decoded.BCA, 0, 64);
return decoded;
@@ -91,10 +91,10 @@ namespace DiscImageChef.Decoders.Bluray
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
-#endif
+ #endif
sb.AppendFormat("Blu-ray Burst Cutting Area in hex follows:");
sb.AppendLine(PrintHex.ByteArrayToHexArrayString(response.BCA, 80));
diff --git a/Blu-ray/Cartridge.cs b/Blu-ray/Cartridge.cs
index a3a00dca8..374f8302c 100644
--- a/Blu-ray/Cartridge.cs
+++ b/Blu-ray/Cartridge.cs
@@ -77,16 +77,16 @@ namespace DiscImageChef.Decoders.Bluray
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(CSResponse, 0);
- decoded.Reserved1 = CSResponse[2];
- decoded.Reserved2 = CSResponse[3];
- decoded.Cartridge = Convert.ToBoolean(CSResponse[4] & 0x80);
- decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x40);
- decoded.Reserved3 = (byte)((CSResponse[4] & 0x38) >> 3);
- decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x04);
- decoded.Reserved4 = (byte)(CSResponse[4] & 0x03);
- decoded.Reserved5 = CSResponse[5];
- decoded.Reserved6 = CSResponse[6];
- decoded.Reserved7 = CSResponse[7];
+ decoded.Reserved1 = CSResponse[2];
+ decoded.Reserved2 = CSResponse[3];
+ decoded.Cartridge = Convert.ToBoolean(CSResponse[4] & 0x80);
+ decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x40);
+ decoded.Reserved3 = (byte)((CSResponse[4] & 0x38) >> 3);
+ decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x04);
+ decoded.Reserved4 = (byte)(CSResponse[4] & 0x03);
+ decoded.Reserved5 = CSResponse[5];
+ decoded.Reserved6 = CSResponse[6];
+ decoded.Reserved7 = CSResponse[7];
return decoded;
}
@@ -99,7 +99,7 @@ namespace DiscImageChef.Decoders.Bluray
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
if(response.Reserved3 != 0) sb.AppendFormat("Reserved3 = 0x{0:X8}", response.Reserved3).AppendLine();
@@ -107,7 +107,7 @@ namespace DiscImageChef.Decoders.Bluray
if(response.Reserved5 != 0) sb.AppendFormat("Reserved5 = 0x{0:X8}", response.Reserved5).AppendLine();
if(response.Reserved6 != 0) sb.AppendFormat("Reserved6 = 0x{0:X8}", response.Reserved6).AppendLine();
if(response.Reserved7 != 0) sb.AppendFormat("Reserved7 = 0x{0:X8}", response.Reserved7).AppendLine();
-#endif
+ #endif
if(response.Cartridge)
{
@@ -119,11 +119,12 @@ namespace DiscImageChef.Decoders.Bluray
{
sb.AppendLine("Media is not in a cartridge");
-#if DEBUG
+ #if DEBUG
if(response.OUT) sb.AppendLine("Media has out bit marked, shouldn't");
if(response.CWP) sb.AppendLine("Media has write protection bit marked, shouldn't");
-#endif
+ #endif
}
+
return sb.ToString();
}
diff --git a/Blu-ray/DDS.cs b/Blu-ray/DDS.cs
index 1130de25c..741d3fb80 100644
--- a/Blu-ray/DDS.cs
+++ b/Blu-ray/DDS.cs
@@ -75,9 +75,9 @@ namespace DiscImageChef.Decoders.Bluray
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(DDSResponse, 0);
- decoded.Reserved1 = DDSResponse[2];
- decoded.Reserved2 = DDSResponse[3];
- decoded.Signature = BigEndianBitConverter.ToUInt16(DDSResponse, 4);
+ decoded.Reserved1 = DDSResponse[2];
+ decoded.Reserved2 = DDSResponse[3];
+ decoded.Signature = BigEndianBitConverter.ToUInt16(DDSResponse, 4);
if(decoded.Signature != DDSIdentifier)
{
DicConsole.DebugWriteLine("BD DDS decoder", "Found incorrect DDS signature (0x{0:X4})",
@@ -85,26 +85,26 @@ namespace DiscImageChef.Decoders.Bluray
return null;
}
- decoded.Format = DDSResponse[6];
- decoded.Reserved3 = DDSResponse[7];
- decoded.UpdateCount = BigEndianBitConverter.ToUInt32(DDSResponse, 8);
- decoded.Reserved4 = BigEndianBitConverter.ToUInt64(DDSResponse, 12);
- decoded.DriveAreaPSN = BigEndianBitConverter.ToUInt32(DDSResponse, 20);
- decoded.Reserved5 = BigEndianBitConverter.ToUInt32(DDSResponse, 24);
- decoded.DefectListPSN = BigEndianBitConverter.ToUInt32(DDSResponse, 28);
- decoded.Reserved6 = BigEndianBitConverter.ToUInt32(DDSResponse, 32);
- decoded.PSNofLSNZero = BigEndianBitConverter.ToUInt32(DDSResponse, 36);
- decoded.LastUserAreaLSN = BigEndianBitConverter.ToUInt32(DDSResponse, 40);
- decoded.ISA0 = BigEndianBitConverter.ToUInt32(DDSResponse, 44);
- decoded.OSA = BigEndianBitConverter.ToUInt32(DDSResponse, 48);
- decoded.ISA1 = BigEndianBitConverter.ToUInt32(DDSResponse, 52);
- decoded.SpareAreaFullFlags = DDSResponse[56];
- decoded.Reserved7 = DDSResponse[57];
+ decoded.Format = DDSResponse[6];
+ decoded.Reserved3 = DDSResponse[7];
+ decoded.UpdateCount = BigEndianBitConverter.ToUInt32(DDSResponse, 8);
+ decoded.Reserved4 = BigEndianBitConverter.ToUInt64(DDSResponse, 12);
+ decoded.DriveAreaPSN = BigEndianBitConverter.ToUInt32(DDSResponse, 20);
+ decoded.Reserved5 = BigEndianBitConverter.ToUInt32(DDSResponse, 24);
+ decoded.DefectListPSN = BigEndianBitConverter.ToUInt32(DDSResponse, 28);
+ decoded.Reserved6 = BigEndianBitConverter.ToUInt32(DDSResponse, 32);
+ decoded.PSNofLSNZero = BigEndianBitConverter.ToUInt32(DDSResponse, 36);
+ decoded.LastUserAreaLSN = BigEndianBitConverter.ToUInt32(DDSResponse, 40);
+ decoded.ISA0 = BigEndianBitConverter.ToUInt32(DDSResponse, 44);
+ decoded.OSA = BigEndianBitConverter.ToUInt32(DDSResponse, 48);
+ decoded.ISA1 = BigEndianBitConverter.ToUInt32(DDSResponse, 52);
+ decoded.SpareAreaFullFlags = DDSResponse[56];
+ decoded.Reserved7 = DDSResponse[57];
decoded.DiscTypeSpecificField1 = DDSResponse[58];
- decoded.Reserved8 = DDSResponse[59];
+ decoded.Reserved8 = DDSResponse[59];
decoded.DiscTypeSpecificField2 = BigEndianBitConverter.ToUInt32(DDSResponse, 60);
- decoded.Reserved9 = BigEndianBitConverter.ToUInt32(DDSResponse, 64);
- decoded.StatusBits = new byte[32];
+ decoded.Reserved9 = BigEndianBitConverter.ToUInt32(DDSResponse, 64);
+ decoded.StatusBits = new byte[32];
Array.Copy(DDSResponse, 68, decoded.StatusBits, 0, 32);
decoded.DiscTypeSpecificData = new byte[DDSResponse.Length - 100];
Array.Copy(DDSResponse, 100, decoded.DiscTypeSpecificData, 0, DDSResponse.Length - 100);
@@ -137,7 +137,7 @@ namespace DiscImageChef.Decoders.Bluray
sb.AppendFormat("Blu-ray DDS Disc Type Specific Data in hex follows:");
sb.AppendLine(PrintHex.ByteArrayToHexArrayString(response.DiscTypeSpecificData, 80));
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
if(response.Reserved3 != 0) sb.AppendFormat("Reserved3 = 0x{0:X2}", response.Reserved3).AppendLine();
@@ -147,7 +147,7 @@ namespace DiscImageChef.Decoders.Bluray
if(response.Reserved7 != 0) sb.AppendFormat("Reserved7 = 0x{0:X2}", response.Reserved7).AppendLine();
if(response.Reserved8 != 0) sb.AppendFormat("Reserved8 = 0x{0:X2}", response.Reserved8).AppendLine();
if(response.Reserved9 != 0) sb.AppendFormat("Reserved9 = 0x{0:X8}", response.Reserved9).AppendLine();
-#endif
+ #endif
return sb.ToString();
}
diff --git a/Blu-ray/Spare.cs b/Blu-ray/Spare.cs
index d658d4e6a..ef4e27e4d 100644
--- a/Blu-ray/Spare.cs
+++ b/Blu-ray/Spare.cs
@@ -75,11 +75,11 @@ namespace DiscImageChef.Decoders.Bluray
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
- decoded.DataLength = BigEndianBitConverter.ToUInt16(SAIResponse, 0);
- decoded.Reserved1 = SAIResponse[2];
- decoded.Reserved2 = SAIResponse[3];
- decoded.Reserved3 = BigEndianBitConverter.ToUInt32(SAIResponse, 4);
- decoded.FreeSpareBlocks = BigEndianBitConverter.ToUInt32(SAIResponse, 8);
+ decoded.DataLength = BigEndianBitConverter.ToUInt16(SAIResponse, 0);
+ decoded.Reserved1 = SAIResponse[2];
+ decoded.Reserved2 = SAIResponse[3];
+ decoded.Reserved3 = BigEndianBitConverter.ToUInt32(SAIResponse, 4);
+ decoded.FreeSpareBlocks = BigEndianBitConverter.ToUInt32(SAIResponse, 8);
decoded.AllocatedSpareBlocks = BigEndianBitConverter.ToUInt32(SAIResponse, 12);
return decoded;
@@ -93,11 +93,11 @@ namespace DiscImageChef.Decoders.Bluray
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
if(response.Reserved3 != 0) sb.AppendFormat("Reserved3 = 0x{0:X8}", response.Reserved3).AppendLine();
-#endif
+ #endif
sb.AppendFormat("{0} free spare blocks", response.FreeSpareBlocks).AppendLine();
sb.AppendFormat("{0} allocated spare blocks", response.AllocatedSpareBlocks).AppendLine();
diff --git a/CD/ATIP.cs b/CD/ATIP.cs
index a1ca82483..7808febb6 100644
--- a/CD/ATIP.cs
+++ b/CD/ATIP.cs
@@ -238,32 +238,32 @@ namespace DiscImageChef.Decoders.CD
return null;
}
- decoded.DataLength = BigEndianBitConverter.ToUInt16(CDATIPResponse, 0);
- decoded.Reserved1 = CDATIPResponse[2];
- decoded.Reserved2 = CDATIPResponse[3];
- decoded.ITWP = (byte)((CDATIPResponse[4] & 0xF0) >> 4);
- decoded.DDCD = Convert.ToBoolean(CDATIPResponse[4] & 0x08);
+ decoded.DataLength = BigEndianBitConverter.ToUInt16(CDATIPResponse, 0);
+ decoded.Reserved1 = CDATIPResponse[2];
+ decoded.Reserved2 = CDATIPResponse[3];
+ decoded.ITWP = (byte)((CDATIPResponse[4] & 0xF0) >> 4);
+ decoded.DDCD = Convert.ToBoolean(CDATIPResponse[4] & 0x08);
decoded.ReferenceSpeed = (byte)(CDATIPResponse[4] & 0x07);
- decoded.AlwaysZero = Convert.ToBoolean(CDATIPResponse[5] & 0x80);
- decoded.URU = Convert.ToBoolean(CDATIPResponse[5] & 0x40);
- decoded.Reserved3 = (byte)(CDATIPResponse[5] & 0x3F);
+ decoded.AlwaysZero = Convert.ToBoolean(CDATIPResponse[5] & 0x80);
+ decoded.URU = Convert.ToBoolean(CDATIPResponse[5] & 0x40);
+ decoded.Reserved3 = (byte)(CDATIPResponse[5] & 0x3F);
- decoded.AlwaysOne = Convert.ToBoolean(CDATIPResponse[6] & 0x80);
- decoded.DiscType = Convert.ToBoolean(CDATIPResponse[6] & 0x40);
+ decoded.AlwaysOne = Convert.ToBoolean(CDATIPResponse[6] & 0x80);
+ decoded.DiscType = Convert.ToBoolean(CDATIPResponse[6] & 0x40);
decoded.DiscSubType = (byte)((CDATIPResponse[6] & 0x38) >> 3);
- decoded.A1Valid = Convert.ToBoolean(CDATIPResponse[6] & 0x04);
- decoded.A2Valid = Convert.ToBoolean(CDATIPResponse[6] & 0x02);
- decoded.A3Valid = Convert.ToBoolean(CDATIPResponse[6] & 0x01);
+ decoded.A1Valid = Convert.ToBoolean(CDATIPResponse[6] & 0x04);
+ decoded.A2Valid = Convert.ToBoolean(CDATIPResponse[6] & 0x02);
+ decoded.A3Valid = Convert.ToBoolean(CDATIPResponse[6] & 0x01);
- decoded.Reserved4 = CDATIPResponse[7];
- decoded.LeadInStartMin = CDATIPResponse[8];
- decoded.LeadInStartSec = CDATIPResponse[9];
- decoded.LeadInStartFrame = CDATIPResponse[10];
- decoded.Reserved5 = CDATIPResponse[11];
- decoded.LeadOutStartMin = CDATIPResponse[12];
- decoded.LeadOutStartSec = CDATIPResponse[13];
+ decoded.Reserved4 = CDATIPResponse[7];
+ decoded.LeadInStartMin = CDATIPResponse[8];
+ decoded.LeadInStartSec = CDATIPResponse[9];
+ decoded.LeadInStartFrame = CDATIPResponse[10];
+ decoded.Reserved5 = CDATIPResponse[11];
+ decoded.LeadOutStartMin = CDATIPResponse[12];
+ decoded.LeadOutStartSec = CDATIPResponse[13];
decoded.LeadOutStartFrame = CDATIPResponse[14];
- decoded.Reserved6 = CDATIPResponse[15];
+ decoded.Reserved6 = CDATIPResponse[15];
decoded.A1Values = new byte[3];
decoded.A2Values = new byte[3];
@@ -356,6 +356,7 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("Unknown CD-RW disc subtype: {0}", response.DiscSubType).AppendLine();
break;
}
+
switch(response.ReferenceSpeed)
{
case 1:
@@ -430,7 +431,7 @@ namespace DiscImageChef.Decoders.CD
if(response.LeadInStartMin != 97) return sb.ToString();
int type = response.LeadInStartFrame % 10;
- int frm = response.LeadInStartFrame - type;
+ int frm = response.LeadInStartFrame - type;
if(response.DiscType) sb.AppendLine("Disc uses phase change");
else
diff --git a/CD/CDTextOnLeadIn.cs b/CD/CDTextOnLeadIn.cs
index 56a6fdcce..220232221 100644
--- a/CD/CDTextOnLeadIn.cs
+++ b/CD/CDTextOnLeadIn.cs
@@ -199,9 +199,9 @@ namespace DiscImageChef.Decoders.CD
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(CDTextResponse, 0);
- decoded.Reserved1 = CDTextResponse[2];
- decoded.Reserved2 = CDTextResponse[3];
- decoded.DataPacks = new CDTextPack[(decoded.DataLength - 2) / 18];
+ decoded.Reserved1 = CDTextResponse[2];
+ decoded.Reserved2 = CDTextResponse[3];
+ decoded.DataPacks = new CDTextPack[(decoded.DataLength - 2) / 18];
if(decoded.DataLength == 2) return null;
@@ -215,13 +215,13 @@ namespace DiscImageChef.Decoders.CD
for(int i = 0; i < (decoded.DataLength - 2) / 18; i++)
{
- decoded.DataPacks[i].HeaderID1 = CDTextResponse[0 + i * 18 + 4];
- decoded.DataPacks[i].HeaderID2 = CDTextResponse[1 + i * 18 + 4];
- decoded.DataPacks[i].HeaderID3 = CDTextResponse[2 + i * 18 + 4];
- decoded.DataPacks[i].DBCC = Convert.ToBoolean(CDTextResponse[3 + i * 18 + 4] & 0x80);
- decoded.DataPacks[i].BlockNumber = (byte)((CDTextResponse[3 + i * 18 + 4] & 0x70) >> 4);
+ decoded.DataPacks[i].HeaderID1 = CDTextResponse[0 + i * 18 + 4];
+ decoded.DataPacks[i].HeaderID2 = CDTextResponse[1 + i * 18 + 4];
+ decoded.DataPacks[i].HeaderID3 = CDTextResponse[2 + i * 18 + 4];
+ decoded.DataPacks[i].DBCC = Convert.ToBoolean(CDTextResponse[3 + i * 18 + 4] & 0x80);
+ decoded.DataPacks[i].BlockNumber = (byte)((CDTextResponse[3 + i * 18 + 4] & 0x70) >> 4);
decoded.DataPacks[i].CharacterPosition = (byte)(CDTextResponse[3 + i * 18 + 4] & 0x0F);
- decoded.DataPacks[i].TextDataField = new byte[12];
+ decoded.DataPacks[i].TextDataField = new byte[12];
Array.Copy(CDTextResponse, 4 + i * 18 + 4, decoded.DataPacks[i].TextDataField, 0, 12);
decoded.DataPacks[i].CRC = BigEndianBitConverter.ToUInt16(CDTextResponse, 16 + i * 18 + 4);
}
@@ -233,13 +233,13 @@ namespace DiscImageChef.Decoders.CD
{
if(CDTextResponse == null) return null;
- CDText response = CDTextResponse.Value;
- StringBuilder sb = new StringBuilder();
+ CDText response = CDTextResponse.Value;
+ StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
-#endif
+ #endif
foreach(CDTextPack descriptor in response.DataPacks)
if((descriptor.HeaderID1 & 0x80) != 0x80)
diff --git a/CD/FullTOC.cs b/CD/FullTOC.cs
index 1db2d82e6..9ce165513 100644
--- a/CD/FullTOC.cs
+++ b/CD/FullTOC.cs
@@ -172,20 +172,20 @@ namespace DiscImageChef.Decoders.CD
for(int i = 0; i < (decoded.DataLength - 2) / 11; i++)
{
- decoded.TrackDescriptors[i].SessionNumber = CDFullTOCResponse[0 + i * 11 + 4];
+ decoded.TrackDescriptors[i].SessionNumber = CDFullTOCResponse[0 + i * 11 + 4];
decoded.TrackDescriptors[i].ADR = (byte)((CDFullTOCResponse[1 + i * 11 + 4] & 0xF0) >> 4);
- decoded.TrackDescriptors[i].CONTROL = (byte)(CDFullTOCResponse[1 + i * 11 + 4] & 0x0F);
- decoded.TrackDescriptors[i].TNO = CDFullTOCResponse[2 + i * 11 + 4];
- decoded.TrackDescriptors[i].POINT = CDFullTOCResponse[3 + i * 11 + 4];
- decoded.TrackDescriptors[i].Min = CDFullTOCResponse[4 + i * 11 + 4];
- decoded.TrackDescriptors[i].Sec = CDFullTOCResponse[5 + i * 11 + 4];
- decoded.TrackDescriptors[i].Frame = CDFullTOCResponse[6 + i * 11 + 4];
- decoded.TrackDescriptors[i].Zero = CDFullTOCResponse[7 + i * 11 + 4];
+ decoded.TrackDescriptors[i].CONTROL = (byte)(CDFullTOCResponse[1 + i * 11 + 4] & 0x0F);
+ decoded.TrackDescriptors[i].TNO = CDFullTOCResponse[2 + i * 11 + 4];
+ decoded.TrackDescriptors[i].POINT = CDFullTOCResponse[3 + i * 11 + 4];
+ decoded.TrackDescriptors[i].Min = CDFullTOCResponse[4 + i * 11 + 4];
+ decoded.TrackDescriptors[i].Sec = CDFullTOCResponse[5 + i * 11 + 4];
+ decoded.TrackDescriptors[i].Frame = CDFullTOCResponse[6 + i * 11 + 4];
+ decoded.TrackDescriptors[i].Zero = CDFullTOCResponse[7 + i * 11 + 4];
decoded.TrackDescriptors[i].HOUR = (byte)((CDFullTOCResponse[7 + i * 11 + 4] & 0xF0) >> 4);
- decoded.TrackDescriptors[i].PHOUR = (byte)(CDFullTOCResponse[7 + i * 11 + 4] & 0x0F);
- decoded.TrackDescriptors[i].PMIN = CDFullTOCResponse[8 + i * 11 + 4];
- decoded.TrackDescriptors[i].PSEC = CDFullTOCResponse[9 + i * 11 + 4];
- decoded.TrackDescriptors[i].PFRAME = CDFullTOCResponse[10 + i * 11 + 4];
+ decoded.TrackDescriptors[i].PHOUR = (byte)(CDFullTOCResponse[7 + i * 11 + 4] & 0x0F);
+ decoded.TrackDescriptors[i].PMIN = CDFullTOCResponse[8 + i * 11 + 4];
+ decoded.TrackDescriptors[i].PSEC = CDFullTOCResponse[9 + i * 11 + 4];
+ decoded.TrackDescriptors[i].PFRAME = CDFullTOCResponse[10 + i * 11 + 4];
}
return decoded;
@@ -202,28 +202,26 @@ namespace DiscImageChef.Decoders.CD
int lastSession = 0;
sb.AppendFormat("First complete session number: {0}", response.FirstCompleteSession).AppendLine();
- sb.AppendFormat("Last complete session number: {0}", response.LastCompleteSession).AppendLine();
+ sb.AppendFormat("Last complete session number: {0}", response.LastCompleteSession).AppendLine();
foreach(TrackDataDescriptor descriptor in response.TrackDescriptors)
- if((descriptor.CONTROL & 0x08) ==
- 0x08 ||
- descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4 &&
- descriptor.ADR != 6 ||
+ if((descriptor.CONTROL & 0x08) == 0x08 ||
+ descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4 && descriptor.ADR != 6 ||
descriptor.TNO != 0)
{
sb.AppendLine("Unknown TOC entry format, printing values as-is");
sb.AppendFormat("SessionNumber = {0}", descriptor.SessionNumber).AppendLine();
- sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
- sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
- sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
- sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
- sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
- sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
- sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
- sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
- sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
- sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
- sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
- sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
+ sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
+ sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
+ sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
+ sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
+ sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
+ sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
+ sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
+ sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
+ sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
+ sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
+ sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
+ sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
}
else
{
@@ -378,7 +376,7 @@ namespace DiscImageChef.Decoders.CD
}
default:
{
- if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x63)
+ if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x63)
if(descriptor.ADR == 4)
sb.AppendFormat("Video track {3} starts at: {0:D2}:{1:D2}:{2:D2}",
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
@@ -426,18 +424,18 @@ namespace DiscImageChef.Decoders.CD
}
else
{
- sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
+ sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
- sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
- sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
- sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
- sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
- sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
- sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
- sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
- sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
- sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
- sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
+ sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
+ sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
+ sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
+ sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
+ sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
+ sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
+ sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
+ sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
+ sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
+ sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
}
break;
@@ -514,12 +512,12 @@ namespace DiscImageChef.Decoders.CD
case 0xC1:
{
sb.AppendFormat("Copy of information of A1 from ATIP found");
- sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
- sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
- sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
- sb.AppendFormat("Zero = {0}", descriptor.Zero).AppendLine();
- sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
- sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
+ sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
+ sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
+ sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
+ sb.AppendFormat("Zero = {0}", descriptor.Zero).AppendLine();
+ sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
+ sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
break;
}
@@ -563,18 +561,18 @@ namespace DiscImageChef.Decoders.CD
}
else
{
- sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
+ sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
- sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
- sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
- sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
- sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
- sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
- sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
- sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
- sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
- sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
- sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
+ sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
+ sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
+ sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
+ sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
+ sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
+ sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
+ sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
+ sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
+ sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
+ sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
}
break;
diff --git a/CD/PMA.cs b/CD/PMA.cs
index b79ba9378..be183582a 100644
--- a/CD/PMA.cs
+++ b/CD/PMA.cs
@@ -144,9 +144,9 @@ namespace DiscImageChef.Decoders.CD
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
- decoded.DataLength = BigEndianBitConverter.ToUInt16(CDPMAResponse, 0);
- decoded.Reserved1 = CDPMAResponse[2];
- decoded.Reserved2 = CDPMAResponse[3];
+ decoded.DataLength = BigEndianBitConverter.ToUInt16(CDPMAResponse, 0);
+ decoded.Reserved1 = CDPMAResponse[2];
+ decoded.Reserved2 = CDPMAResponse[3];
decoded.PMADescriptors = new CDPMADescriptors[(decoded.DataLength - 2) / 11];
if(decoded.DataLength + 2 != CDPMAResponse.Length)
@@ -160,18 +160,18 @@ namespace DiscImageChef.Decoders.CD
for(int i = 0; i < (decoded.DataLength - 2) / 11; i++)
{
decoded.PMADescriptors[i].Reserved = CDPMAResponse[0 + i * 11 + 4];
- decoded.PMADescriptors[i].ADR = (byte)((CDPMAResponse[1 + i * 11 + 4] & 0xF0) >> 4);
- decoded.PMADescriptors[i].CONTROL = (byte)(CDPMAResponse[1 + i * 11 + 4] & 0x0F);
- decoded.PMADescriptors[i].TNO = CDPMAResponse[2 + i * 11 + 4];
- decoded.PMADescriptors[i].POINT = CDPMAResponse[3 + i * 11 + 4];
- decoded.PMADescriptors[i].Min = CDPMAResponse[4 + i * 11 + 4];
- decoded.PMADescriptors[i].Sec = CDPMAResponse[5 + i * 11 + 4];
- decoded.PMADescriptors[i].Frame = CDPMAResponse[6 + i * 11 + 4];
- decoded.PMADescriptors[i].HOUR = (byte)((CDPMAResponse[7 + i * 11 + 4] & 0xF0) >> 4);
- decoded.PMADescriptors[i].PHOUR = (byte)(CDPMAResponse[7 + i * 11 + 4] & 0x0F);
- decoded.PMADescriptors[i].PMIN = CDPMAResponse[8 + i * 11 + 4];
- decoded.PMADescriptors[i].PSEC = CDPMAResponse[9 + i * 11 + 4];
- decoded.PMADescriptors[i].PFRAME = CDPMAResponse[10 + i * 11 + 4];
+ decoded.PMADescriptors[i].ADR = (byte)((CDPMAResponse[1 + i * 11 + 4] & 0xF0) >> 4);
+ decoded.PMADescriptors[i].CONTROL = (byte)(CDPMAResponse[1 + i * 11 + 4] & 0x0F);
+ decoded.PMADescriptors[i].TNO = CDPMAResponse[2 + i * 11 + 4];
+ decoded.PMADescriptors[i].POINT = CDPMAResponse[3 + i * 11 + 4];
+ decoded.PMADescriptors[i].Min = CDPMAResponse[4 + i * 11 + 4];
+ decoded.PMADescriptors[i].Sec = CDPMAResponse[5 + i * 11 + 4];
+ decoded.PMADescriptors[i].Frame = CDPMAResponse[6 + i * 11 + 4];
+ decoded.PMADescriptors[i].HOUR = (byte)((CDPMAResponse[7 + i * 11 + 4] & 0xF0) >> 4);
+ decoded.PMADescriptors[i].PHOUR = (byte)(CDPMAResponse[7 + i * 11 + 4] & 0x0F);
+ decoded.PMADescriptors[i].PMIN = CDPMAResponse[8 + i * 11 + 4];
+ decoded.PMADescriptors[i].PSEC = CDPMAResponse[9 + i * 11 + 4];
+ decoded.PMADescriptors[i].PFRAME = CDPMAResponse[10 + i * 11 + 4];
}
return decoded;
@@ -185,16 +185,16 @@ namespace DiscImageChef.Decoders.CD
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
-#endif
+ #endif
foreach(CDPMADescriptors descriptor in response.PMADescriptors)
{
-#if DEBUG
+ #if DEBUG
if(descriptor.Reserved != 0) sb.AppendFormat("Reserved = 0x{0:X2}", descriptor.Reserved).AppendLine();
-#endif
+ #endif
switch(descriptor.ADR)
{
@@ -248,21 +248,21 @@ namespace DiscImageChef.Decoders.CD
break;
case 3:
sb.AppendFormat("Skip track assignment {0} says that tracks ", descriptor.POINT);
- if(descriptor.Min > 0) sb.AppendFormat("{0} ", descriptor.Min);
- if(descriptor.Sec > 0) sb.AppendFormat("{0} ", descriptor.Sec);
- if(descriptor.Frame > 0) sb.AppendFormat("{0} ", descriptor.Frame);
- if(descriptor.PMIN > 0) sb.AppendFormat("{0} ", descriptor.PMIN);
- if(descriptor.PSEC > 0) sb.AppendFormat("{0} ", descriptor.PSEC);
+ if(descriptor.Min > 0) sb.AppendFormat("{0} ", descriptor.Min);
+ if(descriptor.Sec > 0) sb.AppendFormat("{0} ", descriptor.Sec);
+ if(descriptor.Frame > 0) sb.AppendFormat("{0} ", descriptor.Frame);
+ if(descriptor.PMIN > 0) sb.AppendFormat("{0} ", descriptor.PMIN);
+ if(descriptor.PSEC > 0) sb.AppendFormat("{0} ", descriptor.PSEC);
if(descriptor.PFRAME > 0) sb.AppendFormat("{0} ", descriptor.PFRAME);
sb.AppendLine("should be skipped");
break;
case 4:
sb.AppendFormat("Unskip track assignment {0} says that tracks ", descriptor.POINT);
- if(descriptor.Min > 0) sb.AppendFormat("{0} ", descriptor.Min);
- if(descriptor.Sec > 0) sb.AppendFormat("{0} ", descriptor.Sec);
- if(descriptor.Frame > 0) sb.AppendFormat("{0} ", descriptor.Frame);
- if(descriptor.PMIN > 0) sb.AppendFormat("{0} ", descriptor.PMIN);
- if(descriptor.PSEC > 0) sb.AppendFormat("{0} ", descriptor.PSEC);
+ if(descriptor.Min > 0) sb.AppendFormat("{0} ", descriptor.Min);
+ if(descriptor.Sec > 0) sb.AppendFormat("{0} ", descriptor.Sec);
+ if(descriptor.Frame > 0) sb.AppendFormat("{0} ", descriptor.Frame);
+ if(descriptor.PMIN > 0) sb.AppendFormat("{0} ", descriptor.PMIN);
+ if(descriptor.PSEC > 0) sb.AppendFormat("{0} ", descriptor.PSEC);
if(descriptor.PFRAME > 0) sb.AppendFormat("{0} ", descriptor.PFRAME);
sb.AppendLine("should not be skipped");
break;
diff --git a/CD/Sector.cs b/CD/Sector.cs
index 9fa983ed8..830be1fd7 100644
--- a/CD/Sector.cs
+++ b/CD/Sector.cs
@@ -188,7 +188,7 @@ namespace DiscImageChef.Decoders.CD
if(!SyncMark.SequenceEqual(sync)) return sector;
- byte[] scrambled = new byte[sector.Length];
+ byte[] scrambled = new byte[sector.Length];
for(int i = 0; i < 2352; i++) scrambled[i] = (byte)(sector[i] ^ ScrambleTable[i]);
if(sector.Length <= 2352) return scrambled;
diff --git a/CD/Session.cs b/CD/Session.cs
index 66adebc7b..c8797e58f 100644
--- a/CD/Session.cs
+++ b/CD/Session.cs
@@ -119,10 +119,10 @@ namespace DiscImageChef.Decoders.CD
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
- decoded.DataLength = BigEndianBitConverter.ToUInt16(CDSessionInfoResponse, 0);
+ decoded.DataLength = BigEndianBitConverter.ToUInt16(CDSessionInfoResponse, 0);
decoded.FirstCompleteSession = CDSessionInfoResponse[2];
- decoded.LastCompleteSession = CDSessionInfoResponse[3];
- decoded.TrackDescriptors = new TrackDataDescriptor[(decoded.DataLength - 2) / 8];
+ decoded.LastCompleteSession = CDSessionInfoResponse[3];
+ decoded.TrackDescriptors = new TrackDataDescriptor[(decoded.DataLength - 2) / 8];
if(decoded.DataLength + 2 != CDSessionInfoResponse.Length)
{
@@ -134,11 +134,11 @@ namespace DiscImageChef.Decoders.CD
for(int i = 0; i < (decoded.DataLength - 2) / 8; i++)
{
- decoded.TrackDescriptors[i].Reserved1 = CDSessionInfoResponse[0 + i * 8 + 4];
- decoded.TrackDescriptors[i].ADR = (byte)((CDSessionInfoResponse[1 + i * 8 + 4] & 0xF0) >> 4);
- decoded.TrackDescriptors[i].CONTROL = (byte)(CDSessionInfoResponse[1 + i * 8 + 4] & 0x0F);
+ decoded.TrackDescriptors[i].Reserved1 = CDSessionInfoResponse[0 + i * 8 + 4];
+ decoded.TrackDescriptors[i].ADR = (byte)((CDSessionInfoResponse[1 + i * 8 + 4] & 0xF0) >> 4);
+ decoded.TrackDescriptors[i].CONTROL = (byte)(CDSessionInfoResponse[1 + i * 8 + 4] & 0x0F);
decoded.TrackDescriptors[i].TrackNumber = CDSessionInfoResponse[2 + i * 8 + 4];
- decoded.TrackDescriptors[i].Reserved2 = CDSessionInfoResponse[3 + i * 8 + 4];
+ decoded.TrackDescriptors[i].Reserved2 = CDSessionInfoResponse[3 + i * 8 + 4];
decoded.TrackDescriptors[i].TrackStartAddress =
BigEndianBitConverter.ToUInt32(CDSessionInfoResponse, 4 + i * 8 + 4);
}
@@ -212,12 +212,12 @@ namespace DiscImageChef.Decoders.CD
? "Digital copy of track is permitted"
: "Digital copy of track is prohibited");
-#if DEBUG
+ #if DEBUG
if(descriptor.Reserved1 != 0)
sb.AppendFormat("Reserved1 = 0x{0:X2}", descriptor.Reserved1).AppendLine();
if(descriptor.Reserved2 != 0)
sb.AppendFormat("Reserved2 = 0x{0:X2}", descriptor.Reserved2).AppendLine();
-#endif
+ #endif
sb.AppendLine();
}
diff --git a/CD/TOC.cs b/CD/TOC.cs
index c5a0191f2..2c31b2dba 100644
--- a/CD/TOC.cs
+++ b/CD/TOC.cs
@@ -121,9 +121,9 @@ namespace DiscImageChef.Decoders.CD
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
- decoded.DataLength = BigEndianBitConverter.ToUInt16(CDTOCResponse, 0);
- decoded.FirstTrack = CDTOCResponse[2];
- decoded.LastTrack = CDTOCResponse[3];
+ decoded.DataLength = BigEndianBitConverter.ToUInt16(CDTOCResponse, 0);
+ decoded.FirstTrack = CDTOCResponse[2];
+ decoded.LastTrack = CDTOCResponse[3];
decoded.TrackDescriptors = new CDTOCTrackDataDescriptor[(decoded.DataLength - 2) / 8];
if(decoded.DataLength + 2 != CDTOCResponse.Length)
@@ -136,11 +136,11 @@ namespace DiscImageChef.Decoders.CD
for(int i = 0; i < (decoded.DataLength - 2) / 8; i++)
{
- decoded.TrackDescriptors[i].Reserved1 = CDTOCResponse[0 + i * 8 + 4];
- decoded.TrackDescriptors[i].ADR = (byte)((CDTOCResponse[1 + i * 8 + 4] & 0xF0) >> 4);
- decoded.TrackDescriptors[i].CONTROL = (byte)(CDTOCResponse[1 + i * 8 + 4] & 0x0F);
+ decoded.TrackDescriptors[i].Reserved1 = CDTOCResponse[0 + i * 8 + 4];
+ decoded.TrackDescriptors[i].ADR = (byte)((CDTOCResponse[1 + i * 8 + 4] & 0xF0) >> 4);
+ decoded.TrackDescriptors[i].CONTROL = (byte)(CDTOCResponse[1 + i * 8 + 4] & 0x0F);
decoded.TrackDescriptors[i].TrackNumber = CDTOCResponse[2 + i * 8 + 4];
- decoded.TrackDescriptors[i].Reserved2 = CDTOCResponse[3 + i * 8 + 4];
+ decoded.TrackDescriptors[i].Reserved2 = CDTOCResponse[3 + i * 8 + 4];
decoded.TrackDescriptors[i].TrackStartAddress =
BigEndianBitConverter.ToUInt32(CDTOCResponse, 4 + i * 8 + 4);
}
@@ -220,12 +220,12 @@ namespace DiscImageChef.Decoders.CD
? "Digital copy of track is permitted"
: "Digital copy of track is prohibited");
-#if DEBUG
+ #if DEBUG
if(descriptor.Reserved1 != 0)
sb.AppendFormat("Reserved1 = 0x{0:X2}", descriptor.Reserved1).AppendLine();
if(descriptor.Reserved2 != 0)
sb.AppendFormat("Reserved2 = 0x{0:X2}", descriptor.Reserved2).AppendLine();
-#endif
+ #endif
sb.AppendLine();
}
diff --git a/DVD/CSS&CPRM.cs b/DVD/CSS&CPRM.cs
index 76613411f..7deb5936f 100644
--- a/DVD/CSS&CPRM.cs
+++ b/DVD/CSS&CPRM.cs
@@ -126,13 +126,13 @@ namespace DiscImageChef.Decoders.DVD
return new LeadInCopyright
{
- DataLength = (ushort)((response[0] << 8) + response[1]),
- Reserved1 = response[2],
- Reserved2 = response[3],
- CopyrightType = (CopyrightType)response[4],
+ DataLength = (ushort)((response[0] << 8) + response[1]),
+ Reserved1 = response[2],
+ Reserved2 = response[3],
+ CopyrightType = (CopyrightType)response[4],
RegionInformation = response[5],
- Reserved3 = response[6],
- Reserved4 = response[7]
+ Reserved3 = response[6],
+ Reserved4 = response[7]
};
}
@@ -141,7 +141,7 @@ namespace DiscImageChef.Decoders.DVD
if(cmi == null) return null;
LeadInCopyright decoded = cmi.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
switch(decoded.CopyrightType)
{
@@ -164,7 +164,7 @@ namespace DiscImageChef.Decoders.DVD
if(decoded.CopyrightType == 0) return sb.ToString();
- if(decoded.RegionInformation == 0xFF) sb.AppendLine("Disc cannot be played in any region at all.");
+ if(decoded.RegionInformation == 0xFF) sb.AppendLine("Disc cannot be played in any region at all.");
else if(decoded.RegionInformation == 0x00) sb.AppendLine("Disc can be played in any region.");
else
{
diff --git a/DVD/Cartridge.cs b/DVD/Cartridge.cs
index dec065023..be9317ef7 100644
--- a/DVD/Cartridge.cs
+++ b/DVD/Cartridge.cs
@@ -132,18 +132,18 @@ namespace DiscImageChef.Decoders.DVD
return new MediumStatus
{
DataLength = (ushort)((response[0] << 8) + response[1]),
- Reserved1 = response[2],
- Reserved2 = response[3],
- Cartridge = (response[4] & 0x80) == 0x80,
- OUT = (response[4] & 0x40) == 0x40,
- Reserved3 = (byte)((response[4] & 0x30) >> 4),
- MSWI = (response[4] & 0x08) == 0x08,
- CWP = (response[4] & 0x04) == 0x04,
- PWP = (response[4] & 0x02) == 0x02,
- Reserved4 = (response[4] & 0x01) == 0x01,
- DiscType = response[5],
- Reserved5 = response[6],
- RAMSWI = response[7]
+ Reserved1 = response[2],
+ Reserved2 = response[3],
+ Cartridge = (response[4] & 0x80) == 0x80,
+ OUT = (response[4] & 0x40) == 0x40,
+ Reserved3 = (byte)((response[4] & 0x30) >> 4),
+ MSWI = (response[4] & 0x08) == 0x08,
+ CWP = (response[4] & 0x04) == 0x04,
+ PWP = (response[4] & 0x02) == 0x02,
+ Reserved4 = (response[4] & 0x01) == 0x01,
+ DiscType = response[5],
+ Reserved5 = response[6],
+ RAMSWI = response[7]
};
}
@@ -151,8 +151,8 @@ namespace DiscImageChef.Decoders.DVD
{
if(status == null) return null;
- MediumStatus decoded = status.Value;
- StringBuilder sb = new StringBuilder();
+ MediumStatus decoded = status.Value;
+ StringBuilder sb = new StringBuilder();
if(decoded.PWP) sb.AppendLine("Disc surface is set to write protected status");
diff --git a/DVD/DDS.cs b/DVD/DDS.cs
index 8599fba5f..da0d8dcdf 100644
--- a/DVD/DDS.cs
+++ b/DVD/DDS.cs
@@ -209,32 +209,34 @@ namespace DiscImageChef.Decoders.DVD
if(dds.Identifier != 0x0A0A) return null;
// Common to both DVD-RAM versions
- dds.DataLength = (ushort)((response[0] << 8) + response[1]);
- dds.Reserved1 = response[2];
- dds.Reserved2 = response[3];
- dds.Reserved3 = response[6];
- dds.InProcess |= (response[7] & 0x80) == 0x80;
- dds.UserCertification |= (response[7] & 0x02) == 0x02;
+ dds.DataLength = (ushort)((response[0] << 8) + response[1]);
+ dds.Reserved1 = response[2];
+ dds.Reserved2 = response[3];
+ dds.Reserved3 = response[6];
+ dds.InProcess |= (response[7] & 0x80) == 0x80;
+ dds.UserCertification |= (response[7] & 0x02) == 0x02;
dds.ManufacturerCertification |= (response[7] & 0x01) == 0x01;
- dds.UpdateCount = (uint)((response[8] << 24) + (response[9] << 16) + (response[10] << 8) + response[11]);
- dds.Groups = (ushort)((response[12] << 8) + response[13]);
+ dds.UpdateCount =
+ (uint)((response[8] << 24) + (response[9] << 16) + (response[10] << 8) + response[11]);
+ dds.Groups =
+ (ushort)((response[12] << 8) + response[13]);
// ECMA-272
if(dds.Groups == 24)
{
dds.PartialCertification |= (response[7] & 0x40) == 0x40;
dds.FormattingOnlyAGroup |= (response[7] & 0x20) == 0x20;
- dds.Reserved4 = (byte)((response[7] & 0x1C) >> 2);
- dds.Reserved = new byte[6];
+ dds.Reserved4 = (byte)((response[7] & 0x1C) >> 2);
+ dds.Reserved = new byte[6];
Array.Copy(response, 14, dds.Reserved, 0, 6);
dds.GroupCertificationFlags = new GroupCertificationFlag[24];
for(int i = 0; i < 24; i++)
{
- dds.GroupCertificationFlags[i].InProcess |= (response[20 + i] & 0x80) == 0x80;
+ dds.GroupCertificationFlags[i].InProcess |= (response[20 + i] & 0x80) == 0x80;
dds.GroupCertificationFlags[i].PartialCertification |= (response[20 + i] & 0x40) == 0x40;
- dds.GroupCertificationFlags[i].Reserved1 = (byte)((response[20 + i] & 0x3C) >> 2);
- dds.GroupCertificationFlags[i].UserCertification |= (response[20 + i] & 0x02) == 0x02;
- dds.GroupCertificationFlags[i].Reserved2 |= (response[20 + i] & 0x01) == 0x01;
+ dds.GroupCertificationFlags[i].Reserved1 = (byte)((response[20 + i] & 0x3C) >> 2);
+ dds.GroupCertificationFlags[i].UserCertification |= (response[20 + i] & 0x02) == 0x02;
+ dds.GroupCertificationFlags[i].Reserved2 |= (response[20 + i] & 0x01) == 0x01;
}
}
@@ -243,17 +245,17 @@ namespace DiscImageChef.Decoders.DVD
{
dds.Reserved4 = (byte)((response[7] & 0x7C) >> 2);
- dds.Reserved = new byte[68];
+ dds.Reserved = new byte[68];
Array.Copy(response, 16, dds.Reserved, 0, 68);
- dds.Zones = (ushort)((response[14] << 8) + response[15]);
+ dds.Zones = (ushort)((response[14] << 8) + response[15]);
dds.SpareAreaFirstPSN = (uint)((response[85] << 16) + (response[86] << 8) + response[87]);
- dds.SpareAreaLastPSN = (uint)((response[89] << 16) + (response[90] << 8) + response[91]);
- dds.LSN0Location = (uint)((response[93] << 16) + (response[94] << 8) + response[95]);
- dds.StartLSNForZone = new uint[dds.Zones];
+ dds.SpareAreaLastPSN = (uint)((response[89] << 16) + (response[90] << 8) + response[91]);
+ dds.LSN0Location = (uint)((response[93] << 16) + (response[94] << 8) + response[95]);
+ dds.StartLSNForZone = new uint[dds.Zones];
for(int i = 0; i < dds.Zones; i++)
dds.StartLSNForZone[i] = (uint)((response[260 + i * 4 + 1] << 16) +
- (response[260 + i * 4 + 2] << 8) + response[260 + i * 4 + 3]);
+ (response[260 + i * 4 + 2] << 8) + response[260 + i * 4 + 3]);
}
return dds;
@@ -264,7 +266,7 @@ namespace DiscImageChef.Decoders.DVD
if(dds == null) return null;
DiscDefinitionStructure decoded = dds.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
if(decoded.InProcess)
{
@@ -290,6 +292,7 @@ namespace DiscImageChef.Decoders.DVD
if(decoded.GroupCertificationFlags[i].PartialCertification)
sb.AppendFormat("Group {0} is being certified partially", i).AppendLine();
}
+
if(decoded.GroupCertificationFlags[i].UserCertification)
sb.AppendFormat("Group {0} has been certified by an user", i).AppendLine();
}
diff --git a/DVD/Enums.cs b/DVD/Enums.cs
index 3871b619c..ebc9cba8c 100644
--- a/DVD/Enums.cs
+++ b/DVD/Enums.cs
@@ -126,10 +126,10 @@ namespace DiscImageChef.Decoders.DVD
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum LayerTypeFieldMask : byte
{
- Embossed = 0x01,
+ Embossed = 0x01,
Recordable = 0x02,
Rewritable = 0x04,
- Reserved = 0x08
+ Reserved = 0x08
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
@@ -255,21 +255,21 @@ namespace DiscImageChef.Decoders.DVD
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum DVDLayerStructure
{
- Unspecified = 0,
+ Unspecified = 0,
InvertedStack = 1,
- TwoP = 2,
- Reserved = 3
+ TwoP = 2,
+ Reserved = 3
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum DVDRecordingSpeed
{
- None = 0,
- Two = 0,
- Four = 0x10,
- Six = 0x20,
- Eight = 0x30,
- Ten = 0x40,
+ None = 0,
+ Two = 0,
+ Four = 0x10,
+ Six = 0x20,
+ Eight = 0x30,
+ Ten = 0x40,
Twelve = 0x50
}
#endregion
diff --git a/DVD/PFI.cs b/DVD/PFI.cs
index de23ac7d6..384b703f5 100644
--- a/DVD/PFI.cs
+++ b/DVD/PFI.cs
@@ -1070,32 +1070,33 @@ namespace DiscImageChef.Decoders.DVD
Array.Copy(response, 0, tmp2, 4, 2048);
response = tmp2;
}
-
+
if(response.Length < 2052) return null;
PhysicalFormatInformation pfi = new PhysicalFormatInformation();
- byte[] tmp;
+ byte[] tmp;
pfi.DataLength = (ushort)((response[0] << 8) + response[1]);
- pfi.Reserved1 = response[2];
- pfi.Reserved2 = response[3];
+ pfi.Reserved1 = response[2];
+ pfi.Reserved2 = response[3];
// Common
- pfi.DiskCategory = (DiskCategory)((response[4] & 0xF0) >> 4);
- pfi.PartVersion = (byte)(response[4] & 0x0F);
- pfi.DiscSize = (DVDSize)((response[5] & 0xF0) >> 4);
- pfi.MaximumRate = (MaximumRateField)(response[5] & 0x0F);
- pfi.Reserved3 |= (response[6] & 0x80) == 0x80;
- pfi.Layers = (byte)((response[6] & 0x60) >> 5);
- pfi.TrackPath |= (response[6] & 0x08) == 0x08;
- pfi.LayerType = (LayerTypeFieldMask)(response[6] & 0x07);
- pfi.LinearDensity = (LinearDensityField)((response[7] & 0xF0) >> 4);
- pfi.TrackDensity = (TrackDensityField)(response[7] & 0x0F);
+ pfi.DiskCategory = (DiskCategory)((response[4] & 0xF0) >> 4);
+ pfi.PartVersion = (byte)(response[4] & 0x0F);
+ pfi.DiscSize = (DVDSize)((response[5] & 0xF0) >> 4);
+ pfi.MaximumRate = (MaximumRateField)(response[5] & 0x0F);
+ pfi.Reserved3 |= (response[6] & 0x80) == 0x80;
+ pfi.Layers = (byte)((response[6] & 0x60) >> 5);
+ pfi.TrackPath |= (response[6] & 0x08) == 0x08;
+ pfi.LayerType = (LayerTypeFieldMask)(response[6] & 0x07);
+ pfi.LinearDensity = (LinearDensityField)((response[7] & 0xF0) >> 4);
+ pfi.TrackDensity = (TrackDensityField)(response[7] & 0x0F);
pfi.DataAreaStartPSN =
(uint)((response[8] << 24) + (response[9] << 16) + (response[10] << 8) + response[11]);
pfi.DataAreaEndPSN =
(uint)((response[12] << 24) + (response[13] << 16) + (response[14] << 8) + response[15]);
- pfi.Layer0EndPSN = (uint)((response[16] << 24) + (response[17] << 16) + (response[18] << 8) + response[19]);
+ pfi.Layer0EndPSN =
+ (uint)((response[16] << 24) + (response[17] << 16) + (response[18] << 8) + response[19]);
pfi.BCA |= (response[20] & 0x80) == 0x80;
switch(pfi.DiskCategory)
@@ -1110,97 +1111,98 @@ namespace DiscImageChef.Decoders.DVD
if(pfi.PartVersion == 1)
{
- pfi.Velocity = response[52];
- pfi.ReadPower = response[53];
- pfi.PeakPower = response[54];
- pfi.BiasPower = response[55];
- pfi.FirstPulseStart = response[56];
- pfi.FirstPulseEnd = response[57];
- pfi.MultiPulseDuration = response[58];
- pfi.LastPulseStart = response[59];
- pfi.LastPulseEnd = response[60];
- pfi.BiasPowerDuration = response[61];
- pfi.PeakPowerGroove = response[62];
- pfi.BiasPowerGroove = response[63];
- pfi.FirstPulseStartGroove = response[64];
- pfi.FirstPulseEndGroove = response[65];
+ pfi.Velocity = response[52];
+ pfi.ReadPower = response[53];
+ pfi.PeakPower = response[54];
+ pfi.BiasPower = response[55];
+ pfi.FirstPulseStart = response[56];
+ pfi.FirstPulseEnd = response[57];
+ pfi.MultiPulseDuration = response[58];
+ pfi.LastPulseStart = response[59];
+ pfi.LastPulseEnd = response[60];
+ pfi.BiasPowerDuration = response[61];
+ pfi.PeakPowerGroove = response[62];
+ pfi.BiasPowerGroove = response[63];
+ pfi.FirstPulseStartGroove = response[64];
+ pfi.FirstPulseEndGroove = response[65];
pfi.MultiplePulseDurationGroove = response[66];
- pfi.LastPulseStartGroove = response[67];
- pfi.LastPulseEndGroove = response[68];
- pfi.BiasPowerDurationGroove = response[69];
+ pfi.LastPulseStartGroove = response[67];
+ pfi.LastPulseEndGroove = response[68];
+ pfi.BiasPowerDurationGroove = response[69];
}
else if(pfi.PartVersion == 6)
{
- pfi.Velocity = response[504];
- pfi.ReadPower = response[505];
+ pfi.Velocity = response[504];
+ pfi.ReadPower = response[505];
pfi.AdaptativeWritePulseControlFlag |= (response[506] & 0x80) == 0x80;
- pfi.PeakPower = response[507];
- pfi.BiasPower1 = response[508];
- pfi.BiasPower2 = response[509];
- pfi.BiasPower3 = response[510];
- pfi.PeakPowerGroove = response[511];
- pfi.BiasPower1Groove = response[512];
- pfi.BiasPower2Groove = response[513];
- pfi.BiasPower3Groove = response[514];
- pfi.FirstPulseEnd = response[515];
- pfi.FirstPulseDuration = response[516];
- pfi.MultiPulseDuration = response[518];
- pfi.LastPulseStart = response[519];
- pfi.BiasPower2Duration = response[520];
- pfi.FirstPulseStart3TSpace3T = response[521];
- pfi.FirstPulseStart4TSpace3T = response[522];
- pfi.FirstPulseStart5TSpace3T = response[523];
- pfi.FirstPulseStartSpace3T = response[524];
- pfi.FirstPulseStart3TSpace4T = response[525];
- pfi.FirstPulseStart4TSpace4T = response[526];
- pfi.FirstPulseStart5TSpace4T = response[527];
- pfi.FirstPulseStartSpace4T = response[528];
- pfi.FirstPulseStart3TSpace5T = response[529];
- pfi.FirstPulseStart4TSpace5T = response[530];
- pfi.FirstPulseStart5TSpace5T = response[531];
- pfi.FirstPulseStartSpace5T = response[532];
- pfi.FirstPulseStart3TSpace = response[533];
- pfi.FirstPulseStart4TSpace = response[534];
- pfi.FirstPulseStart5TSpace = response[535];
- pfi.FirstPulseStartSpace = response[536];
- pfi.FirstPulse3TStartTSpace3T = response[537];
- pfi.FirstPulse4TStartTSpace3T = response[538];
- pfi.FirstPulse5TStartTSpace3T = response[539];
- pfi.FirstPulseStartTSpace3T = response[540];
- pfi.FirstPulse3TStartTSpace4T = response[541];
- pfi.FirstPulse4TStartTSpace4T = response[542];
- pfi.FirstPulse5TStartTSpace4T = response[543];
- pfi.FirstPulseStartTSpace4T = response[544];
- pfi.FirstPulse3TStartTSpace5T = response[545];
- pfi.FirstPulse4TStartTSpace5T = response[546];
- pfi.FirstPulse5TStartTSpace5T = response[547];
- pfi.FirstPulseStartTSpace5T = response[548];
- pfi.FirstPulse3TStartTSpace = response[549];
- pfi.FirstPulse4TStartTSpace = response[550];
- pfi.FirstPulse5TStartTSpace = response[551];
- pfi.FirstPulseStartTSpace = response[552];
- tmp = new byte[48];
+ pfi.PeakPower = response[507];
+ pfi.BiasPower1 = response[508];
+ pfi.BiasPower2 = response[509];
+ pfi.BiasPower3 = response[510];
+ pfi.PeakPowerGroove = response[511];
+ pfi.BiasPower1Groove = response[512];
+ pfi.BiasPower2Groove = response[513];
+ pfi.BiasPower3Groove = response[514];
+ pfi.FirstPulseEnd = response[515];
+ pfi.FirstPulseDuration = response[516];
+ pfi.MultiPulseDuration = response[518];
+ pfi.LastPulseStart = response[519];
+ pfi.BiasPower2Duration = response[520];
+ pfi.FirstPulseStart3TSpace3T = response[521];
+ pfi.FirstPulseStart4TSpace3T = response[522];
+ pfi.FirstPulseStart5TSpace3T = response[523];
+ pfi.FirstPulseStartSpace3T = response[524];
+ pfi.FirstPulseStart3TSpace4T = response[525];
+ pfi.FirstPulseStart4TSpace4T = response[526];
+ pfi.FirstPulseStart5TSpace4T = response[527];
+ pfi.FirstPulseStartSpace4T = response[528];
+ pfi.FirstPulseStart3TSpace5T = response[529];
+ pfi.FirstPulseStart4TSpace5T = response[530];
+ pfi.FirstPulseStart5TSpace5T = response[531];
+ pfi.FirstPulseStartSpace5T = response[532];
+ pfi.FirstPulseStart3TSpace = response[533];
+ pfi.FirstPulseStart4TSpace = response[534];
+ pfi.FirstPulseStart5TSpace = response[535];
+ pfi.FirstPulseStartSpace = response[536];
+ pfi.FirstPulse3TStartTSpace3T = response[537];
+ pfi.FirstPulse4TStartTSpace3T = response[538];
+ pfi.FirstPulse5TStartTSpace3T = response[539];
+ pfi.FirstPulseStartTSpace3T = response[540];
+ pfi.FirstPulse3TStartTSpace4T = response[541];
+ pfi.FirstPulse4TStartTSpace4T = response[542];
+ pfi.FirstPulse5TStartTSpace4T = response[543];
+ pfi.FirstPulseStartTSpace4T = response[544];
+ pfi.FirstPulse3TStartTSpace5T = response[545];
+ pfi.FirstPulse4TStartTSpace5T = response[546];
+ pfi.FirstPulse5TStartTSpace5T = response[547];
+ pfi.FirstPulseStartTSpace5T = response[548];
+ pfi.FirstPulse3TStartTSpace = response[549];
+ pfi.FirstPulse4TStartTSpace = response[550];
+ pfi.FirstPulse5TStartTSpace = response[551];
+ pfi.FirstPulseStartTSpace = response[552];
+ tmp = new byte[48];
Array.Copy(response, 553, tmp, 0, 48);
pfi.DiskManufacturer = StringHandlers.SpacePaddedToString(tmp);
- tmp = new byte[16];
+ tmp = new byte[16];
Array.Copy(response, 601, tmp, 0, 16);
pfi.DiskManufacturerSupplementary = StringHandlers.SpacePaddedToString(tmp);
- pfi.WritePowerControlParams = new byte[2];
- pfi.WritePowerControlParams[0] = response[617];
- pfi.WritePowerControlParams[1] = response[618];
- pfi.PowerRatioLandThreshold = response[619];
- pfi.TargetAsymmetry = response[620];
- pfi.TemporaryPeakPower = response[621];
- pfi.TemporaryBiasPower1 = response[622];
- pfi.TemporaryBiasPower2 = response[623];
- pfi.TemporaryBiasPower3 = response[624];
- pfi.PowerRatioGrooveThreshold = response[625];
- pfi.PowerRatioLandThreshold6T = response[626];
- pfi.PowerRatioGrooveThreshold6T = response[627];
+ pfi.WritePowerControlParams = new byte[2];
+ pfi.WritePowerControlParams[0] = response[617];
+ pfi.WritePowerControlParams[1] = response[618];
+ pfi.PowerRatioLandThreshold = response[619];
+ pfi.TargetAsymmetry = response[620];
+ pfi.TemporaryPeakPower = response[621];
+ pfi.TemporaryBiasPower1 = response[622];
+ pfi.TemporaryBiasPower2 = response[623];
+ pfi.TemporaryBiasPower3 = response[624];
+ pfi.PowerRatioGrooveThreshold = response[625];
+ pfi.PowerRatioLandThreshold6T = response[626];
+ pfi.PowerRatioGrooveThreshold6T = response[627];
}
+
break;
// DVD-R and DVD-RW
- case DiskCategory.DVDR when pfi.PartVersion < 6:
+ case DiskCategory.DVDR when pfi.PartVersion < 6:
case DiskCategory.DVDRW when pfi.PartVersion < 3:
pfi.CurrentBorderOutSector =
(uint)((response[36] << 24) + (response[37] << 16) + (response[38] << 8) + response[39]);
@@ -1209,39 +1211,39 @@ namespace DiscImageChef.Decoders.DVD
break;
// DVD+RW
case DiskCategory.DVDPRW:
- pfi.RecordingVelocity = response[36];
+ pfi.RecordingVelocity = response[36];
pfi.ReadPowerMaxVelocity = response[37];
- pfi.PIndMaxVelocity = response[38];
- pfi.PMaxVelocity = response[39];
- pfi.E1MaxVelocity = response[40];
- pfi.E2MaxVelocity = response[41];
- pfi.YTargetMaxVelocity = response[42];
+ pfi.PIndMaxVelocity = response[38];
+ pfi.PMaxVelocity = response[39];
+ pfi.E1MaxVelocity = response[40];
+ pfi.E2MaxVelocity = response[41];
+ pfi.YTargetMaxVelocity = response[42];
pfi.ReadPowerRefVelocity = response[43];
- pfi.PIndRefVelocity = response[44];
- pfi.PRefVelocity = response[45];
- pfi.E1RefVelocity = response[46];
- pfi.E2RefVelocity = response[47];
- pfi.YTargetRefVelocity = response[48];
+ pfi.PIndRefVelocity = response[44];
+ pfi.PRefVelocity = response[45];
+ pfi.E1RefVelocity = response[46];
+ pfi.E2RefVelocity = response[47];
+ pfi.YTargetRefVelocity = response[48];
pfi.ReadPowerMinVelocity = response[49];
- pfi.PIndMinVelocity = response[50];
- pfi.PMinVelocity = response[51];
- pfi.E1MinVelocity = response[52];
- pfi.E2MinVelocity = response[53];
- pfi.YTargetMinVelocity = response[54];
+ pfi.PIndMinVelocity = response[50];
+ pfi.PMinVelocity = response[51];
+ pfi.E1MinVelocity = response[52];
+ pfi.E2MinVelocity = response[53];
+ pfi.YTargetMinVelocity = response[54];
break;
}
// DVD+R, DVD+RW, DVD+R DL and DVD+RW DL
- if(pfi.DiskCategory == DiskCategory.DVDPR || pfi.DiskCategory == DiskCategory.DVDPRW ||
+ if(pfi.DiskCategory == DiskCategory.DVDPR || pfi.DiskCategory == DiskCategory.DVDPRW ||
pfi.DiskCategory == DiskCategory.DVDPRDL || pfi.DiskCategory == DiskCategory.DVDPRWDL)
{
- pfi.VCPS |= (response[20] & 0x40) == 0x40;
- pfi.ApplicationCode = response[21];
- pfi.ExtendedInformation = response[22];
- tmp = new byte[8];
+ pfi.VCPS |= (response[20] & 0x40) == 0x40;
+ pfi.ApplicationCode = response[21];
+ pfi.ExtendedInformation = response[22];
+ tmp = new byte[8];
Array.Copy(response, 23, tmp, 0, 8);
pfi.DiskManufacturerID = StringHandlers.CToString(tmp);
- tmp = new byte[3];
+ tmp = new byte[3];
Array.Copy(response, 31, tmp, 0, 3);
pfi.MediaTypeID = StringHandlers.CToString(tmp);
pfi.ProductRevision =
@@ -1253,39 +1255,39 @@ namespace DiscImageChef.Decoders.DVD
{
// DVD+RW
case DiskCategory.DVDPRW when pfi.PartVersion == 2:
- pfi.TopFirstPulseDuration = response[55];
- pfi.MultiPulseDuration = response[56];
- pfi.FirstPulseLeadTime = response[57];
+ pfi.TopFirstPulseDuration = response[55];
+ pfi.MultiPulseDuration = response[56];
+ pfi.FirstPulseLeadTime = response[57];
pfi.EraseLeadTimeRefVelocity = response[58];
pfi.EraseLeadTimeUppVelocity = response[59];
break;
// DVD+R and DVD+R DL
case DiskCategory.DVDPR:
case DiskCategory.DVDPRDL:
- pfi.PrimaryVelocity = response[36];
- pfi.UpperVelocity = response[37];
- pfi.Wavelength = response[38];
- pfi.NormalizedPowerDependency = response[39];
- pfi.MaximumPowerAtPrimaryVelocity = response[40];
- pfi.PindAtPrimaryVelocity = response[41];
- pfi.BtargetAtPrimaryVelocity = response[42];
- pfi.MaximumPowerAtUpperVelocity = response[43];
- pfi.PindAtUpperVelocity = response[44];
- pfi.BtargetAtUpperVelocity = response[45];
- pfi.FirstPulseDuration4TPrimaryVelocity = response[46];
- pfi.FirstPulseDuration3TPrimaryVelocity = response[47];
- pfi.MultiPulseDurationPrimaryVelocity = response[48];
- pfi.LastPulseDurationPrimaryVelocity = response[49];
- pfi.FirstPulseLeadTime4TPrimaryVelocity = response[50];
- pfi.FirstPulseLeadTime3TPrimaryVelocity = response[51];
+ pfi.PrimaryVelocity = response[36];
+ pfi.UpperVelocity = response[37];
+ pfi.Wavelength = response[38];
+ pfi.NormalizedPowerDependency = response[39];
+ pfi.MaximumPowerAtPrimaryVelocity = response[40];
+ pfi.PindAtPrimaryVelocity = response[41];
+ pfi.BtargetAtPrimaryVelocity = response[42];
+ pfi.MaximumPowerAtUpperVelocity = response[43];
+ pfi.PindAtUpperVelocity = response[44];
+ pfi.BtargetAtUpperVelocity = response[45];
+ pfi.FirstPulseDuration4TPrimaryVelocity = response[46];
+ pfi.FirstPulseDuration3TPrimaryVelocity = response[47];
+ pfi.MultiPulseDurationPrimaryVelocity = response[48];
+ pfi.LastPulseDurationPrimaryVelocity = response[49];
+ pfi.FirstPulseLeadTime4TPrimaryVelocity = response[50];
+ pfi.FirstPulseLeadTime3TPrimaryVelocity = response[51];
pfi.FirstPulseLeadingEdgePrimaryVelocity = response[52];
- pfi.FirstPulseDuration4TUpperVelocity = response[53];
- pfi.FirstPulseDuration3TUpperVelocity = response[54];
- pfi.MultiPulseDurationUpperVelocity = response[55];
- pfi.LastPulseDurationUpperVelocity = response[56];
- pfi.FirstPulseLeadTime4TUpperVelocity = response[57];
- pfi.FirstPulseLeadTime3TUpperVelocity = response[58];
- pfi.FirstPulseLeadingEdgeUpperVelocity = response[59];
+ pfi.FirstPulseDuration4TUpperVelocity = response[53];
+ pfi.FirstPulseDuration3TUpperVelocity = response[54];
+ pfi.MultiPulseDurationUpperVelocity = response[55];
+ pfi.LastPulseDurationUpperVelocity = response[56];
+ pfi.FirstPulseLeadTime4TUpperVelocity = response[57];
+ pfi.FirstPulseLeadTime3TUpperVelocity = response[58];
+ pfi.FirstPulseLeadingEdgeUpperVelocity = response[59];
break;
}
@@ -1297,48 +1299,48 @@ namespace DiscImageChef.Decoders.DVD
break;
// DVD+RW DL
case DiskCategory.DVDPRWDL:
- pfi.BasicPrimaryVelocity = response[36];
+ pfi.BasicPrimaryVelocity = response[36];
pfi.MaxReadPowerPrimaryVelocity = response[37];
- pfi.PindPrimaryVelocity = response[38];
- pfi.PPrimaryVelocity = response[39];
- pfi.E1PrimaryVelocity = response[40];
- pfi.E2PrimaryVelocity = response[41];
- pfi.YtargetPrimaryVelocity = response[42];
- pfi.BOptimumPrimaryVelocity = response[43];
- pfi.TFirstPulseDuration = response[46];
- pfi.TMultiPulseDuration = response[47];
- pfi.FirstPulseLeadTimeAnyRun = response[48];
- pfi.FirstPulseLeadTimeRun3T = response[49];
- pfi.LastPulseLeadTimeAnyRun = response[50];
- pfi.LastPulseLeadTime3T = response[51];
- pfi.LastPulseLeadTime4T = response[52];
- pfi.ErasePulseLeadTimeAny = response[53];
- pfi.ErasePulseLeadTime3T = response[54];
- pfi.ErasePulseLeadTime4T = response[55];
+ pfi.PindPrimaryVelocity = response[38];
+ pfi.PPrimaryVelocity = response[39];
+ pfi.E1PrimaryVelocity = response[40];
+ pfi.E2PrimaryVelocity = response[41];
+ pfi.YtargetPrimaryVelocity = response[42];
+ pfi.BOptimumPrimaryVelocity = response[43];
+ pfi.TFirstPulseDuration = response[46];
+ pfi.TMultiPulseDuration = response[47];
+ pfi.FirstPulseLeadTimeAnyRun = response[48];
+ pfi.FirstPulseLeadTimeRun3T = response[49];
+ pfi.LastPulseLeadTimeAnyRun = response[50];
+ pfi.LastPulseLeadTime3T = response[51];
+ pfi.LastPulseLeadTime4T = response[52];
+ pfi.ErasePulseLeadTimeAny = response[53];
+ pfi.ErasePulseLeadTime3T = response[54];
+ pfi.ErasePulseLeadTime4T = response[55];
break;
// DVD-R DL and DVD-RW DL
- case DiskCategory.DVDR when pfi.PartVersion == 6:
+ case DiskCategory.DVDR when pfi.PartVersion == 6:
case DiskCategory.DVDRW when pfi.PartVersion == 3:
pfi.MaxRecordingSpeed = (DVDRecordingSpeed)response[21];
pfi.MinRecordingSpeed = (DVDRecordingSpeed)response[22];
- pfi.RecordingSpeed1 = (DVDRecordingSpeed)response[23];
- pfi.RecordingSpeed2 = (DVDRecordingSpeed)response[24];
- pfi.RecordingSpeed3 = (DVDRecordingSpeed)response[25];
- pfi.RecordingSpeed4 = (DVDRecordingSpeed)response[26];
- pfi.RecordingSpeed5 = (DVDRecordingSpeed)response[27];
- pfi.RecordingSpeed6 = (DVDRecordingSpeed)response[28];
- pfi.RecordingSpeed7 = (DVDRecordingSpeed)response[29];
- pfi.Class = response[30];
- pfi.ExtendedVersion = response[31];
+ pfi.RecordingSpeed1 = (DVDRecordingSpeed)response[23];
+ pfi.RecordingSpeed2 = (DVDRecordingSpeed)response[24];
+ pfi.RecordingSpeed3 = (DVDRecordingSpeed)response[25];
+ pfi.RecordingSpeed4 = (DVDRecordingSpeed)response[26];
+ pfi.RecordingSpeed5 = (DVDRecordingSpeed)response[27];
+ pfi.RecordingSpeed6 = (DVDRecordingSpeed)response[28];
+ pfi.RecordingSpeed7 = (DVDRecordingSpeed)response[29];
+ pfi.Class = response[30];
+ pfi.ExtendedVersion = response[31];
pfi.CurrentBorderOutSector =
(uint)((response[36] << 24) + (response[37] << 16) + (response[38] << 8) + response[39]);
pfi.NextBorderInSector =
(uint)((response[40] << 24) + (response[41] << 16) + (response[42] << 8) + response[43]);
- pfi.PreRecordedControlDataInv |= (response[44] & 0x01) == 0x01;
- pfi.PreRecordedLeadIn |= (response[44] & 0x02) == 0x02;
- pfi.PreRecordedLeadOut |= (response[44] & 0x08) == 0x08;
- pfi.ARCharLayer1 = (byte)(response[45] & 0x0F);
- pfi.TrackPolarityLayer1 = (byte)((response[45] & 0xF0) >> 4);
+ pfi.PreRecordedControlDataInv |= (response[44] & 0x01) == 0x01;
+ pfi.PreRecordedLeadIn |= (response[44] & 0x02) == 0x02;
+ pfi.PreRecordedLeadOut |= (response[44] & 0x08) == 0x08;
+ pfi.ARCharLayer1 = (byte)(response[45] & 0x0F);
+ pfi.TrackPolarityLayer1 = (byte)((response[45] & 0xF0) >> 4);
break;
}
@@ -1350,7 +1352,7 @@ namespace DiscImageChef.Decoders.DVD
if(pfi == null) return null;
PhysicalFormatInformation decoded = pfi.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
string sizeString;
switch(decoded.DiscSize)
@@ -1541,7 +1543,7 @@ namespace DiscImageChef.Decoders.DVD
}
sb.AppendFormat("Disc has {0} layers", decoded.Layers + 1).AppendLine();
- if(decoded.TrackPath && decoded.Layers == 1) sb.AppendLine("Layers are in parallel track path");
+ if(decoded.TrackPath && decoded.Layers == 1) sb.AppendLine("Layers are in parallel track path");
else if(!decoded.TrackPath && decoded.Layers == 1) sb.AppendLine("Layers are in opposite track path");
switch(decoded.LinearDensity)
@@ -1602,7 +1604,8 @@ namespace DiscImageChef.Decoders.DVD
if(decoded.Layers == 1 && !decoded.TrackPath)
sb.AppendFormat("Layer 0 ends at PSN {0:X}h", decoded.Layer0EndPSN).AppendLine();
}
- else sb.AppendLine("Disc is empty");
+ else
+ sb.AppendLine("Disc is empty");
else sb.AppendLine("Disc is empty");
if(decoded.BCA) sb.AppendLine("Disc has a burst cutting area");
@@ -1632,8 +1635,9 @@ namespace DiscImageChef.Decoders.DVD
sb.AppendFormat("Disc manufacturer supplementary information is {0}",
decoded.DiskManufacturerSupplementary).AppendLine();
}
+
break;
- case DiskCategory.DVDR when decoded.PartVersion < 6:
+ case DiskCategory.DVDR when decoded.PartVersion < 6:
case DiskCategory.DVDRW when decoded.PartVersion < 3:
sb.AppendFormat("Current Border-Out first sector is PSN {0:X}h", decoded.CurrentBorderOutSector)
.AppendLine();
@@ -1652,7 +1656,7 @@ namespace DiscImageChef.Decoders.DVD
break;
}
- if((decoded.DiskCategory != DiskCategory.DVDR || decoded.PartVersion < 6) &&
+ if((decoded.DiskCategory != DiskCategory.DVDR || decoded.PartVersion < 6) &&
(decoded.DiskCategory != DiskCategory.DVDRW || decoded.PartVersion < 3)) return sb.ToString();
sb.AppendFormat("Current RMD in extra Border zone starts at PSN {0:X}h", decoded.CurrentRMDExtraBorderPSN)
diff --git a/DVD/Spare.cs b/DVD/Spare.cs
index d65031766..e911d4e70 100644
--- a/DVD/Spare.cs
+++ b/DVD/Spare.cs
@@ -97,8 +97,8 @@ namespace DiscImageChef.Decoders.DVD
return new SpareAreaInformation
{
DataLength = (ushort)((response[0] << 8) + response[1]),
- Reserved1 = response[2],
- Reserved2 = response[3],
+ Reserved1 = response[2],
+ Reserved2 = response[3],
UnusedPrimaryBlocks =
(uint)((response[4] << 24) + (response[5] << 16) + (response[6] << 8) + response[7]),
UnusedSupplementaryBlocks =
@@ -113,7 +113,7 @@ namespace DiscImageChef.Decoders.DVD
if(sai == null) return null;
SpareAreaInformation decoded = sai.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0} unused primary spare blocks", decoded.UnusedPrimaryBlocks).AppendLine();
sb.AppendFormat("{0} unused supplementary spare blocks", decoded.UnusedSupplementaryBlocks).AppendLine();
diff --git a/Floppy/Amiga.cs b/Floppy/Amiga.cs
index 7a03444ca..b6afce43b 100644
--- a/Floppy/Amiga.cs
+++ b/Floppy/Amiga.cs
@@ -48,11 +48,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Set to 0x00
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] zero;
///
/// Set to 0xA1
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] sync;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] sync;
///
/// Set to 0xFF
///
@@ -72,7 +74,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// OS dependent tag
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] label;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] label;
///
/// Checksum from to
///
@@ -81,7 +84,8 @@ namespace DiscImageChef.Decoders.Floppy
/// Checksum from
///
public uint dataChecksum;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)] public byte[] data;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
+ public byte[] data;
}
}
}
\ No newline at end of file
diff --git a/Floppy/Apple2.cs b/Floppy/Apple2.cs
index 951864525..29ff2e178 100644
--- a/Floppy/Apple2.cs
+++ b/Floppy/Apple2.cs
@@ -93,33 +93,39 @@ namespace DiscImageChef.Decoders.Floppy
/// checksum[0] = (decodedChecksum >> 1) | 0xAA
/// checksum[1] = decodedChecksum | 0xAA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] checksum;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] checksum;
///
/// Always 0xDE, 0xAA, 0xEB
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] epilogue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] epilogue;
///
/// Always 0xD5, 0xAA, 0x96
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] prologue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] prologue;
///
/// Sector number encoded as:
/// sector[0] = (decodedSector >> 1) | 0xAA
/// sector[1] = decodedSector | 0xAA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] sector;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] sector;
///
/// Track number encoded as:
/// track[0] = (decodedTrack >> 1) | 0xAA
/// track[1] = decodedTrack | 0xAA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] track;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] track;
///
/// Volume number encoded as:
/// volume[0] = (decodedVolume >> 1) | 0xAA
/// volume[1] = decodedVolume | 0xAA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] volume;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] volume;
}
///
@@ -137,11 +143,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Always 0xDE, 0xAA, 0xEB
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] epilogue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] epilogue;
///
/// Always 0xD5, 0xAA, 0xAD
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] prologue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] prologue;
}
static readonly byte[] ReadTable5and3 =
@@ -225,11 +233,11 @@ namespace DiscImageChef.Decoders.Floppy
if(data == null || data.Length != 410) return null;
byte[] buffer = new byte[data.Length];
- byte carry = 0;
+ byte carry = 0;
for(int i = 0; i < data.Length; i++)
{
- carry ^= ReadTable5and3[data[i]];
- buffer[i] = carry;
+ carry ^= ReadTable5and3[data[i]];
+ buffer[i] = carry;
}
byte[] output = new byte[256];
@@ -237,14 +245,14 @@ namespace DiscImageChef.Decoders.Floppy
{
byte b1 = buffer[51 * 3 - i];
byte b2 = buffer[51 * 2 - i];
- byte b3 = buffer[51 - i];
- byte b4 = (byte)((((b1 & 2) << 1) | (b2 & 2) | ((b3 & 2) >> 1)) & 0xFF);
- byte b5 = (byte)((((b1 & 1) << 2) | ((b2 & 1) << 1) | (b3 & 1)) & 0xFF);
+ byte b3 = buffer[51 - i];
+ byte b4 = (byte)((((b1 & 2) << 1) | (b2 & 2) | ((b3 & 2) >> 1)) & 0xFF);
+ byte b5 = (byte)((((b1 & 1) << 2) | ((b2 & 1) << 1) | (b3 & 1)) & 0xFF);
output[250 - 5 * i] = (byte)(((buffer[i + 51 * 3 + 1] << 3) | ((b1 >> 2) & 0x7)) & 0xFF);
output[251 - 5 * i] = (byte)(((buffer[i + 51 * 4 + 1] << 3) | ((b2 >> 2) & 0x7)) & 0xFF);
output[252 - 5 * i] = (byte)(((buffer[i + 51 * 5 + 1] << 3) | ((b3 >> 2) & 0x7)) & 0xFF);
- output[253 - 5 * i] = (byte)(((buffer[i + 51 * 6 + 1] << 3) | b4) & 0xFF);
- output[254 - 5 * i] = (byte)(((buffer[i + 51 * 7 + 1] << 3) | b5) & 0xFF);
+ output[253 - 5 * i] = (byte)(((buffer[i + 51 * 6 + 1] << 3) | b4) & 0xFF);
+ output[254 - 5 * i] = (byte)(((buffer[i + 51 * 7 + 1] << 3) | b5) & 0xFF);
}
output[255] = (byte)(((buffer[409] << 3) | (buffer[0] & 0x7)) & 0xFF);
@@ -261,11 +269,11 @@ namespace DiscImageChef.Decoders.Floppy
if(data == null || data.Length != 342) return null;
byte[] buffer = new byte[data.Length];
- byte carry = 0;
+ byte carry = 0;
for(int i = 0; i < data.Length; i++)
{
- carry ^= ReadTable6and2[data[i]];
- buffer[i] = carry;
+ carry ^= ReadTable6and2[data[i]];
+ buffer[i] = carry;
}
byte[] output = new byte[256];
@@ -296,8 +304,10 @@ namespace DiscImageChef.Decoders.Floppy
public static byte[] DecodeSector(RawSector sector)
{
if(sector.addressField.prologue[0] != 0xD5 || sector.addressField.prologue[1] != 0xAA) return null;
+
// Pre DOS 3.3
if(sector.addressField.prologue[2] == 0xB5) return Decode5and3(sector.dataField.data);
+
// DOS 3.3
return sector.addressField.prologue[2] == 0x96 ? Decode6and2(sector.dataField.data) : null;
// Unknown
@@ -336,11 +346,12 @@ namespace DiscImageChef.Decoders.Floppy
addressField = new RawAddressField
{
prologue = new[] {data[position], data[position + 1], data[position + 2]},
- volume = new[] {data[position + 3], data[position + 4]},
- track = new[] {data[position + 5], data[position + 6]},
- sector = new[] {data[position + 7], data[position + 8]},
- checksum = new[] {data[position + 9], data[position + 10]},
- epilogue = new[] {data[position + 11], data[position + 12], data[position + 13]}
+ volume = new[] {data[position + 3], data[position + 4]},
+ track = new[] {data[position + 5], data[position + 6]},
+ sector = new[] {data[position + 7], data[position + 8]},
+ checksum = new[] {data[position + 9], data[position + 10]},
+ epilogue = new[]
+ {data[position + 11], data[position + 12], data[position + 13]}
}
};
@@ -361,9 +372,9 @@ namespace DiscImageChef.Decoders.Floppy
sector.addressField.epilogue[2]);
position += 14;
- int syncCount = 0;
- bool onSync = false;
- MemoryStream gaps = new MemoryStream();
+ int syncCount = 0;
+ bool onSync = false;
+ MemoryStream gaps = new MemoryStream();
while(data[position] == 0xFF)
{
@@ -379,17 +390,17 @@ namespace DiscImageChef.Decoders.Floppy
// Prologue not found
if(data[position] != 0xD5 || data[position + 1] != 0xAA) return null;
- sector.innerGap = gaps.ToArray();
+ sector.innerGap = gaps.ToArray();
sector.dataField = new RawDataField();
DicConsole.DebugWriteLine("Apple ][ GCR Decoder", "Inner gap has {0} bytes",
sector.innerGap.Length);
DicConsole.DebugWriteLine("Apple ][ GCR Decoder", "Prologue found at {0}", position);
- sector.dataField.prologue = new byte[3];
- sector.dataField.prologue[0] = data[position];
- sector.dataField.prologue[1] = data[position + 1];
- sector.dataField.prologue[2] = data[position + 2];
- position += 3;
+ sector.dataField.prologue = new byte[3];
+ sector.dataField.prologue[0] = data[position];
+ sector.dataField.prologue[1] = data[position + 1];
+ sector.dataField.prologue[2] = data[position + 2];
+ position += 3;
gaps = new MemoryStream();
// Read data until epilogue is found
@@ -405,14 +416,14 @@ namespace DiscImageChef.Decoders.Floppy
sector.dataField.data = gaps.ToArray();
DicConsole.DebugWriteLine("Apple ][ GCR Decoder", "Data has {0} bytes",
sector.dataField.data.Length);
- sector.dataField.checksum = data[position];
- sector.dataField.epilogue = new byte[3];
+ sector.dataField.checksum = data[position];
+ sector.dataField.epilogue = new byte[3];
sector.dataField.epilogue[0] = data[position + 1];
sector.dataField.epilogue[1] = data[position + 2];
sector.dataField.epilogue[2] = data[position + 3];
position += 4;
- gaps = new MemoryStream();
+ gaps = new MemoryStream();
// Read gap, if any
while(position < data.Length && data[position] == 0xFF)
{
@@ -430,7 +441,7 @@ namespace DiscImageChef.Decoders.Floppy
sector.gap = gaps.ToArray();
// Return current position to be able to read separate sectors
endOffset = position;
- DicConsole.DebugWriteLine("Apple ][ GCR Decoder", "Got {0} bytes of gap", sector.gap.Length);
+ DicConsole.DebugWriteLine("Apple ][ GCR Decoder", "Got {0} bytes of gap", sector.gap.Length);
DicConsole.DebugWriteLine("Apple ][ GCR Decoder", "Finished sector at {0}", position);
return sector;
}
@@ -451,9 +462,9 @@ namespace DiscImageChef.Decoders.Floppy
MemoryStream raw = new MemoryStream();
raw.Write(addressField.prologue, 0, addressField.prologue.Length);
- raw.Write(addressField.volume, 0, addressField.volume.Length);
- raw.Write(addressField.track, 0, addressField.track.Length);
- raw.Write(addressField.sector, 0, addressField.sector.Length);
+ raw.Write(addressField.volume, 0, addressField.volume.Length);
+ raw.Write(addressField.track, 0, addressField.track.Length);
+ raw.Write(addressField.sector, 0, addressField.sector.Length);
raw.Write(addressField.checksum, 0, addressField.checksum.Length);
raw.Write(addressField.epilogue, 0, addressField.epilogue.Length);
@@ -466,17 +477,17 @@ namespace DiscImageChef.Decoders.Floppy
MemoryStream raw = new MemoryStream();
raw.Write(sector.addressField.prologue, 0, sector.addressField.prologue.Length);
- raw.Write(sector.addressField.volume, 0, sector.addressField.volume.Length);
- raw.Write(sector.addressField.track, 0, sector.addressField.track.Length);
- raw.Write(sector.addressField.sector, 0, sector.addressField.sector.Length);
+ raw.Write(sector.addressField.volume, 0, sector.addressField.volume.Length);
+ raw.Write(sector.addressField.track, 0, sector.addressField.track.Length);
+ raw.Write(sector.addressField.sector, 0, sector.addressField.sector.Length);
raw.Write(sector.addressField.checksum, 0, sector.addressField.checksum.Length);
raw.Write(sector.addressField.epilogue, 0, sector.addressField.epilogue.Length);
- raw.Write(sector.innerGap, 0, sector.innerGap.Length);
- raw.Write(sector.dataField.prologue, 0, sector.dataField.prologue.Length);
- raw.Write(sector.dataField.data, 0, sector.dataField.data.Length);
+ raw.Write(sector.innerGap, 0, sector.innerGap.Length);
+ raw.Write(sector.dataField.prologue, 0, sector.dataField.prologue.Length);
+ raw.Write(sector.dataField.data, 0, sector.dataField.data.Length);
raw.WriteByte(sector.dataField.checksum);
raw.Write(sector.dataField.epilogue, 0, sector.dataField.epilogue.Length);
- raw.Write(sector.gap, 0, sector.gap.Length);
+ raw.Write(sector.gap, 0, sector.gap.Length);
return raw.ToArray();
}
@@ -488,13 +499,13 @@ namespace DiscImageChef.Decoders.Floppy
public static RawTrack MarshalTrack(byte[] data, out int endOffset, int offset = 0)
{
- int position = offset;
- bool firstSector = true;
- bool onSync = false;
- MemoryStream gaps = new MemoryStream();
- int count = 0;
- List sectors = new List();
- byte[] trackNumber = new byte[2];
+ int position = offset;
+ bool firstSector = true;
+ bool onSync = false;
+ MemoryStream gaps = new MemoryStream();
+ int count = 0;
+ List sectors = new List();
+ byte[] trackNumber = new byte[2];
endOffset = offset;
while(position < data.Length && data[position] == 0xFF)
@@ -511,15 +522,15 @@ namespace DiscImageChef.Decoders.Floppy
while(position < data.Length)
{
- int oldPosition = position;
- RawSector sector = MarshalSector(data, out position, position);
+ int oldPosition = position;
+ RawSector sector = MarshalSector(data, out position, position);
if(sector == null) break;
if(firstSector)
{
trackNumber[0] = sector.addressField.track[0];
trackNumber[1] = sector.addressField.track[1];
- firstSector = false;
+ firstSector = false;
}
if(sector.addressField.track[0] != trackNumber[0] || sector.addressField.track[1] != trackNumber[1])
@@ -562,8 +573,8 @@ namespace DiscImageChef.Decoders.Floppy
public static List MarshalDisk(byte[] data, out int endOffset, int offset = 0)
{
endOffset = offset;
- List tracks = new List();
- int position = offset;
+ List tracks = new List();
+ int position = offset;
RawTrack track = MarshalTrack(data, out position, position);
while(track != null)
diff --git a/Floppy/AppleSony.cs b/Floppy/AppleSony.cs
index a463a306f..1481062d0 100644
--- a/Floppy/AppleSony.cs
+++ b/Floppy/AppleSony.cs
@@ -98,7 +98,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Always 0xDE, 0xAA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] epilogue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] epilogue;
///
/// Disk format
///
@@ -106,7 +107,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Always 0xD5, 0xAA, 0x96
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] prologue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] prologue;
///
/// Encoded sector number
///
@@ -129,19 +131,23 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Checksum
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] checksum;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
+ public byte[] checksum;
///
/// Encoded data bytes.
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 698)] public byte[] data;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 698)]
+ public byte[] data;
///
/// Always 0xDE, 0xAA
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] epilogue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] epilogue;
///
/// Always 0xD5, 0xAA, 0xAD
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] prologue;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] prologue;
///
/// Spare, usually
///
@@ -153,13 +159,13 @@ namespace DiscImageChef.Decoders.Floppy
if(sector.addressField.prologue[0] != 0xD5 || sector.addressField.prologue[1] != 0xAA ||
sector.addressField.prologue[2] != 0x96) return null;
- byte[] bf1 = new byte[175];
- byte[] bf2 = new byte[175];
- byte[] bf3 = new byte[175];
- byte[] nib_data = sector.dataField.data;
- MemoryStream ms = new MemoryStream();
+ byte[] bf1 = new byte[175];
+ byte[] bf2 = new byte[175];
+ byte[] bf3 = new byte[175];
+ byte[] nib_data = sector.dataField.data;
+ MemoryStream ms = new MemoryStream();
- int j = 0;
+ int j = 0;
byte w3 = 0;
for(int i = 0; i <= 174; i++)
{
@@ -190,26 +196,29 @@ namespace DiscImageChef.Decoders.Floppy
ck3++;
ck1 &= 0xFF;
}
+
ms.WriteByte(carry);
- carry = (byte)((bf2[j] ^ ck3) & 0xFF);
- ck2 += carry;
+ carry = (byte)((bf2[j] ^ ck3) & 0xFF);
+ ck2 += carry;
if(ck3 > 0xFF)
{
ck2++;
ck3 &= 0xFF;
}
+
ms.WriteByte(carry);
if(ms.Length == 524) break;
- carry = (byte)((bf3[j] ^ ck2) & 0xFF);
- ck1 += carry;
+ carry = (byte)((bf3[j] ^ ck2) & 0xFF);
+ ck1 += carry;
if(ck2 > 0xFF)
{
ck1++;
ck2 &= 0xFF;
}
+
ms.WriteByte(carry);
j++;
}
@@ -248,19 +257,19 @@ namespace DiscImageChef.Decoders.Floppy
addressField = new RawAddressField
{
prologue = new[] {data[position], data[position + 1], data[position + 2]},
- track = data[position + 3],
- sector = data[position + 4],
- side = data[position + 5],
- format = (AppleEncodedFormat)data[position + 6],
+ track = data[position + 3],
+ sector = data[position + 4],
+ side = data[position + 5],
+ format = (AppleEncodedFormat)data[position + 6],
checksum = data[position + 7],
epilogue = new[] {data[position + 8], data[position + 9]}
}
};
position += 10;
- int syncCount = 0;
- bool onSync = false;
- MemoryStream gaps = new MemoryStream();
+ int syncCount = 0;
+ bool onSync = false;
+ MemoryStream gaps = new MemoryStream();
while(data[position] == 0xFF)
{
@@ -281,7 +290,7 @@ namespace DiscImageChef.Decoders.Floppy
sector.dataField = new RawDataField
{
prologue = new[] {data[position], data[position + 1], data[position + 2]},
- spare = data[position + 3]
+ spare = data[position + 3]
};
position += 4;
@@ -296,18 +305,18 @@ namespace DiscImageChef.Decoders.Floppy
if(position + 7 > data.Length) return null;
}
- sector.dataField.data = gaps.ToArray();
- sector.dataField.checksum = new byte[4];
+ sector.dataField.data = gaps.ToArray();
+ sector.dataField.checksum = new byte[4];
sector.dataField.checksum[0] = data[position];
sector.dataField.checksum[1] = data[position + 2];
sector.dataField.checksum[2] = data[position + 3];
sector.dataField.checksum[3] = data[position + 4];
- sector.dataField.epilogue = new byte[2];
+ sector.dataField.epilogue = new byte[2];
sector.dataField.epilogue[0] = data[position + 5];
sector.dataField.epilogue[1] = data[position + 6];
position += 7;
- gaps = new MemoryStream();
+ gaps = new MemoryStream();
// Read gap, if any
while(position < data.Length && data[position] == 0xFF)
{
@@ -364,13 +373,13 @@ namespace DiscImageChef.Decoders.Floppy
raw.WriteByte(sector.addressField.side);
raw.WriteByte((byte)sector.addressField.format);
raw.WriteByte(sector.addressField.checksum);
- raw.Write(sector.innerGap, 0, sector.innerGap.Length);
+ raw.Write(sector.innerGap, 0, sector.innerGap.Length);
raw.Write(sector.dataField.prologue, 0, sector.dataField.prologue.Length);
raw.WriteByte(sector.dataField.spare);
- raw.Write(sector.dataField.data, 0, sector.dataField.data.Length);
+ raw.Write(sector.dataField.data, 0, sector.dataField.data.Length);
raw.Write(sector.dataField.checksum, 0, sector.dataField.checksum.Length);
raw.Write(sector.dataField.epilogue, 0, sector.dataField.epilogue.Length);
- raw.Write(sector.gap, 0, sector.gap.Length);
+ raw.Write(sector.gap, 0, sector.gap.Length);
return raw.ToArray();
}
@@ -382,14 +391,14 @@ namespace DiscImageChef.Decoders.Floppy
public static RawTrack MarshalTrack(byte[] data, out int endOffset, int offset = 0)
{
- int position = offset;
- bool firstSector = true;
- bool onSync = false;
- MemoryStream gaps = new MemoryStream();
- int count = 0;
- List sectors = new List();
- byte trackNumber = 0;
- byte sideNumber = 0;
+ int position = offset;
+ bool firstSector = true;
+ bool onSync = false;
+ MemoryStream gaps = new MemoryStream();
+ int count = 0;
+ List sectors = new List();
+ byte trackNumber = 0;
+ byte sideNumber = 0;
endOffset = offset;
while(position < data.Length && data[position] == 0xFF)
@@ -406,14 +415,14 @@ namespace DiscImageChef.Decoders.Floppy
while(position < data.Length)
{
- int oldPosition = position;
- RawSector sector = MarshalSector(data, out position, position);
+ int oldPosition = position;
+ RawSector sector = MarshalSector(data, out position, position);
if(sector == null) break;
if(firstSector)
{
trackNumber = sector.addressField.track;
- sideNumber = sector.addressField.side;
+ sideNumber = sector.addressField.side;
firstSector = false;
}
@@ -452,8 +461,8 @@ namespace DiscImageChef.Decoders.Floppy
public static List MarshalDisk(byte[] data, out int endOffset, int offset = 0)
{
endOffset = offset;
- List tracks = new List();
- int position = offset;
+ List tracks = new List();
+ int position = offset;
RawTrack track = MarshalTrack(data, out position, position);
while(track != null)
diff --git a/Floppy/Commodore.cs b/Floppy/Commodore.cs
index ec417a8d2..dd560f9a0 100644
--- a/Floppy/Commodore.cs
+++ b/Floppy/Commodore.cs
@@ -86,7 +86,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// User data
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public byte data;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
+ public byte data;
///
/// XOR of
///
diff --git a/Floppy/Enums.cs b/Floppy/Enums.cs
index 619064f22..1a4030ad3 100644
--- a/Floppy/Enums.cs
+++ b/Floppy/Enums.cs
@@ -77,9 +77,9 @@ namespace DiscImageChef.Decoders.Floppy
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum IBMIdType : byte
{
- IndexMark = 0xFC,
- AddressMark = 0xFE,
- DataMark = 0xFB,
+ IndexMark = 0xFC,
+ AddressMark = 0xFE,
+ DataMark = 0xFB,
DeletedDataMark = 0xF8
}
diff --git a/Floppy/ISO.cs b/Floppy/ISO.cs
index bd1e30b7e..17bc76668 100644
--- a/Floppy/ISO.cs
+++ b/Floppy/ISO.cs
@@ -61,7 +61,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Start of track, 32 bytes set to 0x4E
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] innerGap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] innerGap;
///
/// Track sectors
///
@@ -84,7 +85,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 22 bytes set to 0x4E, set to 0x22 on Commodore 1581
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)] public byte[] innerGap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)]
+ public byte[] innerGap;
///
/// Sector data block
///
@@ -103,11 +105,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 12 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xA1
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] aone;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] aone;
///
/// Set to
///
@@ -142,11 +146,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 12 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xA1
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] aone;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] aone;
///
/// Set to or to
///
diff --git a/Floppy/Perpendicular.cs b/Floppy/Perpendicular.cs
index 5ea3ae6cd..eb97e3e94 100644
--- a/Floppy/Perpendicular.cs
+++ b/Floppy/Perpendicular.cs
@@ -84,7 +84,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 41 bytes set to 0x4E
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 41)] public byte[] innerGap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 41)]
+ public byte[] innerGap;
///
/// Sector data block
///
@@ -104,15 +105,18 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Gap from index pulse, 80 bytes set to 0x4E
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 80)] public byte[] gap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 80)]
+ public byte[] gap;
///
/// 12 bytes set to 0x00
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xC2
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] ctwo;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] ctwo;
///
/// Set to
///
@@ -120,7 +124,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Gap until first sector, 50 bytes to 0x4E
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)] public byte[] gap1;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
+ public byte[] gap1;
}
///
@@ -131,11 +136,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 12 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xA1
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] aone;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] aone;
///
/// Set to
///
@@ -170,11 +177,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 12 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xA1
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] aone;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] aone;
///
/// Set to or to
///
diff --git a/Floppy/System34.cs b/Floppy/System34.cs
index bc9342b68..6338727ab 100644
--- a/Floppy/System34.cs
+++ b/Floppy/System34.cs
@@ -82,15 +82,18 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Gap from index pulse, 80 bytes set to 0x4E
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 80)] public byte[] gap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 80)]
+ public byte[] gap;
///
/// 12 bytes set to 0x00
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xC2
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] ctwo;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] ctwo;
///
/// Set to
///
@@ -98,7 +101,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Gap until first sector, 50 bytes to 0x4E
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)] public byte[] gap1;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
+ public byte[] gap1;
}
///
@@ -113,7 +117,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 22 bytes set to 0x4E, set to 0x22 on Commodore 1581
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)] public byte[] innerGap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)]
+ public byte[] innerGap;
///
/// Sector data block
///
@@ -132,11 +137,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 12 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xA1
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] aone;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] aone;
///
/// Set to
///
@@ -171,11 +178,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 12 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// 3 bytes set to 0xA1
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] aone;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] aone;
///
/// Set to or to
///
diff --git a/Floppy/System3740.cs b/Floppy/System3740.cs
index 41a884cf9..e84062751 100644
--- a/Floppy/System3740.cs
+++ b/Floppy/System3740.cs
@@ -80,11 +80,13 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Gap from index pulse, 80 bytes set to 0xFF
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)] public byte[] gap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
+ public byte[] gap;
///
/// 6 bytes set to 0x00
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
+ public byte[] zero;
///
/// Set to
///
@@ -92,7 +94,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// Gap until first sector, 26 bytes to 0xFF
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 26)] public byte[] gap1;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 26)]
+ public byte[] gap1;
}
///
@@ -107,7 +110,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 11 bytes set to 0xFF
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)] public byte[] innerGap;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
+ public byte[] innerGap;
///
/// Sector data block
///
@@ -126,7 +130,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 6 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
+ public byte[] zero;
///
/// Set to
///
@@ -161,7 +166,8 @@ namespace DiscImageChef.Decoders.Floppy
///
/// 12 bytes set to 0
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] zero;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] zero;
///
/// Set to or to
///
diff --git a/LisaTag.cs b/LisaTag.cs
index c09caf070..1a4156fb6 100644
--- a/LisaTag.cs
+++ b/LisaTag.cs
@@ -149,7 +149,7 @@ namespace DiscImageChef.Decoders
tmp = BigEndianBitConverter.GetBytes((ushort)(UsedBytes & 0x7FFF));
Array.Copy(tmp, 0, tagBytes, 6, 2);
if(ValidChk) tagBytes[6] += 0x80;
- tmp = BigEndianBitConverter.GetBytes(AbsPage);
+ tmp = BigEndianBitConverter.GetBytes(AbsPage);
Array.Copy(tmp, 1, tagBytes, 8, 3);
tagBytes[11] = Checksum;
tmp = BigEndianBitConverter.GetBytes(RelPage);
@@ -276,7 +276,7 @@ namespace DiscImageChef.Decoders
tmp = BigEndianBitConverter.GetBytes((ushort)(UsedBytes & 0x7FFF));
Array.Copy(tmp, 0, tagBytes, 6, 2);
if(ValidChk) tagBytes[6] += 0x80;
- tmp = BigEndianBitConverter.GetBytes(AbsPage);
+ tmp = BigEndianBitConverter.GetBytes(AbsPage);
Array.Copy(tmp, 1, tagBytes, 8, 3);
tagBytes[11] = Checksum;
tmp = BigEndianBitConverter.GetBytes(RelPage);
@@ -399,10 +399,10 @@ namespace DiscImageChef.Decoders
snTag.Version = BigEndianBitConverter.ToUInt16(tag, 0);
snTag.Kind = (byte)((tag[2] & 0xC0) >> 6);
- snTag.Reserved = (byte)(tag[2] & 0x3F);
+ snTag.Reserved = (byte)(tag[2] & 0x3F);
snTag.Volume = tag[3];
snTag.FileId = BigEndianBitConverter.ToInt16(tag, 4);
- snTag.RelPage = BigEndianBitConverter.ToUInt16(tag, 6);
+ snTag.RelPage = BigEndianBitConverter.ToUInt16(tag, 6);
snTag.NextBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 8) & 0x7FF);
snTag.PrevBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 10) & 0x7FF);
@@ -424,7 +424,7 @@ namespace DiscImageChef.Decoders
phTag.Version = BigEndianBitConverter.ToUInt16(tag, 0);
phTag.Kind = (byte)((tag[2] & 0xC0) >> 6);
- phTag.Reserved = (byte)(tag[2] & 0x3F);
+ phTag.Reserved = (byte)(tag[2] & 0x3F);
phTag.Volume = tag[3];
phTag.FileId = BigEndianBitConverter.ToInt16(tag, 4);
phTag.ValidChk |= (tag[6] & 0x80) == 0x80;
@@ -469,7 +469,7 @@ namespace DiscImageChef.Decoders
pmTag.Version = BigEndianBitConverter.ToUInt16(tag, 0);
pmTag.Kind = (byte)((tag[2] & 0xC0) >> 6);
- pmTag.Reserved = (byte)(tag[2] & 0x3F);
+ pmTag.Reserved = (byte)(tag[2] & 0x3F);
pmTag.Volume = tag[3];
pmTag.FileId = BigEndianBitConverter.ToInt16(tag, 4);
pmTag.ValidChk |= (tag[6] & 0x80) == 0x80;
diff --git a/MMC/CID.cs b/MMC/CID.cs
index ec64f88d8..8399abff2 100644
--- a/MMC/CID.cs
+++ b/MMC/CID.cs
@@ -42,14 +42,14 @@ namespace DiscImageChef.Decoders.MMC
[SuppressMessage("ReSharper", "UnassignedField.Global")]
public class CID
{
- public byte Manufacturer;
- public byte DeviceType;
- public byte ApplicationID;
+ public byte Manufacturer;
+ public byte DeviceType;
+ public byte ApplicationID;
public string ProductName;
- public byte ProductRevision;
- public uint ProductSerialNumber;
- public byte ManufacturingDate;
- public byte CRC;
+ public byte ProductRevision;
+ public uint ProductSerialNumber;
+ public byte ManufacturingDate;
+ public byte CRC;
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
@@ -81,12 +81,12 @@ namespace DiscImageChef.Decoders.MMC
CID cid = new CID
{
- Manufacturer = response[0],
- DeviceType = (byte)(response[1] & 0x03),
- ProductRevision = response[9],
+ Manufacturer = response[0],
+ DeviceType = (byte)(response[1] & 0x03),
+ ProductRevision = response[9],
ProductSerialNumber = BitConverter.ToUInt32(response, 10),
- ManufacturingDate = response[14],
- CRC = (byte)((response[15] & 0xFE) >> 1)
+ ManufacturingDate = response[14],
+ CRC = (byte)((response[15] & 0xFE) >> 1)
};
byte[] tmp = new byte[6];
Array.Copy(response, 3, tmp, 0, 6);
diff --git a/MMC/CSD.cs b/MMC/CSD.cs
index dffe3928d..38f601877 100644
--- a/MMC/CSD.cs
+++ b/MMC/CSD.cs
@@ -42,39 +42,39 @@ namespace DiscImageChef.Decoders.MMC
[SuppressMessage("ReSharper", "NotAccessedField.Global")]
public class CSD
{
- public byte Structure;
- public byte Version;
- public byte TAAC;
- public byte NSAC;
- public byte Speed;
+ public byte Structure;
+ public byte Version;
+ public byte TAAC;
+ public byte NSAC;
+ public byte Speed;
public ushort Classes;
- public byte ReadBlockLength;
- public bool ReadsPartialBlocks;
- public bool WriteMisalignment;
- public bool ReadMisalignment;
- public bool DSRImplemented;
+ public byte ReadBlockLength;
+ public bool ReadsPartialBlocks;
+ public bool WriteMisalignment;
+ public bool ReadMisalignment;
+ public bool DSRImplemented;
public ushort Size;
- public byte ReadCurrentAtVddMin;
- public byte ReadCurrentAtVddMax;
- public byte WriteCurrentAtVddMin;
- public byte WriteCurrentAtVddMax;
- public byte SizeMultiplier;
- public byte EraseGroupSize;
- public byte EraseGroupSizeMultiplier;
- public byte WriteProtectGroupSize;
- public bool WriteProtectGroupEnable;
- public byte DefaultECC;
- public byte WriteSpeedFactor;
- public byte WriteBlockLength;
- public bool WritesPartialBlocks;
- public bool ContentProtection;
- public bool FileFormatGroup;
- public bool Copy;
- public bool PermanentWriteProtect;
- public bool TemporaryWriteProtect;
- public byte FileFormat;
- public byte ECC;
- public byte CRC;
+ public byte ReadCurrentAtVddMin;
+ public byte ReadCurrentAtVddMax;
+ public byte WriteCurrentAtVddMin;
+ public byte WriteCurrentAtVddMax;
+ public byte SizeMultiplier;
+ public byte EraseGroupSize;
+ public byte EraseGroupSizeMultiplier;
+ public byte WriteProtectGroupSize;
+ public bool WriteProtectGroupEnable;
+ public byte DefaultECC;
+ public byte WriteSpeedFactor;
+ public byte WriteBlockLength;
+ public bool WritesPartialBlocks;
+ public bool ContentProtection;
+ public bool FileFormatGroup;
+ public bool Copy;
+ public bool PermanentWriteProtect;
+ public bool TemporaryWriteProtect;
+ public byte FileFormat;
+ public byte ECC;
+ public byte CRC;
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
@@ -106,39 +106,40 @@ namespace DiscImageChef.Decoders.MMC
return new CSD
{
- Structure = (byte)((response[0] & 0xC0) >> 6),
- Version = (byte)((response[0] & 0x3C) >> 2),
- TAAC = response[1],
- NSAC = response[2],
- Speed = response[3],
- Classes = (ushort)((response[4] << 4) + ((response[5] & 0xF0) >> 4)),
- ReadBlockLength = (byte)(response[5] & 0x0F),
- ReadsPartialBlocks = (response[6] & 0x80) == 0x80,
- WriteMisalignment = (response[6] & 0x40) == 0x40,
- ReadMisalignment = (response[6] & 0x20) == 0x20,
- DSRImplemented = (response[6] & 0x10) == 0x10,
- Size = (ushort)(((response[6] & 0x03) << 10) + (response[7] << 2) + ((response[8] & 0xC0) >> 6)),
- ReadCurrentAtVddMin = (byte)((response[8] & 0x38) >> 3),
- ReadCurrentAtVddMax = (byte)(response[8] & 0x07),
- WriteCurrentAtVddMin = (byte)((response[9] & 0xE0) >> 5),
- WriteCurrentAtVddMax = (byte)((response[9] & 0x1C) >> 2),
- SizeMultiplier = (byte)(((response[9] & 0x03) << 1) + ((response[10] & 0x80) >> 7)),
- EraseGroupSize = (byte)((response[10] & 0x7C) >> 2),
+ Structure = (byte)((response[0] & 0xC0) >> 6),
+ Version = (byte)((response[0] & 0x3C) >> 2),
+ TAAC = response[1],
+ NSAC = response[2],
+ Speed = response[3],
+ Classes = (ushort)((response[4] << 4) + ((response[5] & 0xF0) >> 4)),
+ ReadBlockLength = (byte)(response[5] & 0x0F),
+ ReadsPartialBlocks = (response[6] & 0x80) == 0x80,
+ WriteMisalignment = (response[6] & 0x40) == 0x40,
+ ReadMisalignment = (response[6] & 0x20) == 0x20,
+ DSRImplemented = (response[6] & 0x10) == 0x10,
+ Size =
+ (ushort)(((response[6] & 0x03) << 10) + (response[7] << 2) + ((response[8] & 0xC0) >> 6)),
+ ReadCurrentAtVddMin = (byte)((response[8] & 0x38) >> 3),
+ ReadCurrentAtVddMax = (byte)(response[8] & 0x07),
+ WriteCurrentAtVddMin = (byte)((response[9] & 0xE0) >> 5),
+ WriteCurrentAtVddMax = (byte)((response[9] & 0x1C) >> 2),
+ SizeMultiplier = (byte)(((response[9] & 0x03) << 1) + ((response[10] & 0x80) >> 7)),
+ EraseGroupSize = (byte)((response[10] & 0x7C) >> 2),
EraseGroupSizeMultiplier = (byte)(((response[10] & 0x03) << 3) + ((response[11] & 0xE0) >> 5)),
- WriteProtectGroupSize = (byte)(response[11] & 0x1F),
- WriteProtectGroupEnable = (response[12] & 0x80) == 0x80,
- DefaultECC = (byte)((response[12] & 0x60) >> 5),
- WriteSpeedFactor = (byte)((response[12] & 0x1C) >> 2),
- WriteBlockLength = (byte)(((response[12] & 0x03) << 2) + ((response[13] & 0xC0) >> 6)),
- WritesPartialBlocks = (response[13] & 0x20) == 0x20,
- ContentProtection = (response[13] & 0x01) == 0x01,
- FileFormatGroup = (response[14] & 0x80) == 0x80,
- Copy = (response[14] & 0x40) == 0x40,
- PermanentWriteProtect = (response[14] & 0x20) == 0x20,
- TemporaryWriteProtect = (response[14] & 0x10) == 0x10,
- FileFormat = (byte)((response[14] & 0x0C) >> 2),
- ECC = (byte)(response[14] & 0x03),
- CRC = (byte)((response[15] & 0xFE) >> 1)
+ WriteProtectGroupSize = (byte)(response[11] & 0x1F),
+ WriteProtectGroupEnable = (response[12] & 0x80) == 0x80,
+ DefaultECC = (byte)((response[12] & 0x60) >> 5),
+ WriteSpeedFactor = (byte)((response[12] & 0x1C) >> 2),
+ WriteBlockLength = (byte)(((response[12] & 0x03) << 2) + ((response[13] & 0xC0) >> 6)),
+ WritesPartialBlocks = (response[13] & 0x20) == 0x20,
+ ContentProtection = (response[13] & 0x01) == 0x01,
+ FileFormatGroup = (response[14] & 0x80) == 0x80,
+ Copy = (response[14] & 0x40) == 0x40,
+ PermanentWriteProtect = (response[14] & 0x20) == 0x20,
+ TemporaryWriteProtect = (response[14] & 0x10) == 0x10,
+ FileFormat = (byte)((response[14] & 0x0C) >> 2),
+ ECC = (byte)(response[14] & 0x03),
+ CRC = (byte)((response[15] & 0xFE) >> 1)
};
}
@@ -148,7 +149,7 @@ namespace DiscImageChef.Decoders.MMC
double unitFactor = 0;
double multiplier = 0;
- string unit = "";
+ string unit = "";
StringBuilder sb = new StringBuilder();
sb.AppendLine("MultiMediaCard Device Specific Data Register:");
@@ -171,35 +172,35 @@ namespace DiscImageChef.Decoders.MMC
switch(csd.TAAC & 0x07)
{
case 0:
- unit = "ns";
+ unit = "ns";
unitFactor = 1;
break;
case 1:
- unit = "ns";
+ unit = "ns";
unitFactor = 10;
break;
case 2:
- unit = "ns";
+ unit = "ns";
unitFactor = 100;
break;
case 3:
- unit = "μs";
+ unit = "μs";
unitFactor = 1;
break;
case 4:
- unit = "μs";
+ unit = "μs";
unitFactor = 10;
break;
case 5:
- unit = "μs";
+ unit = "μs";
unitFactor = 100;
break;
case 6:
- unit = "ms";
+ unit = "ms";
unitFactor = 1;
break;
case 7:
- unit = "ms";
+ unit = "ms";
unitFactor = 10;
break;
}
@@ -277,7 +278,7 @@ namespace DiscImageChef.Decoders.MMC
unitFactor = 100;
break;
default:
- unit = "unknown";
+ unit = "unknown";
unitFactor = 0;
break;
}
@@ -338,7 +339,9 @@ namespace DiscImageChef.Decoders.MMC
sb.AppendFormat("\tDevice's clock frequency: {0}{1}", result, unit).AppendLine();
unit = "";
- for(int cl = 0, mask = 1; cl <= 11; cl++, mask <<= 1) if((csd.Classes & mask) == mask) unit += $" {cl}";
+ for(int cl = 0, mask = 1; cl <= 11; cl++, mask <<= 1)
+ if((csd.Classes & mask) == mask)
+ unit += $" {cl}";
sb.AppendFormat("\tDevice support command classes {0}", unit).AppendLine();
if(csd.ReadBlockLength == 15) sb.AppendLine("\tRead block length size is defined in extended CSD");
@@ -358,7 +361,7 @@ namespace DiscImageChef.Decoders.MMC
sb.AppendFormat("\tDevice has {0} blocks", (int)result).AppendLine();
result = (csd.Size + 1) * Math.Pow(2, csd.SizeMultiplier + 2) * Math.Pow(2, csd.ReadBlockLength);
- if(result > 1073741824) sb.AppendFormat("\tDevice has {0} GiB", result / 1073741824.0).AppendLine();
+ if(result > 1073741824) sb.AppendFormat("\tDevice has {0} GiB", result / 1073741824.0).AppendLine();
else if(result > 1048576) sb.AppendFormat("\tDevice has {0} MiB", result / 1048576.0).AppendLine();
else if(result > 1024) sb.AppendFormat("\tDevice has {0} KiB", result / 1024.0).AppendLine();
else sb.AppendFormat("\tDevice has {0} bytes", result).AppendLine();
@@ -478,7 +481,7 @@ namespace DiscImageChef.Decoders.MMC
// TODO: Check specification
unitFactor = Convert.ToDouble(csd.EraseGroupSize);
multiplier = Convert.ToDouble(csd.EraseGroupSizeMultiplier);
- result = (unitFactor + 1) * (multiplier + 1);
+ result = (unitFactor + 1) * (multiplier + 1);
sb.AppendFormat("\tDevice can erase a minimum of {0} blocks at a time", (int)result).AppendLine();
if(csd.WriteProtectGroupEnable)
diff --git a/MMC/ExtendedCSD.cs b/MMC/ExtendedCSD.cs
index 260c81e77..19b0e9250 100644
--- a/MMC/ExtendedCSD.cs
+++ b/MMC/ExtendedCSD.cs
@@ -44,7 +44,8 @@ namespace DiscImageChef.Decoders.MMC
[StructLayout(LayoutKind.Sequential)]
public class ExtendedCSD
{
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] Reserved0;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
+ public byte[] Reserved0;
public byte ExtendedSecurityCommandsError;
public byte SupportedCommandSets;
public byte HPIFeatures;
@@ -62,144 +63,152 @@ namespace DiscImageChef.Decoders.MMC
public byte OperationCodesTimeout;
public uint FFUArgument;
public byte BarrierSupport;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 177)] public byte[] Reserved1;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 177)]
+ public byte[] Reserved1;
public byte CMDQueuingSupport;
public byte CMDQueuingDepth;
public uint NumberofFWSectorsCorrectlyProgrammed;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] VendorHealthReport;
- public byte DeviceLifeEstimationTypeB;
- public byte DeviceLifeEstimationTypeA;
- public byte PreEOLInformation;
- public byte OptimalReadSize;
- public byte OptimalWriteSize;
- public byte OptimalTrimUnitSize;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] VendorHealthReport;
+ public byte DeviceLifeEstimationTypeB;
+ public byte DeviceLifeEstimationTypeA;
+ public byte PreEOLInformation;
+ public byte OptimalReadSize;
+ public byte OptimalWriteSize;
+ public byte OptimalTrimUnitSize;
public ushort DeviceVersion;
- public ulong FirmwareVersion;
- public byte PowerClassDDR200;
- public uint CacheSize;
- public byte GenericCMD6Timeout;
- public byte PowerOffNotificationTimeout;
- public byte BackgroundOperationsStatus;
- public uint CorrectlyProgrammedSectors;
- public byte InitializationTimeAfterPartition;
- public byte CacheFlushingPolicy;
- public byte PowerClassDDR52;
- public byte PowerClassDDR52_195;
- public byte PowerClassDDR200_195;
- public byte PowerClassDDR200_130;
- public byte MinimumWritePerformanceDDR52;
- public byte MinimumReadPerformanceDDR52;
- public byte Reserved2;
- public byte TRIMMultiplier;
- public byte SecureFeatureSupport;
- public byte SecureEraseMultiplier;
- public byte SecureTRIMMultiplier;
- public byte BootInformation;
- public byte Reserved3;
- public byte BootPartitionSize;
- public byte AccessSize;
- public byte HighCapacityEraseUnitSize;
- public byte HighCapacityEraseTimeout;
- public byte ReliableWriteSectorCount;
- public byte HighCapacityWriteProtectGroupSize;
- public byte SleepCurrentVcc;
- public byte SleepCurrentVccq;
- public byte ProductionStateAwarenessTimeout;
- public byte SleepAwakeTimeout;
- public byte SleepNotificationTimeout;
- public uint SectorCount;
- public byte SecureWriteProtectInformation;
- public byte MinimumWritePerformance52;
- public byte MinimumReadPerformance52;
- public byte MinimumWritePerformance26;
- public byte MinimumReadPerformance26;
- public byte MinimumWritePerformance26_4;
- public byte MinimumReadPerformance26_4;
- public byte Reserved4;
- public byte PowerClass26;
- public byte PowerClass52;
- public byte PowerClass26_195;
- public byte PowerClass52_195;
- public byte PartitionSwitchingTime;
- public byte OutOfInterruptBusyTiming;
- public byte DriverStrength;
- public byte DeviceType;
- public byte Reserved5;
- public byte Structure;
- public byte Reserved6;
- public byte Revision;
- public byte CommandSet;
- public byte Reserved7;
- public byte CommandSetRevision;
- public byte Reserved8;
- public byte PowerClass;
- public byte Reserved9;
- public byte HighSpeedInterfaceTiming;
- public byte StrobeSupport;
- public byte BusWidth;
- public byte Reserved10;
- public byte ErasedMemoryContent;
- public byte Reserved11;
- public byte PartitionConfiguration;
- public byte BootConfigProtection;
- public byte BootBusConditions;
- public byte Reserved12;
- public byte HighDensityEraseGroupDefinition;
- public byte BootWriteProtectionStatus;
- public byte BootAreaWriteProtectionRegister;
- public byte Reserved13;
- public byte UserAreaWriteProtectionRegister;
- public byte Reserved14;
- public byte FirmwareConfiguration;
- public byte RPMBSize;
- public byte WriteReliabilitySettingRegister;
- public byte WriteReliabilityParameterRegister;
- public byte StartSanitizeOperation;
- public byte ManuallyStartBackgroundOperations;
- public byte EnableBackgroundOperationsHandshake;
- public byte HWResetFunction;
- public byte HPIManagement;
- public byte PartitioningSupport;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] MaxEnhancedAreaSize;
+ public ulong FirmwareVersion;
+ public byte PowerClassDDR200;
+ public uint CacheSize;
+ public byte GenericCMD6Timeout;
+ public byte PowerOffNotificationTimeout;
+ public byte BackgroundOperationsStatus;
+ public uint CorrectlyProgrammedSectors;
+ public byte InitializationTimeAfterPartition;
+ public byte CacheFlushingPolicy;
+ public byte PowerClassDDR52;
+ public byte PowerClassDDR52_195;
+ public byte PowerClassDDR200_195;
+ public byte PowerClassDDR200_130;
+ public byte MinimumWritePerformanceDDR52;
+ public byte MinimumReadPerformanceDDR52;
+ public byte Reserved2;
+ public byte TRIMMultiplier;
+ public byte SecureFeatureSupport;
+ public byte SecureEraseMultiplier;
+ public byte SecureTRIMMultiplier;
+ public byte BootInformation;
+ public byte Reserved3;
+ public byte BootPartitionSize;
+ public byte AccessSize;
+ public byte HighCapacityEraseUnitSize;
+ public byte HighCapacityEraseTimeout;
+ public byte ReliableWriteSectorCount;
+ public byte HighCapacityWriteProtectGroupSize;
+ public byte SleepCurrentVcc;
+ public byte SleepCurrentVccq;
+ public byte ProductionStateAwarenessTimeout;
+ public byte SleepAwakeTimeout;
+ public byte SleepNotificationTimeout;
+ public uint SectorCount;
+ public byte SecureWriteProtectInformation;
+ public byte MinimumWritePerformance52;
+ public byte MinimumReadPerformance52;
+ public byte MinimumWritePerformance26;
+ public byte MinimumReadPerformance26;
+ public byte MinimumWritePerformance26_4;
+ public byte MinimumReadPerformance26_4;
+ public byte Reserved4;
+ public byte PowerClass26;
+ public byte PowerClass52;
+ public byte PowerClass26_195;
+ public byte PowerClass52_195;
+ public byte PartitionSwitchingTime;
+ public byte OutOfInterruptBusyTiming;
+ public byte DriverStrength;
+ public byte DeviceType;
+ public byte Reserved5;
+ public byte Structure;
+ public byte Reserved6;
+ public byte Revision;
+ public byte CommandSet;
+ public byte Reserved7;
+ public byte CommandSetRevision;
+ public byte Reserved8;
+ public byte PowerClass;
+ public byte Reserved9;
+ public byte HighSpeedInterfaceTiming;
+ public byte StrobeSupport;
+ public byte BusWidth;
+ public byte Reserved10;
+ public byte ErasedMemoryContent;
+ public byte Reserved11;
+ public byte PartitionConfiguration;
+ public byte BootConfigProtection;
+ public byte BootBusConditions;
+ public byte Reserved12;
+ public byte HighDensityEraseGroupDefinition;
+ public byte BootWriteProtectionStatus;
+ public byte BootAreaWriteProtectionRegister;
+ public byte Reserved13;
+ public byte UserAreaWriteProtectionRegister;
+ public byte Reserved14;
+ public byte FirmwareConfiguration;
+ public byte RPMBSize;
+ public byte WriteReliabilitySettingRegister;
+ public byte WriteReliabilityParameterRegister;
+ public byte StartSanitizeOperation;
+ public byte ManuallyStartBackgroundOperations;
+ public byte EnableBackgroundOperationsHandshake;
+ public byte HWResetFunction;
+ public byte HPIManagement;
+ public byte PartitioningSupport;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] MaxEnhancedAreaSize;
public byte PartitionsAttribute;
public byte PartitioningSetting;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] GeneralPurposePartitionSize;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] EnhancedUserDataAreaSize;
- public uint EnhancedUserDataStartAddress;
- public byte Reserved15;
- public byte BadBlockManagementMode;
- public byte ProductionStateAwareness;
- public byte PackageCaseTemperatureControl;
- public byte PeriodicWakeUp;
- public byte SupportsProgramCxDInDDR;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] GeneralPurposePartitionSize;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] EnhancedUserDataAreaSize;
+ public uint EnhancedUserDataStartAddress;
+ public byte Reserved15;
+ public byte BadBlockManagementMode;
+ public byte ProductionStateAwareness;
+ public byte PackageCaseTemperatureControl;
+ public byte PeriodicWakeUp;
+ public byte SupportsProgramCxDInDDR;
public ushort Reserved16;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public byte[] VendorSpecific;
- public byte NativeSectorSize;
- public byte SectorSizeEmulation;
- public byte SectorSize;
- public byte InitializationTimeout;
- public byte Class6CommandsControl;
- public byte AddressedGroupToBeReleased;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
+ public byte[] VendorSpecific;
+ public byte NativeSectorSize;
+ public byte SectorSizeEmulation;
+ public byte SectorSize;
+ public byte InitializationTimeout;
+ public byte Class6CommandsControl;
+ public byte AddressedGroupToBeReleased;
public ushort ExceptionEventsControl;
public ushort ExceptionEventsStatus;
public ushort ExtendedPartitionsAttribute;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)] public byte[] ContextConfiguration;
- public byte PackedCommandStatus;
- public byte PackedCommandFailureIndex;
- public byte PowerOffNotification;
- public byte CacheControl;
- public byte CacheFlushing;
- public byte BarrierControl;
- public byte ModeConfig;
- public byte ModeOperationCodes;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
+ public byte[] ContextConfiguration;
+ public byte PackedCommandStatus;
+ public byte PackedCommandFailureIndex;
+ public byte PowerOffNotification;
+ public byte CacheControl;
+ public byte CacheFlushing;
+ public byte BarrierControl;
+ public byte ModeConfig;
+ public byte ModeOperationCodes;
public ushort Reserved17;
- public byte FFUStatus;
- public uint PreLoadingDataSize;
- public uint MaxPreLoadingDataSize;
- public byte ProductStateAwarenessEnablement;
- public byte SecureRemovalType;
- public byte CommandQueueModeEnable;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)] public byte[] Reserved18;
+ public byte FFUStatus;
+ public uint PreLoadingDataSize;
+ public uint MaxPreLoadingDataSize;
+ public byte ProductStateAwarenessEnablement;
+ public byte SecureRemovalType;
+ public byte CommandQueueModeEnable;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
+ public byte[] Reserved18;
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
@@ -213,8 +222,8 @@ namespace DiscImageChef.Decoders.MMC
if(response.Length != 512) return null;
- GCHandle handle = GCHandle.Alloc(response, GCHandleType.Pinned);
- ExtendedCSD csd = (ExtendedCSD)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(ExtendedCSD));
+ GCHandle handle = GCHandle.Alloc(response, GCHandleType.Pinned);
+ ExtendedCSD csd = (ExtendedCSD)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(ExtendedCSD));
handle.Free();
return csd;
@@ -364,8 +373,8 @@ namespace DiscImageChef.Decoders.MMC
if(csd.PowerOffNotificationTimeout > 0)
sb
- .AppendFormat("\tDevice takes a maximum of {0} by default to power off from a SWITCH command notification",
- csd.PowerOffNotificationTimeout * 10).AppendLine();
+ .AppendFormat("\tDevice takes a maximum of {0} by default to power off from a SWITCH command notification",
+ csd.PowerOffNotificationTimeout * 10).AppendLine();
switch(csd.BackgroundOperationsStatus & 0x03)
{
diff --git a/MMC/OCR.cs b/MMC/OCR.cs
index f61fdf21c..c7d3775d2 100644
--- a/MMC/OCR.cs
+++ b/MMC/OCR.cs
@@ -72,25 +72,25 @@ namespace DiscImageChef.Decoders.MMC
{
return new OCR
{
- PowerUp = (response & 0x80000000) == 0x80000000,
+ PowerUp = (response & 0x80000000) == 0x80000000,
AccessMode = (byte)((response & 0x60000000) >> 29),
- ThreeFive = (response & 0x00800000) == 0x00800000,
- ThreeFour = (response & 0x00400000) == 0x00400000,
+ ThreeFive = (response & 0x00800000) == 0x00800000,
+ ThreeFour = (response & 0x00400000) == 0x00400000,
ThreeThree = (response & 0x00200000) == 0x00200000,
- ThreeTwo = (response & 0x00100000) == 0x00100000,
- ThreeOne = (response & 0x00080000) == 0x00080000,
- ThreeZero = (response & 0x00040000) == 0x00040000,
- TwoNine = (response & 0x00020000) == 0x00020000,
- TwoEight = (response & 0x00010000) == 0x00010000,
- TwoSeven = (response & 0x00008000) == 0x00008000,
- TwoSix = (response & 0x00004000) == 0x00004000,
- TwoFive = (response & 0x00002000) == 0x00002000,
- TwoFour = (response & 0x00001000) == 0x00001000,
- TwoThree = (response & 0x00000800) == 0x00000800,
- TwoTwo = (response & 0x00000400) == 0x00000400,
- TwoOne = (response & 0x00000200) == 0x00000200,
- TwoZero = (response & 0x00000100) == 0x00000100,
- OneSix = (response & 0x00000080) == 0x00000080
+ ThreeTwo = (response & 0x00100000) == 0x00100000,
+ ThreeOne = (response & 0x00080000) == 0x00080000,
+ ThreeZero = (response & 0x00040000) == 0x00040000,
+ TwoNine = (response & 0x00020000) == 0x00020000,
+ TwoEight = (response & 0x00010000) == 0x00010000,
+ TwoSeven = (response & 0x00008000) == 0x00008000,
+ TwoSix = (response & 0x00004000) == 0x00004000,
+ TwoFive = (response & 0x00002000) == 0x00002000,
+ TwoFour = (response & 0x00001000) == 0x00001000,
+ TwoThree = (response & 0x00000800) == 0x00000800,
+ TwoTwo = (response & 0x00000400) == 0x00000400,
+ TwoOne = (response & 0x00000200) == 0x00000200,
+ TwoZero = (response & 0x00000100) == 0x00000100,
+ OneSix = (response & 0x00000080) == 0x00000080
};
}
diff --git a/MMC/VendorString.cs b/MMC/VendorString.cs
index 0c2d6cd40..f4b3adfbc 100644
--- a/MMC/VendorString.cs
+++ b/MMC/VendorString.cs
@@ -39,7 +39,7 @@ namespace DiscImageChef.Decoders.MMC
switch(mmcVendorId)
{
case 0x15: return "Samsung";
- default: return $"Unknown manufacturer ID 0x{mmcVendorId:X2}";
+ default: return $"Unknown manufacturer ID 0x{mmcVendorId:X2}";
}
}
}
diff --git a/PCMCIA/CIS.cs b/PCMCIA/CIS.cs
index 9bbf5aec6..c99381e95 100644
--- a/PCMCIA/CIS.cs
+++ b/PCMCIA/CIS.cs
@@ -46,8 +46,8 @@ namespace DiscImageChef.Decoders.PCMCIA
// TODO: Handle links? Or are they removed in lower layers of the operating system drivers?
public static Tuple[] GetTuples(byte[] data)
{
- List tuples = new List();
- int position = 0;
+ List tuples = new List();
+ int position = 0;
while(position < data.Length)
{
@@ -84,25 +84,25 @@ namespace DiscImageChef.Decoders.PCMCIA
{
if((data?.Length - 2) % 6 != 0) return null;
- DeviceGeometryTuple tuple = new DeviceGeometryTuple();
+ DeviceGeometryTuple tuple = new DeviceGeometryTuple();
List geometries = new List();
for(int position = 2; position < data.Length; position += 6)
{
DeviceGeometry geometry = new DeviceGeometry
{
- CardInterface = data[position],
+ CardInterface = data[position],
EraseBlockSize = data[position + 1],
- ReadBlockSize = data[position + 2],
+ ReadBlockSize = data[position + 2],
WriteBlockSize = data[position + 3],
- Partitions = data[position + 4],
- Interleaving = data[position + 5]
+ Partitions = data[position + 4],
+ Interleaving = data[position + 5]
};
geometries.Add(geometry);
}
- tuple.Code = (TupleCodes)data[0];
- tuple.Link = data[1];
+ tuple.Code = (TupleCodes)data[0];
+ tuple.Link = data[1];
tuple.Geometries = geometries.ToArray();
return tuple;
@@ -128,7 +128,7 @@ namespace DiscImageChef.Decoders.PCMCIA
(1 << (geometry.WriteBlockSize - 1)) * (1 << (geometry.Interleaving - 1))).AppendLine();
sb.AppendFormat("\t\tPartition alignment = {0} bytes",
(1 << (geometry.EraseBlockSize - 1)) * (1 << (geometry.Interleaving - 1)) *
- (1 << (geometry.Partitions - 1))).AppendLine();
+ (1 << (geometry.Partitions - 1))).AppendLine();
}
return sb.ToString();
@@ -159,10 +159,10 @@ namespace DiscImageChef.Decoders.PCMCIA
return new ManufacturerIdentificationTuple
{
- Code = (TupleCodes)data[0],
- Link = data[1],
+ Code = (TupleCodes)data[0],
+ Link = data[1],
ManufacturerID = BitConverter.ToUInt16(data, 2),
- CardID = BitConverter.ToUInt16(data, 4)
+ CardID = BitConverter.ToUInt16(data, 4)
};
}
@@ -201,15 +201,15 @@ namespace DiscImageChef.Decoders.PCMCIA
if(data.Length < 4) return null;
- List buffer = new List();
- List strings = null;
- bool firstString = false;
- bool secondString = false;
+ List buffer = new List();
+ List strings = null;
+ bool firstString = false;
+ bool secondString = false;
Level1VersionTuple tuple = new Level1VersionTuple
{
- Code = (TupleCodes)data[0],
- Link = data[1],
+ Code = (TupleCodes)data[0],
+ Link = data[1],
MajorVersion = data[2],
MinorVersion = data[3]
};
@@ -225,8 +225,8 @@ namespace DiscImageChef.Decoders.PCMCIA
if(!firstString)
{
tuple.Manufacturer = StringHandlers.CToString(buffer.ToArray());
- buffer = new List();
- firstString = true;
+ buffer = new List();
+ firstString = true;
continue;
}
@@ -234,8 +234,8 @@ namespace DiscImageChef.Decoders.PCMCIA
if(!secondString)
{
tuple.Product = StringHandlers.CToString(buffer.ToArray());
- buffer = new List();
- firstString = true;
+ buffer = new List();
+ firstString = true;
continue;
}
diff --git a/PCMCIA/Enums.cs b/PCMCIA/Enums.cs
index 0e67fc562..aedf592b0 100644
--- a/PCMCIA/Enums.cs
+++ b/PCMCIA/Enums.cs
@@ -279,18 +279,18 @@ namespace DiscImageChef.Decoders.PCMCIA
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum FunctionCodes : byte
{
- MultiFunction = 0x00,
- Memory = 0x01,
- Serial = 0x02,
- Parallel = 0x03,
- FixedDisk = 0x04,
- Video = 0x05,
- Network = 0x06,
- AIMS = 0x07,
- SCSI = 0x08,
- Security = 0x09,
- Instrument = 0x0A,
+ MultiFunction = 0x00,
+ Memory = 0x01,
+ Serial = 0x02,
+ Parallel = 0x03,
+ FixedDisk = 0x04,
+ Video = 0x05,
+ Network = 0x06,
+ AIMS = 0x07,
+ SCSI = 0x08,
+ Security = 0x09,
+ Instrument = 0x0A,
HighSpeedSerial = 0x0B,
- VendorSpecific = 0xFE
+ VendorSpecific = 0xFE
}
}
\ No newline at end of file
diff --git a/PCMCIA/Types.cs b/PCMCIA/Types.cs
index 3e7d93dfe..f3d31edc6 100644
--- a/PCMCIA/Types.cs
+++ b/PCMCIA/Types.cs
@@ -43,8 +43,8 @@ namespace DiscImageChef.Decoders.PCMCIA
public class Tuple
{
public TupleCodes Code;
- public byte Link;
- public byte[] Data;
+ public byte Link;
+ public byte[] Data;
}
///
diff --git a/PCMCIA/VendorCode.cs b/PCMCIA/VendorCode.cs
index 364b8a41f..5de2b3560 100644
--- a/PCMCIA/VendorCode.cs
+++ b/PCMCIA/VendorCode.cs
@@ -42,130 +42,130 @@ namespace DiscImageChef.Decoders.PCMCIA
switch(id)
{
#region JEDEC
- case 0x01: return "AMD";
- case 0x02: return "AMI";
- case 0x83: return "Fairchild";
- case 0x04: return "Fujitsu";
- case 0x85: return "GTE";
- case 0x86: return "Harris";
- case 0x07: return "Hitachi";
- case 0x08: return "Inmos";
- case 0x89: return "Intel";
- case 0x8A: return "I.T.T.";
- case 0x0B: return "Intersil";
- case 0x8C: return "Monolithic Memories";
- case 0x0D: return "Mostek";
- case 0x0E: return "Freescale";
- case 0x8F: return "National";
- case 0x10: return "NEC";
- case 0x91: return "RCA";
- case 0x92: return "Raytheon";
- case 0x13: return "Conexant";
- case 0x94: return "Seeq";
- case 0x15: return "NXP";
- case 0x16: return "Synertek";
- case 0x97: return "Texas Instruments";
- case 0x98: return "Toshiba";
- case 0x19: return "Xicor";
- case 0x1A: return "Zilog";
- case 0x9B: return "Eurotechnique";
- case 0x1C: return "Mitsubishi2";
- case 0x9D: return "Lucent";
- case 0x9E: return "Exel";
- case 0x1F: return "Atmel";
- case 0x20: return "SGS/Thomson";
- case 0xA1: return "Lattice Semiconductor";
- case 0xA2: return "NCR";
- case 0x23: return "Wafer Scale Integration";
- case 0xA4: return "International Business Machines";
- case 0x25: return "Tristar";
- case 0x26: return "Visic";
- case 0xA7: return "International CMOS Technology";
- case 0xA8: return "SSSI";
- case 0x29: return "Microchip Technology";
- case 0x2A: return "Ricoh";
- case 0xAB: return "VLSI";
- case 0x2C: return "Micron Technology";
- case 0xAD: return "Hynix Semiconductor";
- case 0xAE: return "OKI Semiconductor";
- case 0x2F: return "ACTEL";
- case 0xB0: return "Sharp";
- case 0x31: return "Catalyst";
- case 0x32: return "Panasonic";
- case 0xB3: return "IDT";
- case 0x34: return "Cypress";
- case 0xB5: return "Digital Equipment Corporation";
- case 0xB6: return "LSI Logic";
- case 0x37: return "Zarlink";
- case 0x38: return "UTMC";
- case 0xB9: return "Thinking Machine";
- case 0xBA: return "Thomson CSF";
- case 0x3B: return "Integrated CMOS";
- case 0xBC: return "Honeywell";
- case 0x3D: return "Tektronix";
- case 0x3E: return "Oracle Corporation";
- case 0xBF: return "Silicon Storage Technology";
- case 0x40: return "ProMos";
- case 0xC1: return "Infineon";
- case 0xC2: return "Macronix";
- case 0x43: return "Xerox";
- case 0xC4: return "Plus Logic";
- case 0x45: return "SanDisk Corporation";
- case 0x46: return "Elan Circuit Technology";
- case 0xC7: return "European Silicon";
- case 0xC8: return "Apple";
- case 0x49: return "Xilinx";
- case 0x4A: return "Compaq";
- case 0xCB: return "Protocol Engines";
- case 0x4C: return "SCI";
- case 0xCD: return "Seiko Instruments";
- case 0xCE: return "Samsung";
- case 0x4F: return "I3 Design System";
- case 0xD0: return "Klic";
- case 0x51: return "Crosspoint Solutions";
- case 0x52: return "Alliance Semiconductor";
- case 0xD3: return "Tandem";
- case 0x54: return "Hewlett-Packard";
- case 0xD5: return "Integrated Silicon Solutions";
- case 0xD6: return "Brooktree";
- case 0x57: return "New Media";
- case 0x58: return "MHS Electronic";
- case 0xD9: return "Performance Semiconductors";
- case 0xDA: return "Winbond Electronic";
- case 0x5B: return "Kawasaki Steel";
- case 0x5D: return "TECMAR";
- case 0x5E: return "Exar";
- case 0xDF: return "PCMCIA";
- case 0xE0: return "LG Semiconductor";
- case 0x61: return "Northern Telecom";
- case 0x62: return "Sanyo2";
- case 0xE3: return "Array Microsystems";
- case 0x64: return "Crystal Semiconductor";
- case 0xE5: return "Analog Devices";
- case 0xE6: return "PMC-Sierra";
- case 0x67: return "Asparix";
- case 0x68: return "Convex Computer";
- case 0xE9: return "Nimbus Technology";
- case 0x6B: return "Transwitch";
- case 0xEC: return "Micronas";
- case 0x6D: return "Canon";
- case 0x6E: return "Altera";
- case 0xEF: return "NEXCOM";
- case 0x70: return "Qualcomm";
- case 0xF1: return "Sony";
- case 0xF2: return "Cray Research";
- case 0x73: return "AMS";
- case 0xF4: return "Vitesse";
- case 0x75: return "Aster Electronics";
- case 0x76: return "Bay Networks";
- case 0xF7: return "Zentrum";
- case 0xF8: return "TRW";
- case 0x79: return "Thesys";
- case 0x7A: return "Solbourne Computer";
- case 0xFB: return "Allied-Signal";
- case 0x7C: return "Dialog Semiconductor";
- case 0xFD: return "Media Vision";
- case 0xFE: return "Numonyx Corporation";
+ case 0x01: return "AMD";
+ case 0x02: return "AMI";
+ case 0x83: return "Fairchild";
+ case 0x04: return "Fujitsu";
+ case 0x85: return "GTE";
+ case 0x86: return "Harris";
+ case 0x07: return "Hitachi";
+ case 0x08: return "Inmos";
+ case 0x89: return "Intel";
+ case 0x8A: return "I.T.T.";
+ case 0x0B: return "Intersil";
+ case 0x8C: return "Monolithic Memories";
+ case 0x0D: return "Mostek";
+ case 0x0E: return "Freescale";
+ case 0x8F: return "National";
+ case 0x10: return "NEC";
+ case 0x91: return "RCA";
+ case 0x92: return "Raytheon";
+ case 0x13: return "Conexant";
+ case 0x94: return "Seeq";
+ case 0x15: return "NXP";
+ case 0x16: return "Synertek";
+ case 0x97: return "Texas Instruments";
+ case 0x98: return "Toshiba";
+ case 0x19: return "Xicor";
+ case 0x1A: return "Zilog";
+ case 0x9B: return "Eurotechnique";
+ case 0x1C: return "Mitsubishi2";
+ case 0x9D: return "Lucent";
+ case 0x9E: return "Exel";
+ case 0x1F: return "Atmel";
+ case 0x20: return "SGS/Thomson";
+ case 0xA1: return "Lattice Semiconductor";
+ case 0xA2: return "NCR";
+ case 0x23: return "Wafer Scale Integration";
+ case 0xA4: return "International Business Machines";
+ case 0x25: return "Tristar";
+ case 0x26: return "Visic";
+ case 0xA7: return "International CMOS Technology";
+ case 0xA8: return "SSSI";
+ case 0x29: return "Microchip Technology";
+ case 0x2A: return "Ricoh";
+ case 0xAB: return "VLSI";
+ case 0x2C: return "Micron Technology";
+ case 0xAD: return "Hynix Semiconductor";
+ case 0xAE: return "OKI Semiconductor";
+ case 0x2F: return "ACTEL";
+ case 0xB0: return "Sharp";
+ case 0x31: return "Catalyst";
+ case 0x32: return "Panasonic";
+ case 0xB3: return "IDT";
+ case 0x34: return "Cypress";
+ case 0xB5: return "Digital Equipment Corporation";
+ case 0xB6: return "LSI Logic";
+ case 0x37: return "Zarlink";
+ case 0x38: return "UTMC";
+ case 0xB9: return "Thinking Machine";
+ case 0xBA: return "Thomson CSF";
+ case 0x3B: return "Integrated CMOS";
+ case 0xBC: return "Honeywell";
+ case 0x3D: return "Tektronix";
+ case 0x3E: return "Oracle Corporation";
+ case 0xBF: return "Silicon Storage Technology";
+ case 0x40: return "ProMos";
+ case 0xC1: return "Infineon";
+ case 0xC2: return "Macronix";
+ case 0x43: return "Xerox";
+ case 0xC4: return "Plus Logic";
+ case 0x45: return "SanDisk Corporation";
+ case 0x46: return "Elan Circuit Technology";
+ case 0xC7: return "European Silicon";
+ case 0xC8: return "Apple";
+ case 0x49: return "Xilinx";
+ case 0x4A: return "Compaq";
+ case 0xCB: return "Protocol Engines";
+ case 0x4C: return "SCI";
+ case 0xCD: return "Seiko Instruments";
+ case 0xCE: return "Samsung";
+ case 0x4F: return "I3 Design System";
+ case 0xD0: return "Klic";
+ case 0x51: return "Crosspoint Solutions";
+ case 0x52: return "Alliance Semiconductor";
+ case 0xD3: return "Tandem";
+ case 0x54: return "Hewlett-Packard";
+ case 0xD5: return "Integrated Silicon Solutions";
+ case 0xD6: return "Brooktree";
+ case 0x57: return "New Media";
+ case 0x58: return "MHS Electronic";
+ case 0xD9: return "Performance Semiconductors";
+ case 0xDA: return "Winbond Electronic";
+ case 0x5B: return "Kawasaki Steel";
+ case 0x5D: return "TECMAR";
+ case 0x5E: return "Exar";
+ case 0xDF: return "PCMCIA";
+ case 0xE0: return "LG Semiconductor";
+ case 0x61: return "Northern Telecom";
+ case 0x62: return "Sanyo2";
+ case 0xE3: return "Array Microsystems";
+ case 0x64: return "Crystal Semiconductor";
+ case 0xE5: return "Analog Devices";
+ case 0xE6: return "PMC-Sierra";
+ case 0x67: return "Asparix";
+ case 0x68: return "Convex Computer";
+ case 0xE9: return "Nimbus Technology";
+ case 0x6B: return "Transwitch";
+ case 0xEC: return "Micronas";
+ case 0x6D: return "Canon";
+ case 0x6E: return "Altera";
+ case 0xEF: return "NEXCOM";
+ case 0x70: return "Qualcomm";
+ case 0xF1: return "Sony";
+ case 0xF2: return "Cray Research";
+ case 0x73: return "AMS";
+ case 0xF4: return "Vitesse";
+ case 0x75: return "Aster Electronics";
+ case 0x76: return "Bay Networks";
+ case 0xF7: return "Zentrum";
+ case 0xF8: return "TRW";
+ case 0x79: return "Thesys";
+ case 0x7A: return "Solbourne Computer";
+ case 0xFB: return "Allied-Signal";
+ case 0x7C: return "Dialog Semiconductor";
+ case 0xFD: return "Media Vision";
+ case 0xFE: return "Numonyx Corporation";
case 0x7F01: return "Cirrus Logic";
case 0x7F02: return "National Instruments";
case 0x7F04: return "Alcatel Mietec";
@@ -356,7 +356,7 @@ namespace DiscImageChef.Decoders.PCMCIA
case 0xC020: return "NextCom K.K.";
case 0xC250: return "EMTAC Technology Corporation";
case 0xD601: return "Elsa";
- default: return $"Unknown vendor id 0x{id:X4}";
+ default: return $"Unknown vendor id 0x{id:X4}";
}
}
}
diff --git a/SCSI/DiscStructureCapabilities.cs b/SCSI/DiscStructureCapabilities.cs
index e54526626..7fd4c4868 100644
--- a/SCSI/DiscStructureCapabilities.cs
+++ b/SCSI/DiscStructureCapabilities.cs
@@ -72,8 +72,8 @@ namespace DiscImageChef.Decoders.SCSI
Capability cap = new Capability
{
FormatCode = response[offset],
- SDS = (response[offset + 1] & 0x80) == 0x80,
- RDS = (response[offset + 1] & 0x40) == 0x40
+ SDS = (response[offset + 1] & 0x80) == 0x80,
+ RDS = (response[offset + 1] & 0x40) == 0x40
};
caps.Add(cap);
offset += 4;
diff --git a/SCSI/EVPD.cs b/SCSI/EVPD.cs
index cb0b0c1f5..953c96285 100644
--- a/SCSI/EVPD.cs
+++ b/SCSI/EVPD.cs
@@ -150,14 +150,14 @@ namespace DiscImageChef.Decoders.SCSI
Page_81 decoded = new Page_81
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- Current = (ScsiDefinitions)(pageResponse[4] & 0x7F),
- Default = (ScsiDefinitions)(pageResponse[5] & 0x7F)
+ PageLength = (byte)(pageResponse[3] + 4),
+ Current = (ScsiDefinitions)(pageResponse[4] & 0x7F),
+ Default = (ScsiDefinitions)(pageResponse[5] & 0x7F)
};
- int position = 6;
+ int position = 6;
List definitions = new List();
while(position < pageResponse.Length)
@@ -182,11 +182,11 @@ namespace DiscImageChef.Decoders.SCSI
switch(definition)
{
case ScsiDefinitions.Current: return "";
- case ScsiDefinitions.CCS: return "CCS";
- case ScsiDefinitions.SCSI1: return "SCSI-1";
- case ScsiDefinitions.SCSI2: return "SCSI-2";
- case ScsiDefinitions.SCSI3: return "SCSI-3";
- default: return $"Unknown definition code {(byte)definition}";
+ case ScsiDefinitions.CCS: return "CCS";
+ case ScsiDefinitions.SCSI1: return "SCSI-1";
+ case ScsiDefinitions.SCSI2: return "SCSI-2";
+ case ScsiDefinitions.SCSI3: return "SCSI-3";
+ default: return $"Unknown definition code {(byte)definition}";
}
}
@@ -194,8 +194,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_81 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_81 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Implemented operating definitions:");
@@ -385,12 +385,12 @@ namespace DiscImageChef.Decoders.SCSI
Page_83 decoded = new Page_83
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4)
+ PageLength = (byte)(pageResponse[3] + 4)
};
- int position = 4;
+ int position = 4;
List descriptors = new List();
while(position < pageResponse.Length)
@@ -398,11 +398,11 @@ namespace DiscImageChef.Decoders.SCSI
IdentificatonDescriptor descriptor = new IdentificatonDescriptor
{
ProtocolIdentifier = (ProtocolIdentifiers)((pageResponse[position] & 0xF0) >> 4),
- CodeSet = (IdentificationCodeSet)(pageResponse[position] & 0x0F),
- PIV = (pageResponse[position + 1] & 0x80) == 0x80,
- Association = (IdentificationAssociation)((pageResponse[position + 1] & 0x30) >> 4),
- Type = (IdentificationTypes)(pageResponse[position + 1] & 0x0F),
- Length = pageResponse[position + 3]
+ CodeSet = (IdentificationCodeSet)(pageResponse[position] & 0x0F),
+ PIV = (pageResponse[position + 1] & 0x80) == 0x80,
+ Association = (IdentificationAssociation)((pageResponse[position + 1] & 0x30) >> 4),
+ Type = (IdentificationTypes)(pageResponse[position + 1] & 0x0F),
+ Length = pageResponse[position + 3]
};
descriptor.Binary = new byte[descriptor.Length];
if(descriptor.Length + position + 4 >= pageResponse.Length)
@@ -439,8 +439,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_83 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_83 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Device identification:");
@@ -642,69 +642,69 @@ namespace DiscImageChef.Decoders.SCSI
{
case ProtocolIdentifiers.ADT:
sb
- .AppendFormat("\tProtocol (Automation/Drive Interface Transport) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (Automation/Drive Interface Transport) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.ATA:
sb
- .AppendFormat("\tProtocol (ATA/ATAPI) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (ATA/ATAPI) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.FibreChannel:
sb
- .AppendFormat("\tProtocol (Fibre Channel) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (Fibre Channel) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.Firewire:
sb
- .AppendFormat("\tProtocol (IEEE 1394) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (IEEE 1394) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.iSCSI:
sb
- .AppendFormat("\tProtocol (Internet SCSI) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (Internet SCSI) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.NoProtocol:
sb
- .AppendFormat("\tProtocol (unknown) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (unknown) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.PCIe:
sb
- .AppendFormat("\tProtocol (PCI Express) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (PCI Express) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.RDMAP:
sb
- .AppendFormat("\tProtocol (SCSI Remote Direct Memory Access) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (SCSI Remote Direct Memory Access) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.SAS:
sb
- .AppendFormat("\tProtocol (Serial Attachment SCSI) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (Serial Attachment SCSI) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.SCSI:
sb
- .AppendFormat("\tProtocol (Parallel SCSI) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (Parallel SCSI) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.SSA:
sb
- .AppendFormat("\tProtocol (SSA) specific descriptor with unknown format (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (SSA) specific descriptor with unknown format (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
case ProtocolIdentifiers.SCSIe:
sb.AppendFormat("\tProtocol (SCSIe) specific descriptor: Routing ID is {0}",
@@ -712,15 +712,15 @@ namespace DiscImageChef.Decoders.SCSI
break;
case ProtocolIdentifiers.UAS:
sb
- .AppendFormat("\tProtocol (UAS) specific descriptor: USB address {0} interface {1}",
- descriptor.Binary[0] & 0x7F, descriptor.Binary[2]).AppendLine();
+ .AppendFormat("\tProtocol (UAS) specific descriptor: USB address {0} interface {1}",
+ descriptor.Binary[0] & 0x7F, descriptor.Binary[2]).AppendLine();
break;
default:
sb
- .AppendFormat("\tProtocol (unknown code {0}) specific descriptor with unknown format (hex): {1}",
- (byte)descriptor.ProtocolIdentifier,
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
- .AppendLine();
+ .AppendFormat("\tProtocol (unknown code {0}) specific descriptor with unknown format (hex): {1}",
+ (byte)descriptor.ProtocolIdentifier,
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40))
+ .AppendLine();
break;
}
}
@@ -741,9 +741,9 @@ namespace DiscImageChef.Decoders.SCSI
break;
default:
sb
- .AppendFormat("Inquiry descriptor type {2} contains unknown kind {1} of data (hex): {0}",
- PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40),
- (byte)descriptor.CodeSet, (byte)descriptor.Type).AppendLine();
+ .AppendFormat("Inquiry descriptor type {2} contains unknown kind {1} of data (hex): {0}",
+ PrintHex.ByteArrayToHexArrayString(descriptor.Binary, 40),
+ (byte)descriptor.CodeSet, (byte)descriptor.Type).AppendLine();
break;
}
@@ -802,12 +802,12 @@ namespace DiscImageChef.Decoders.SCSI
Page_84 decoded = new Page_84
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4)
+ PageLength = (byte)(pageResponse[3] + 4)
};
- int position = 4;
+ int position = 4;
List identifiers = new List();
while(position < pageResponse.Length)
@@ -832,8 +832,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_84 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_84 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Software Interface Identifiers:");
@@ -859,13 +859,13 @@ namespace DiscImageChef.Decoders.SCSI
#region EVPD Page 0x85: Management Network Addresses page
public enum NetworkServiceTypes : byte
{
- Unspecified = 0,
- StorageConf = 1,
- Diagnostics = 2,
- Status = 3,
- Logging = 4,
- CodeDownload = 5,
- CopyService = 6,
+ Unspecified = 0,
+ StorageConf = 1,
+ Diagnostics = 2,
+ Status = 3,
+ Logging = 4,
+ CodeDownload = 5,
+ CopyService = 6,
Administrative = 7
}
@@ -927,12 +927,12 @@ namespace DiscImageChef.Decoders.SCSI
Page_85 decoded = new Page_85
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (ushort)((pageResponse[2] << 8) + pageResponse[3] + 4)
+ PageLength = (ushort)((pageResponse[2] << 8) + pageResponse[3] + 4)
};
- int position = 4;
+ int position = 4;
List descriptors = new List();
while(position < pageResponse.Length)
@@ -940,8 +940,8 @@ namespace DiscImageChef.Decoders.SCSI
NetworkDescriptor descriptor = new NetworkDescriptor
{
Association = (IdentificationAssociation)((pageResponse[position] & 0x60) >> 5),
- Type = (NetworkServiceTypes)(pageResponse[position] & 0x1F),
- Length = (ushort)((pageResponse[position + 2] << 8) + pageResponse[position + 3])
+ Type = (NetworkServiceTypes)(pageResponse[position] & 0x1F),
+ Length = (ushort)((pageResponse[position + 2] << 8) + pageResponse[position + 3])
};
descriptor.Address = new byte[descriptor.Length];
Array.Copy(pageResponse, position + 4, descriptor.Address, 0, descriptor.Length);
@@ -964,8 +964,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_85 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_85 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Management Network Addresses:");
@@ -1183,36 +1183,36 @@ namespace DiscImageChef.Decoders.SCSI
return new Page_86
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- ActivateMicrocode = (byte)((pageResponse[4] & 0xC0) >> 6),
- SPT = (byte)((pageResponse[4] & 0x38) >> 3),
- GRD_CHK = (pageResponse[4] & 0x04) == 0x04,
- APP_CHK = (pageResponse[4] & 0x02) == 0x02,
- REF_CHK = (pageResponse[4] & 0x01) == 0x01,
- UASK_SUP = (pageResponse[5] & 0x20) == 0x20,
- GROUP_SUP = (pageResponse[5] & 0x10) == 0x10,
- PRIOR_SUP = (pageResponse[5] & 0x08) == 0x08,
- HEADSUP = (pageResponse[5] & 0x04) == 0x04,
- ORDSUP = (pageResponse[5] & 0x02) == 0x02,
- SIMPSUP = (pageResponse[5] & 0x01) == 0x01,
- WU_SUP = (pageResponse[6] & 0x08) == 0x08,
- CRD_SUP = (pageResponse[6] & 0x04) == 0x04,
- NV_SUP = (pageResponse[6] & 0x02) == 0x02,
- V_SUP = (pageResponse[6] & 0x01) == 0x01,
- NO_PI_CHK = (pageResponse[7] & 0x20) == 0x20,
- P_I_I_SUP = (pageResponse[7] & 0x10) == 0x10,
- LUICLR = (pageResponse[7] & 0x01) == 0x01,
- R_SUP = (pageResponse[8] & 0x10) == 0x10,
- HSSRELEF = (pageResponse[8] & 0x02) == 0x02,
- CBCS = (pageResponse[8] & 0x01) == 0x01,
- Nexus = (byte)(pageResponse[9] & 0x0F),
- ExtendedTestMinutes = (ushort)((pageResponse[10] << 8) + pageResponse[11]),
- POA_SUP = (pageResponse[12] & 0x80) == 0x80,
- HRA_SUP = (pageResponse[12] & 0x40) == 0x40,
- VSA_SUP = (pageResponse[12] & 0x20) == 0x20,
- MaximumSenseLength = pageResponse[13]
+ PageLength = (byte)(pageResponse[3] + 4),
+ ActivateMicrocode = (byte)((pageResponse[4] & 0xC0) >> 6),
+ SPT = (byte)((pageResponse[4] & 0x38) >> 3),
+ GRD_CHK = (pageResponse[4] & 0x04) == 0x04,
+ APP_CHK = (pageResponse[4] & 0x02) == 0x02,
+ REF_CHK = (pageResponse[4] & 0x01) == 0x01,
+ UASK_SUP = (pageResponse[5] & 0x20) == 0x20,
+ GROUP_SUP = (pageResponse[5] & 0x10) == 0x10,
+ PRIOR_SUP = (pageResponse[5] & 0x08) == 0x08,
+ HEADSUP = (pageResponse[5] & 0x04) == 0x04,
+ ORDSUP = (pageResponse[5] & 0x02) == 0x02,
+ SIMPSUP = (pageResponse[5] & 0x01) == 0x01,
+ WU_SUP = (pageResponse[6] & 0x08) == 0x08,
+ CRD_SUP = (pageResponse[6] & 0x04) == 0x04,
+ NV_SUP = (pageResponse[6] & 0x02) == 0x02,
+ V_SUP = (pageResponse[6] & 0x01) == 0x01,
+ NO_PI_CHK = (pageResponse[7] & 0x20) == 0x20,
+ P_I_I_SUP = (pageResponse[7] & 0x10) == 0x10,
+ LUICLR = (pageResponse[7] & 0x01) == 0x01,
+ R_SUP = (pageResponse[8] & 0x10) == 0x10,
+ HSSRELEF = (pageResponse[8] & 0x02) == 0x02,
+ CBCS = (pageResponse[8] & 0x01) == 0x01,
+ Nexus = (byte)(pageResponse[9] & 0x0F),
+ ExtendedTestMinutes = (ushort)((pageResponse[10] << 8) + pageResponse[11]),
+ POA_SUP = (pageResponse[12] & 0x80) == 0x80,
+ HRA_SUP = (pageResponse[12] & 0x40) == 0x40,
+ VSA_SUP = (pageResponse[12] & 0x20) == 0x20,
+ MaximumSenseLength = pageResponse[13]
};
}
@@ -1225,8 +1225,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_86 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_86 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Extended INQUIRY Data:");
@@ -1364,20 +1364,20 @@ namespace DiscImageChef.Decoders.SCSI
Page_89 decoded = new Page_89
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
- PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (ushort)((pageResponse[2] << 8) + pageResponse[3] + 4),
- VendorIdentification = new byte[8],
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
+ PageLength = (ushort)((pageResponse[2] << 8) + pageResponse[3] + 4),
+ VendorIdentification = new byte[8],
ProductIdentification = new byte[16],
- ProductRevisionLevel = new byte[4],
- Signature = new byte[20],
- IdentifyData = new byte[512]
+ ProductRevisionLevel = new byte[4],
+ Signature = new byte[20],
+ IdentifyData = new byte[512]
};
- Array.Copy(pageResponse, 8, decoded.VendorIdentification, 0, 8);
+ Array.Copy(pageResponse, 8, decoded.VendorIdentification, 0, 8);
Array.Copy(pageResponse, 8, decoded.ProductIdentification, 0, 16);
- Array.Copy(pageResponse, 8, decoded.ProductRevisionLevel, 0, 4);
- Array.Copy(pageResponse, 8, decoded.Signature, 0, 20);
+ Array.Copy(pageResponse, 8, decoded.ProductRevisionLevel, 0, 4);
+ Array.Copy(pageResponse, 8, decoded.Signature, 0, 20);
decoded.CommandCode = pageResponse[56];
Array.Copy(pageResponse, 8, decoded.IdentifyData, 0, 512);
@@ -1394,8 +1394,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_89 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_89 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI to ATA Translation Layer Data:");
@@ -1418,6 +1418,7 @@ namespace DiscImageChef.Decoders.SCSI
sb.AppendFormat("\tDevice responded to ATA command {0:X2}h", page.CommandCode).AppendLine();
break;
}
+
switch(page.Signature[0])
{
case 0x00:
@@ -1494,11 +1495,11 @@ namespace DiscImageChef.Decoders.SCSI
Page_C0_Quantum decoded = new Page_C0_Quantum
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
- PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
+ PageLength = (byte)(pageResponse[3] + 4),
ServoFirmwareChecksum = (ushort)((pageResponse[4] << 8) + pageResponse[5]),
- ServoEEPROMChecksum = (ushort)((pageResponse[6] << 8) + pageResponse[7]),
+ ServoEEPROMChecksum = (ushort)((pageResponse[6] << 8) + pageResponse[7]),
ReadWriteFirmwareChecksum =
(uint)((pageResponse[8] << 24) + (pageResponse[9] << 16) + (pageResponse[10] << 8) +
pageResponse[11]),
@@ -1520,7 +1521,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Page_C0_Quantum page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Quantum Firmware Build Information page:");
@@ -1575,19 +1576,19 @@ namespace DiscImageChef.Decoders.SCSI
Page_C0_C1_Certance decoded = new Page_C0_C1_Certance
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- Component = new byte[26],
- Version = new byte[19],
- Date = new byte[24],
- Variant = new byte[23]
+ PageLength = (byte)(pageResponse[3] + 4),
+ Component = new byte[26],
+ Version = new byte[19],
+ Date = new byte[24],
+ Variant = new byte[23]
};
- Array.Copy(pageResponse, 4, decoded.Component, 0, 26);
- Array.Copy(pageResponse, 30, decoded.Version, 0, 19);
- Array.Copy(pageResponse, 49, decoded.Date, 0, 24);
- Array.Copy(pageResponse, 73, decoded.Variant, 0, 23);
+ Array.Copy(pageResponse, 4, decoded.Component, 0, 26);
+ Array.Copy(pageResponse, 30, decoded.Version, 0, 19);
+ Array.Copy(pageResponse, 49, decoded.Date, 0, 24);
+ Array.Copy(pageResponse, 73, decoded.Variant, 0, 23);
return decoded;
}
@@ -1602,7 +1603,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Page_C0_C1_Certance page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Certance Drive Component Revision Levels page:");
@@ -1654,10 +1655,10 @@ namespace DiscImageChef.Decoders.SCSI
Page_C2_C3_C4_C5_C6_Certance decoded = new Page_C2_C3_C4_C5_C6_Certance
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- SerialNumber = new byte[12]
+ PageLength = (byte)(pageResponse[3] + 4),
+ SerialNumber = new byte[12]
};
Array.Copy(pageResponse, 4, decoded.SerialNumber, 0, 12);
@@ -1675,7 +1676,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Page_C2_C3_C4_C5_C6_Certance page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Certance Drive Component Serial Number page:");
@@ -1806,22 +1807,22 @@ namespace DiscImageChef.Decoders.SCSI
Page_DF_Certance decoded = new Page_DF_Certance
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- CmdFwd = (byte)((pageResponse[5] & 0xC0) >> 5),
- Alerts = (pageResponse[5] & 0x20) == 0x20,
- NoRemov = (pageResponse[5] & 0x08) == 0x08,
- UnitRsvd = (pageResponse[5] & 0x04) == 0x04,
- Clean = (pageResponse[5] & 0x01) == 0x01,
- Threaded = (pageResponse[6] & 0x10) == 0x10,
- Lun1Cmd = (pageResponse[6] & 0x08) == 0x08,
- AutoloadMode = (byte)(pageResponse[6] & 0x07),
- CartridgeType = pageResponse[8],
- CartridgeFormat = pageResponse[9],
- CartridgeCapacity = (ushort)((pageResponse[10] << 8) + pageResponse[11] + 4),
- PortATransportType = pageResponse[12],
- PortASelectionID = pageResponse[15],
+ PageLength = (byte)(pageResponse[3] + 4),
+ CmdFwd = (byte)((pageResponse[5] & 0xC0) >> 5),
+ Alerts = (pageResponse[5] & 0x20) == 0x20,
+ NoRemov = (pageResponse[5] & 0x08) == 0x08,
+ UnitRsvd = (pageResponse[5] & 0x04) == 0x04,
+ Clean = (pageResponse[5] & 0x01) == 0x01,
+ Threaded = (pageResponse[6] & 0x10) == 0x10,
+ Lun1Cmd = (pageResponse[6] & 0x08) == 0x08,
+ AutoloadMode = (byte)(pageResponse[6] & 0x07),
+ CartridgeType = pageResponse[8],
+ CartridgeFormat = pageResponse[9],
+ CartridgeCapacity = (ushort)((pageResponse[10] << 8) + pageResponse[11] + 4),
+ PortATransportType = pageResponse[12],
+ PortASelectionID = pageResponse[15],
OperatingHours =
(uint)((pageResponse[20] << 24) + (pageResponse[21] << 16) + (pageResponse[22] << 8) +
pageResponse[23]),
@@ -1846,7 +1847,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Page_DF_Certance page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Certance drive status page:");
@@ -1999,15 +2000,15 @@ namespace DiscImageChef.Decoders.SCSI
Page_C0_IBM decoded = new Page_C0_IBM
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- CodeName = new byte[12],
- Date = new byte[8]
+ PageLength = (byte)(pageResponse[3] + 4),
+ CodeName = new byte[12],
+ Date = new byte[8]
};
- Array.Copy(pageResponse, 4, decoded.CodeName, 0, 12);
- Array.Copy(pageResponse, 23, decoded.Date, 0, 8);
+ Array.Copy(pageResponse, 4, decoded.CodeName, 0, 12);
+ Array.Copy(pageResponse, 23, decoded.Date, 0, 8);
return decoded;
}
@@ -2021,8 +2022,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_C0_IBM page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_C0_IBM page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("IBM Drive Component Revision Levels page:");
@@ -2070,15 +2071,15 @@ namespace DiscImageChef.Decoders.SCSI
Page_C1_IBM decoded = new Page_C1_IBM
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- ManufacturingSerial = new byte[12],
- ReportedSerial = new byte[12]
+ PageLength = (byte)(pageResponse[3] + 4),
+ ManufacturingSerial = new byte[12],
+ ReportedSerial = new byte[12]
};
- Array.Copy(pageResponse, 4, decoded.ManufacturingSerial, 0, 12);
- Array.Copy(pageResponse, 16, decoded.ReportedSerial, 0, 12);
+ Array.Copy(pageResponse, 4, decoded.ManufacturingSerial, 0, 12);
+ Array.Copy(pageResponse, 16, decoded.ReportedSerial, 0, 12);
return decoded;
}
@@ -2092,8 +2093,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_C1_IBM page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_C1_IBM page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("IBM Drive Serial Numbers page:");
@@ -2143,11 +2144,11 @@ namespace DiscImageChef.Decoders.SCSI
Page_B0 decoded = new Page_B0
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (ushort)((pageResponse[2] << 8) + pageResponse[3] + 4),
- TSMC = (pageResponse[4] & 0x02) == 0x02,
- WORM = (pageResponse[4] & 0x01) == 0x01
+ PageLength = (ushort)((pageResponse[2] << 8) + pageResponse[3] + 4),
+ TSMC = (pageResponse[4] & 0x02) == 0x02,
+ WORM = (pageResponse[4] & 0x01) == 0x01
};
return decoded;
@@ -2162,8 +2163,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- Page_B0 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ Page_B0 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Sequential-access Device Capabilities:");
@@ -2226,8 +2227,8 @@ namespace DiscImageChef.Decoders.SCSI
if(page.Length != page[3] + 4) return null;
- byte[] element = new byte[page.Length - 4];
- StringBuilder sb = new StringBuilder();
+ byte[] element = new byte[page.Length - 4];
+ StringBuilder sb = new StringBuilder();
foreach(byte b in element) sb.AppendFormat("{0:X2}", b);
return sb.ToString();
@@ -2275,23 +2276,23 @@ namespace DiscImageChef.Decoders.SCSI
Page_C0_to_C5_HP decoded = new Page_C0_to_C5_HP
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- PageCode = pageResponse[1]
+ PageLength = (byte)(pageResponse[3] + 4),
+ PageCode = pageResponse[1]
};
if(pageResponse[3] == 92 && pageResponse.Length >= 96)
{
decoded.Component = new byte[26];
- decoded.Version = new byte[19];
- decoded.Date = new byte[24];
- decoded.Variant = new byte[23];
+ decoded.Version = new byte[19];
+ decoded.Date = new byte[24];
+ decoded.Variant = new byte[23];
- Array.Copy(pageResponse, 4, decoded.Component, 0, 26);
- Array.Copy(pageResponse, 30, decoded.Version, 0, 19);
- Array.Copy(pageResponse, 49, decoded.Date, 0, 24);
- Array.Copy(pageResponse, 73, decoded.Variant, 0, 23);
+ Array.Copy(pageResponse, 4, decoded.Component, 0, 26);
+ Array.Copy(pageResponse, 30, decoded.Version, 0, 19);
+ Array.Copy(pageResponse, 49, decoded.Date, 0, 24);
+ Array.Copy(pageResponse, 73, decoded.Variant, 0, 23);
return decoded;
}
@@ -2301,38 +2302,39 @@ namespace DiscImageChef.Decoders.SCSI
List array = new List();
const string fwRegExStr =
@"Firmware Rev\s+=\s+(?\d+\.\d+)\s+Build date\s+=\s+(?(\w|\d|\s*.)*)\s*$";
- const string fwcRegExStr = @"FW_CONF\s+=\s+(?0x[0-9A-Fa-f]{8})\s*$";
+ const string fwcRegExStr = @"FW_CONF\s+=\s+(?0x[0-9A-Fa-f]{8})\s*$";
const string servoRegExStr = @"Servo\s+Rev\s+=\s+(?\d+\.\d+)\s*$";
- Regex fwRegEx = new Regex(fwRegExStr);
- Regex fwcRegEx = new Regex(fwcRegExStr);
- Regex servoRegEx = new Regex(servoRegExStr);
+ Regex fwRegEx = new Regex(fwRegExStr);
+ Regex fwcRegEx = new Regex(fwcRegExStr);
+ Regex servoRegEx = new Regex(servoRegExStr);
for(int pos = 5; pos < pageResponse.Length; pos++)
if(pageResponse[pos] == 0x00)
{
- string str = StringHandlers.CToString(array.ToArray());
- Match fwMatch = fwRegEx.Match(str);
- Match fwcMatch = fwcRegEx.Match(str);
- Match servoMatch = servoRegEx.Match(str);
+ string str = StringHandlers.CToString(array.ToArray());
+ Match fwMatch = fwRegEx.Match(str);
+ Match fwcMatch = fwcRegEx.Match(str);
+ Match servoMatch = servoRegEx.Match(str);
if(str.ToLowerInvariant().StartsWith("copyright", StringComparison.Ordinal))
decoded.Copyright = Encoding.ASCII.GetBytes(str);
else if(fwMatch.Success)
{
decoded.Component = Encoding.ASCII.GetBytes("Firmware");
- decoded.Version = Encoding.ASCII.GetBytes(fwMatch.Groups["fw"].Value);
- decoded.Date = Encoding.ASCII.GetBytes(fwMatch.Groups["date"].Value);
+ decoded.Version = Encoding.ASCII.GetBytes(fwMatch.Groups["fw"].Value);
+ decoded.Date = Encoding.ASCII.GetBytes(fwMatch.Groups["date"].Value);
}
else if(fwcMatch.Success) decoded.Variant = Encoding.ASCII.GetBytes(fwMatch.Groups["value"].Value);
else if(servoMatch.Success)
{
decoded.Component = Encoding.ASCII.GetBytes("Servo");
- decoded.Version = Encoding.ASCII.GetBytes(servoMatch.Groups["version"].Value);
+ decoded.Version = Encoding.ASCII.GetBytes(servoMatch.Groups["version"].Value);
}
array = new List();
}
- else array.Add(pageResponse[pos]);
+ else
+ array.Add(pageResponse[pos]);
return decoded;
}
@@ -2347,7 +2349,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Page_C0_to_C5_HP page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
switch(page.PageCode)
{
@@ -2424,18 +2426,18 @@ namespace DiscImageChef.Decoders.SCSI
Page_C0_Seagate decoded = new Page_C0_Seagate
{
- PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
+ PeripheralQualifier = (PeripheralQualifiers)((pageResponse[0] & 0xE0) >> 5),
PeripheralDeviceType = (PeripheralDeviceTypes)(pageResponse[0] & 0x1F),
- PageLength = (byte)(pageResponse[3] + 4),
- PageCode = pageResponse[1],
- ControllerFirmware = new byte[4],
- BootFirmware = new byte[4],
- ServoFirmware = new byte[4]
+ PageLength = (byte)(pageResponse[3] + 4),
+ PageCode = pageResponse[1],
+ ControllerFirmware = new byte[4],
+ BootFirmware = new byte[4],
+ ServoFirmware = new byte[4]
};
- Array.Copy(pageResponse, 4, decoded.ControllerFirmware, 0, 4);
- Array.Copy(pageResponse, 8, decoded.BootFirmware, 0, 4);
- Array.Copy(pageResponse, 12, decoded.ServoFirmware, 0, 4);
+ Array.Copy(pageResponse, 4, decoded.ControllerFirmware, 0, 4);
+ Array.Copy(pageResponse, 8, decoded.BootFirmware, 0, 4);
+ Array.Copy(pageResponse, 12, decoded.ServoFirmware, 0, 4);
return decoded;
}
@@ -2450,7 +2452,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Page_C0_Seagate page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Seagate Firmware Numbers page:");
diff --git a/SCSI/Inquiry.cs b/SCSI/Inquiry.cs
index be526ae1f..a70d28ac8 100644
--- a/SCSI/Inquiry.cs
+++ b/SCSI/Inquiry.cs
@@ -79,88 +79,99 @@ namespace DiscImageChef.Decoders.SCSI
if(SCSIInquiryResponse.Length >= 1)
{
- decoded.PeripheralQualifier = (byte)((SCSIInquiryResponse[0] & 0xE0) >> 5);
+ decoded.PeripheralQualifier = (byte)((SCSIInquiryResponse[0] & 0xE0) >> 5);
decoded.PeripheralDeviceType = (byte)(SCSIInquiryResponse[0] & 0x1F);
}
+
if(SCSIInquiryResponse.Length >= 2)
{
- decoded.RMB = Convert.ToBoolean(SCSIInquiryResponse[1] & 0x80);
+ decoded.RMB = Convert.ToBoolean(SCSIInquiryResponse[1] & 0x80);
decoded.DeviceTypeModifier = (byte)(SCSIInquiryResponse[1] & 0x7F);
}
+
if(SCSIInquiryResponse.Length >= 3)
{
- decoded.ISOVersion = (byte)((SCSIInquiryResponse[2] & 0xC0) >> 6);
+ decoded.ISOVersion = (byte)((SCSIInquiryResponse[2] & 0xC0) >> 6);
decoded.ECMAVersion = (byte)((SCSIInquiryResponse[2] & 0x38) >> 3);
decoded.ANSIVersion = (byte)(SCSIInquiryResponse[2] & 0x07);
}
+
if(SCSIInquiryResponse.Length >= 4)
{
- decoded.AERC = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x80);
- decoded.TrmTsk = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x40);
- decoded.NormACA = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x20);
- decoded.HiSup = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x10);
+ decoded.AERC = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x80);
+ decoded.TrmTsk = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x40);
+ decoded.NormACA = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x20);
+ decoded.HiSup = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x10);
decoded.ResponseDataFormat = (byte)(SCSIInquiryResponse[3] & 0x07);
}
+
if(SCSIInquiryResponse.Length >= 5) decoded.AdditionalLength = SCSIInquiryResponse[4];
if(SCSIInquiryResponse.Length >= 6)
{
- decoded.SCCS = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x80);
- decoded.ACC = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x40);
- decoded.TPGS = (byte)((SCSIInquiryResponse[5] & 0x30) >> 4);
- decoded.ThreePC = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x08);
+ decoded.SCCS = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x80);
+ decoded.ACC = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x40);
+ decoded.TPGS = (byte)((SCSIInquiryResponse[5] & 0x30) >> 4);
+ decoded.ThreePC = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x08);
decoded.Reserved2 = (byte)((SCSIInquiryResponse[5] & 0x06) >> 1);
- decoded.Protect = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x01);
+ decoded.Protect = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x01);
}
+
if(SCSIInquiryResponse.Length >= 7)
{
- decoded.BQue = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x80);
+ decoded.BQue = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x80);
decoded.EncServ = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x40);
- decoded.VS1 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x20);
- decoded.MultiP = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x10);
- decoded.MChngr = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x08);
+ decoded.VS1 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x20);
+ decoded.MultiP = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x10);
+ decoded.MChngr = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x08);
decoded.ACKREQQ = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x04);
- decoded.Addr32 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x02);
- decoded.Addr16 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x01);
+ decoded.Addr32 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x02);
+ decoded.Addr16 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x01);
}
+
if(SCSIInquiryResponse.Length >= 8)
{
decoded.RelAddr = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x80);
- decoded.WBus32 = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x40);
- decoded.WBus16 = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x20);
- decoded.Sync = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x10);
- decoded.Linked = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x08);
+ decoded.WBus32 = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x40);
+ decoded.WBus16 = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x20);
+ decoded.Sync = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x10);
+ decoded.Linked = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x08);
decoded.TranDis = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x04);
- decoded.CmdQue = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x02);
- decoded.SftRe = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x01);
+ decoded.CmdQue = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x02);
+ decoded.SftRe = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x01);
}
+
if(SCSIInquiryResponse.Length >= 16)
{
decoded.VendorIdentification = new byte[8];
Array.Copy(SCSIInquiryResponse, 8, decoded.VendorIdentification, 0, 8);
}
+
if(SCSIInquiryResponse.Length >= 32)
{
decoded.ProductIdentification = new byte[16];
Array.Copy(SCSIInquiryResponse, 16, decoded.ProductIdentification, 0, 16);
}
+
if(SCSIInquiryResponse.Length >= 36)
{
decoded.ProductRevisionLevel = new byte[4];
Array.Copy(SCSIInquiryResponse, 32, decoded.ProductRevisionLevel, 0, 4);
}
+
if(SCSIInquiryResponse.Length >= 44)
{
// Seagate 1
- decoded.SeagatePresent = true;
+ decoded.SeagatePresent = true;
decoded.Seagate_DriveSerialNumber = new byte[8];
Array.Copy(SCSIInquiryResponse, 36, decoded.Seagate_DriveSerialNumber, 0, 8);
}
+
if(SCSIInquiryResponse.Length >= 46)
{
// Kreon
decoded.KreonIdentifier = new byte[5];
Array.Copy(SCSIInquiryResponse, 36, decoded.KreonIdentifier, 0, 5);
- decoded.KreonSpace = SCSIInquiryResponse[41];
+ decoded.KreonSpace = SCSIInquiryResponse[41];
decoded.KreonVersion = new byte[5];
Array.Copy(SCSIInquiryResponse, 42, decoded.KreonVersion, 0, 5);
@@ -168,63 +179,66 @@ namespace DiscImageChef.Decoders.SCSI
decoded.KreonIdentifier.SequenceEqual(new byte[] {0x4B, 0x52, 0x45, 0x4F, 0x4E}))
decoded.KreonPresent = true;
}
+
if(SCSIInquiryResponse.Length >= 49)
{
// HP
- decoded.HPPresent = true;
- decoded.HP_WORM |= (SCSIInquiryResponse[40] & 0x01) == 0x01;
- decoded.HP_WORMVersion = (byte)((SCSIInquiryResponse[40] & 0x7F) >> 1);
- decoded.HP_OBDR = new byte[6];
+ decoded.HPPresent = true;
+ decoded.HP_WORM |= (SCSIInquiryResponse[40] & 0x01) == 0x01;
+ decoded.HP_WORMVersion = (byte)((SCSIInquiryResponse[40] & 0x7F) >> 1);
+ decoded.HP_OBDR = new byte[6];
Array.Copy(SCSIInquiryResponse, 43, decoded.HP_OBDR, 0, 6);
}
+
if(SCSIInquiryResponse.Length >= 56)
{
decoded.VendorSpecific = new byte[20];
Array.Copy(SCSIInquiryResponse, 36, decoded.VendorSpecific, 0, 20);
// Quantum
- decoded.QuantumPresent = true;
- decoded.Qt_ProductFamily = (byte)((SCSIInquiryResponse[36] & 0xF0) >> 4);
- decoded.Qt_ReleasedFirmware = (byte)(SCSIInquiryResponse[36] & 0x0F);
- decoded.Qt_FirmwareMajorVersion = SCSIInquiryResponse[37];
- decoded.Qt_FirmwareMinorVersion = SCSIInquiryResponse[38];
- decoded.Qt_EEPROMFormatMajorVersion = SCSIInquiryResponse[39];
- decoded.Qt_EEPROMFormatMinorVersion = SCSIInquiryResponse[40];
- decoded.Qt_FirmwarePersonality = SCSIInquiryResponse[41];
- decoded.Qt_FirmwareSubPersonality = SCSIInquiryResponse[42];
- decoded.Qt_TapeDirectoryFormatVersion = SCSIInquiryResponse[43];
- decoded.Qt_ControllerHardwareVersion = SCSIInquiryResponse[44];
- decoded.Qt_DriveEEPROMVersion = SCSIInquiryResponse[45];
- decoded.Qt_DriveHardwareVersion = SCSIInquiryResponse[46];
- decoded.Qt_MediaLoaderFirmwareVersion = SCSIInquiryResponse[47];
- decoded.Qt_MediaLoaderHardwareVersion = SCSIInquiryResponse[48];
+ decoded.QuantumPresent = true;
+ decoded.Qt_ProductFamily = (byte)((SCSIInquiryResponse[36] & 0xF0) >> 4);
+ decoded.Qt_ReleasedFirmware = (byte)(SCSIInquiryResponse[36] & 0x0F);
+ decoded.Qt_FirmwareMajorVersion = SCSIInquiryResponse[37];
+ decoded.Qt_FirmwareMinorVersion = SCSIInquiryResponse[38];
+ decoded.Qt_EEPROMFormatMajorVersion = SCSIInquiryResponse[39];
+ decoded.Qt_EEPROMFormatMinorVersion = SCSIInquiryResponse[40];
+ decoded.Qt_FirmwarePersonality = SCSIInquiryResponse[41];
+ decoded.Qt_FirmwareSubPersonality = SCSIInquiryResponse[42];
+ decoded.Qt_TapeDirectoryFormatVersion = SCSIInquiryResponse[43];
+ decoded.Qt_ControllerHardwareVersion = SCSIInquiryResponse[44];
+ decoded.Qt_DriveEEPROMVersion = SCSIInquiryResponse[45];
+ decoded.Qt_DriveHardwareVersion = SCSIInquiryResponse[46];
+ decoded.Qt_MediaLoaderFirmwareVersion = SCSIInquiryResponse[47];
+ decoded.Qt_MediaLoaderHardwareVersion = SCSIInquiryResponse[48];
decoded.Qt_MediaLoaderMechanicalVersion = SCSIInquiryResponse[49];
- decoded.Qt_MediaLoaderPresent = SCSIInquiryResponse[50] > 0;
- decoded.Qt_LibraryPresent = SCSIInquiryResponse[51] > 0;
- decoded.Qt_ModuleRevision = new byte[4];
+ decoded.Qt_MediaLoaderPresent = SCSIInquiryResponse[50] > 0;
+ decoded.Qt_LibraryPresent = SCSIInquiryResponse[51] > 0;
+ decoded.Qt_ModuleRevision = new byte[4];
Array.Copy(SCSIInquiryResponse, 52, decoded.Qt_ModuleRevision, 0, 4);
// IBM
- decoded.IBMPresent = true;
- decoded.IBM_AutDis |= (SCSIInquiryResponse[36] & 0x01) == 0x01;
- decoded.IBM_PerformanceLimit = SCSIInquiryResponse[37];
- decoded.IBM_OEMSpecific = SCSIInquiryResponse[41];
+ decoded.IBMPresent = true;
+ decoded.IBM_AutDis |= (SCSIInquiryResponse[36] & 0x01) == 0x01;
+ decoded.IBM_PerformanceLimit = SCSIInquiryResponse[37];
+ decoded.IBM_OEMSpecific = SCSIInquiryResponse[41];
}
if(SCSIInquiryResponse.Length >= 57)
{
decoded.Reserved3 = (byte)((SCSIInquiryResponse[56] & 0xF0) >> 4);
- decoded.Clocking = (byte)((SCSIInquiryResponse[56] & 0x0C) >> 2);
- decoded.QAS = Convert.ToBoolean(SCSIInquiryResponse[56] & 0x02);
- decoded.IUS = Convert.ToBoolean(SCSIInquiryResponse[56] & 0x01);
+ decoded.Clocking = (byte)((SCSIInquiryResponse[56] & 0x0C) >> 2);
+ decoded.QAS = Convert.ToBoolean(SCSIInquiryResponse[56] & 0x02);
+ decoded.IUS = Convert.ToBoolean(SCSIInquiryResponse[56] & 0x01);
}
+
if(SCSIInquiryResponse.Length >= 58) decoded.Reserved4 = SCSIInquiryResponse[57];
if(SCSIInquiryResponse.Length >= 60)
{
int descriptorsNo;
if(SCSIInquiryResponse.Length >= 74) descriptorsNo = 8;
- else descriptorsNo = (SCSIInquiryResponse.Length - 58) / 2;
+ else descriptorsNo = (SCSIInquiryResponse.Length - 58) / 2;
decoded.VersionDescriptors = new ushort[descriptorsNo];
for(int i = 0; i < descriptorsNo; i++)
@@ -236,26 +250,31 @@ namespace DiscImageChef.Decoders.SCSI
decoded.Reserved5 = new byte[SCSIInquiryResponse.Length - 74];
Array.Copy(SCSIInquiryResponse, 74, decoded.Reserved5, 0, SCSIInquiryResponse.Length - 74);
}
+
if(SCSIInquiryResponse.Length >= 96)
{
decoded.Reserved5 = new byte[22];
Array.Copy(SCSIInquiryResponse, 74, decoded.Reserved5, 0, 22);
}
+
if(SCSIInquiryResponse.Length > 96)
{
decoded.VendorSpecific2 = new byte[SCSIInquiryResponse.Length - 96];
Array.Copy(SCSIInquiryResponse, 96, decoded.VendorSpecific2, 0, SCSIInquiryResponse.Length - 96);
}
+
if(SCSIInquiryResponse.Length >= 144)
{
// Seagate 2
- decoded.Seagate2Present = true;
+ decoded.Seagate2Present = true;
decoded.Seagate_Copyright = new byte[48];
Array.Copy(SCSIInquiryResponse, 96, decoded.Seagate_Copyright, 0, 48);
}
+
if(SCSIInquiryResponse.Length < 148) return decoded;
+
// Seagate 2
- decoded.Seagate3Present = true;
+ decoded.Seagate3Present = true;
decoded.Seagate_ServoPROMPartNo = new byte[4];
Array.Copy(SCSIInquiryResponse, 144, decoded.Seagate_ServoPROMPartNo, 0, 4);
@@ -457,9 +476,9 @@ namespace DiscImageChef.Decoders.SCSI
if(response.CmdQue) sb.AppendLine("Device supports TCQ queue");
if(response.IUS) sb.AppendLine("Device supports information unit transfers");
if(response.SftRe) sb.AppendLine("Device implements RESET as a soft reset");
-#if DEBUG
+ #if DEBUG
if(response.VS1) sb.AppendLine("Vendor specific bit 5 on byte 6 of INQUIRY response is set");
-#endif
+ #endif
switch((TGPSValues)response.TPGS)
{
@@ -2027,7 +2046,7 @@ namespace DiscImageChef.Decoders.SCSI
StringHandlers.CToString(response.KreonVersion)).AppendLine();
#endregion Kreon vendor prettifying
-#if DEBUG
+ #if DEBUG
if(response.DeviceTypeModifier != 0)
sb.AppendFormat("Vendor's device type modifier = 0x{0:X2}", response.DeviceTypeModifier).AppendLine();
if(response.Reserved2 != 0)
@@ -2068,7 +2087,7 @@ namespace DiscImageChef.Decoders.SCSI
sb.AppendLine("============================================================");
sb.AppendLine(PrintHex.ByteArrayToHexArrayString(response.VendorSpecific2, 60));
sb.AppendLine("============================================================");
-#endif
+ #endif
return sb.ToString();
}
diff --git a/SCSI/MMC/AACS.cs b/SCSI/MMC/AACS.cs
index d1820d7c8..b20b78b18 100644
--- a/SCSI/MMC/AACS.cs
+++ b/SCSI/MMC/AACS.cs
@@ -232,8 +232,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.VolumeIdentifier = new byte[AACSVIResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSVIResponse, 0);
- decoded.Reserved1 = AACSVIResponse[2];
- decoded.Reserved2 = AACSVIResponse[3];
+ decoded.Reserved1 = AACSVIResponse[2];
+ decoded.Reserved2 = AACSVIResponse[3];
Array.Copy(AACSVIResponse, 4, decoded.VolumeIdentifier, 0, AACSVIResponse.Length - 4);
return decoded;
@@ -247,10 +247,10 @@ namespace DiscImageChef.Decoders.SCSI.MMC
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
-#endif
+ #endif
sb.AppendFormat("AACS Volume Identifier in hex follows:");
sb.AppendLine(PrintHex.ByteArrayToHexArrayString(response.VolumeIdentifier, 80));
@@ -274,8 +274,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.MediaSerialNumber = new byte[AACSMSNResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMSNResponse, 0);
- decoded.Reserved1 = AACSMSNResponse[2];
- decoded.Reserved2 = AACSMSNResponse[3];
+ decoded.Reserved1 = AACSMSNResponse[2];
+ decoded.Reserved2 = AACSMSNResponse[3];
Array.Copy(AACSMSNResponse, 4, decoded.MediaSerialNumber, 0, AACSMSNResponse.Length - 4);
return decoded;
@@ -289,10 +289,10 @@ namespace DiscImageChef.Decoders.SCSI.MMC
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
-#endif
+ #endif
sb.AppendFormat("AACS Media Serial Number in hex follows:");
sb.AppendLine(PrintHex.ByteArrayToHexArrayString(response.MediaSerialNumber, 80));
@@ -316,8 +316,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.MediaIdentifier = new byte[AACSMIResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMIResponse, 0);
- decoded.Reserved1 = AACSMIResponse[2];
- decoded.Reserved2 = AACSMIResponse[3];
+ decoded.Reserved1 = AACSMIResponse[2];
+ decoded.Reserved2 = AACSMIResponse[3];
Array.Copy(AACSMIResponse, 4, decoded.MediaIdentifier, 0, AACSMIResponse.Length - 4);
return decoded;
@@ -331,10 +331,10 @@ namespace DiscImageChef.Decoders.SCSI.MMC
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
-#endif
+ #endif
sb.AppendFormat("AACS Media Identifier in hex follows:");
sb.AppendLine(PrintHex.ByteArrayToHexArrayString(response.MediaIdentifier, 80));
@@ -358,7 +358,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.MediaKeyBlockPacks = new byte[AACSMKBResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMKBResponse, 0);
- decoded.Reserved = AACSMKBResponse[2];
+ decoded.Reserved = AACSMKBResponse[2];
decoded.TotalPacks = AACSMKBResponse[3];
Array.Copy(AACSMKBResponse, 4, decoded.MediaKeyBlockPacks, 0, AACSMKBResponse.Length - 4);
@@ -373,9 +373,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved != 0) sb.AppendFormat("Reserved = 0x{0:X2}", response.Reserved).AppendLine();
-#endif
+ #endif
sb.AppendFormat("Total number of media key blocks available to transfer {0}", response.TotalPacks)
.AppendLine();
sb.AppendFormat("AACS Media Key Blocks in hex follows:");
@@ -401,8 +401,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.DataKeys = new byte[AACSDKResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSDKResponse, 0);
- decoded.Reserved1 = AACSDKResponse[2];
- decoded.Reserved2 = AACSDKResponse[3];
+ decoded.Reserved1 = AACSDKResponse[2];
+ decoded.Reserved2 = AACSDKResponse[3];
Array.Copy(AACSDKResponse, 4, decoded.DataKeys, 0, AACSDKResponse.Length - 4);
return decoded;
@@ -416,10 +416,10 @@ namespace DiscImageChef.Decoders.SCSI.MMC
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
-#endif
+ #endif
sb.AppendFormat("AACS Data Keys in hex follows:");
sb.AppendLine(PrintHex.ByteArrayToHexArrayString(response.DataKeys, 80));
@@ -440,8 +440,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
- decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSLBAExtsResponse, 0);
- decoded.Reserved = AACSLBAExtsResponse[2];
+ decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSLBAExtsResponse, 0);
+ decoded.Reserved = AACSLBAExtsResponse[2];
decoded.MaxLBAExtents = AACSLBAExtsResponse[3];
if((AACSLBAExtsResponse.Length - 4) % 16 != 0) return decoded;
@@ -452,7 +452,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
decoded.Extents[i].Reserved = new byte[8];
Array.Copy(AACSLBAExtsResponse, 0 + i * 16 + 4, decoded.Extents[i].Reserved, 0, 8);
- decoded.Extents[i].StartLBA = BigEndianBitConverter.ToUInt32(AACSLBAExtsResponse, 8 + i * 16 + 4);
+ decoded.Extents[i].StartLBA = BigEndianBitConverter.ToUInt32(AACSLBAExtsResponse, 8 + i * 16 + 4);
decoded.Extents[i].LBACount = BigEndianBitConverter.ToUInt32(AACSLBAExtsResponse, 12 + i * 16 + 4);
}
diff --git a/SCSI/MMC/CPRM.cs b/SCSI/MMC/CPRM.cs
index e7b7f68d5..0d2d0d66e 100644
--- a/SCSI/MMC/CPRM.cs
+++ b/SCSI/MMC/CPRM.cs
@@ -92,7 +92,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.MKBPackData = new byte[CPRMMKBResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(CPRMMKBResponse, 0);
- decoded.Reserved = CPRMMKBResponse[2];
+ decoded.Reserved = CPRMMKBResponse[2];
decoded.TotalPacks = CPRMMKBResponse[3];
Array.Copy(CPRMMKBResponse, 4, decoded.MKBPackData, 0, CPRMMKBResponse.Length - 4);
@@ -107,9 +107,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
StringBuilder sb = new StringBuilder();
-#if DEBUG
+ #if DEBUG
if(response.Reserved != 0) sb.AppendFormat("Reserved = 0x{0:X2}", response.Reserved).AppendLine();
-#endif
+ #endif
sb.AppendFormat("Total number of CPRM Media Key Blocks available to transfer: {0}", response.TotalPacks)
.AppendLine();
sb.AppendFormat("CPRM Media Key Blocks in hex follows:");
diff --git a/SCSI/MMC/DiscInformation.cs b/SCSI/MMC/DiscInformation.cs
index cb2dcdd09..9cc4cf13f 100644
--- a/SCSI/MMC/DiscInformation.cs
+++ b/SCSI/MMC/DiscInformation.cs
@@ -289,22 +289,22 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(decoded.DataLength + 2 != response.Length) return null;
- decoded.DataType = (byte)((response[2] & 0xE0) >> 5);
- decoded.Erasable |= (response[2] & 0x10) == 0x10;
- decoded.LastSessionStatus = (byte)((response[2] & 0x0C) >> 2);
- decoded.DiscStatus = (byte)(response[2] & 0x03);
- decoded.FirstTrackNumber = response[3];
- decoded.Sessions = (ushort)((response[9] << 8) + response[4]);
- decoded.FirstTrackLastSession = (ushort)((response[10] << 8) + response[5]);
- decoded.LastTrackLastSession = (ushort)((response[11] << 8) + response[6]);
+ decoded.DataType = (byte)((response[2] & 0xE0) >> 5);
+ decoded.Erasable |= (response[2] & 0x10) == 0x10;
+ decoded.LastSessionStatus = (byte)((response[2] & 0x0C) >> 2);
+ decoded.DiscStatus = (byte)(response[2] & 0x03);
+ decoded.FirstTrackNumber = response[3];
+ decoded.Sessions = (ushort)((response[9] << 8) + response[4]);
+ decoded.FirstTrackLastSession = (ushort)((response[10] << 8) + response[5]);
+ decoded.LastTrackLastSession = (ushort)((response[11] << 8) + response[6]);
- decoded.DID_V |= (response[7] & 0x80) == 0x80;
- decoded.DBC_V |= (response[7] & 0x40) == 0x40;
- decoded.URU |= (response[7] & 0x20) == 0x20;
- decoded.DAC_V |= (response[7] & 0x10) == 0x10;
- decoded.Reserved |= (response[7] & 0x08) == 0x08;
- decoded.Dbit |= (response[7] & 0x04) == 0x04;
- decoded.BGFormatStatus = (byte)(response[7] & 0x03);
+ decoded.DID_V |= (response[7] & 0x80) == 0x80;
+ decoded.DBC_V |= (response[7] & 0x40) == 0x40;
+ decoded.URU |= (response[7] & 0x20) == 0x20;
+ decoded.DAC_V |= (response[7] & 0x10) == 0x10;
+ decoded.Reserved |= (response[7] & 0x08) == 0x08;
+ decoded.Dbit |= (response[7] & 0x04) == 0x04;
+ decoded.BGFormatStatus = (byte)(response[7] & 0x03);
decoded.DiscIdentification =
(uint)((response[12] << 24) + (response[13] << 16) + (response[14] << 8) + response[15]);
@@ -319,14 +319,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
decoded.DiscBarcode = BitConverter.ToUInt64(temp, 0);
decoded.DiscApplicationCode = response[32];
- decoded.OPCTablesNumber = response[33];
+ decoded.OPCTablesNumber = response[33];
if(decoded.OPCTablesNumber <= 0 || response.Length != decoded.OPCTablesNumber * 8 + 34) return decoded;
decoded.OPCTables = new OPCTable[decoded.OPCTablesNumber];
for(int i = 0; i < decoded.OPCTablesNumber; i++)
{
- decoded.OPCTables[i].Speed = (ushort)((response[34 + i * 8 + 0] << 16) + response[34 + i * 8 + 1]);
+ decoded.OPCTables[i].Speed = (ushort)((response[34 + i * 8 + 0] << 16) + response[34 + i * 8 + 1]);
decoded.OPCTables[i].OPCValues = new byte[6];
Array.Copy(response, 34 + i * 8 + 2, decoded.OPCTables[i].OPCValues, 0, 6);
}
@@ -415,11 +415,12 @@ namespace DiscImageChef.Decoders.SCSI.MMC
sb.AppendFormat("Last track in last session is track {0}", decoded.LastTrackLastSession).AppendLine();
sb.AppendFormat("Last session Lead-In address is {0} (as LBA) or {1:X2}:{2:X2}:{3:X2}",
decoded.LastSessionLeadInStartLBA, (decoded.LastSessionLeadInStartLBA & 0xFF0000) >> 16,
- (decoded.LastSessionLeadInStartLBA & 0xFF00) >> 8, decoded.LastSessionLeadInStartLBA & 0xFF)
+ (decoded.LastSessionLeadInStartLBA & 0xFF00) >> 8,
+ decoded.LastSessionLeadInStartLBA & 0xFF)
.AppendLine();
sb.AppendFormat("Last possible Lead-Out address is {0} (as LBA) or {1:X2}:{2:X2}:{3:X2}",
decoded.LastPossibleLeadOutStartLBA, (decoded.LastPossibleLeadOutStartLBA & 0xFF0000) >> 16,
- (decoded.LastPossibleLeadOutStartLBA & 0xFF00) >> 8,
+ (decoded.LastPossibleLeadOutStartLBA & 0xFF00) >> 8,
decoded.LastPossibleLeadOutStartLBA & 0xFF).AppendLine();
sb.AppendLine(decoded.URU ? "Disc is defined for unrestricted use" : "Disc is defined for restricted use");
@@ -449,11 +450,11 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(decoded.DataLength + 2 != response.Length) return null;
- decoded.DataType = (byte)((response[2] & 0xE0) >> 5);
- decoded.MaxTracks = (ushort)((response[4] << 8) + response[5]);
- decoded.AssignedTracks = (ushort)((response[6] << 8) + response[7]);
- decoded.MaxAppendableTracks = (ushort)((response[8] << 8) + response[9]);
- decoded.AppendableTracks = (ushort)((response[10] << 8) + response[11]);
+ decoded.DataType = (byte)((response[2] & 0xE0) >> 5);
+ decoded.MaxTracks = (ushort)((response[4] << 8) + response[5]);
+ decoded.AssignedTracks = (ushort)((response[6] << 8) + response[7]);
+ decoded.MaxAppendableTracks = (ushort)((response[8] << 8) + response[9]);
+ decoded.AppendableTracks = (ushort)((response[10] << 8) + response[11]);
return decoded;
}
diff --git a/SCSI/MMC/Enums.cs b/SCSI/MMC/Enums.cs
index 2c64d2c90..de9b25a38 100644
--- a/SCSI/MMC/Enums.cs
+++ b/SCSI/MMC/Enums.cs
@@ -38,9 +38,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
[SuppressMessage("ReSharper", "MemberCanBeInternal")]
public enum FormatLayerTypeCodes : ushort
{
- CDLayer = 0x0008,
- DVDLayer = 0x0010,
- BDLayer = 0x0040,
+ CDLayer = 0x0008,
+ DVDLayer = 0x0010,
+ BDLayer = 0x0040,
HDDVDLayer = 0x0050
}
@@ -48,30 +48,30 @@ namespace DiscImageChef.Decoders.SCSI.MMC
[SuppressMessage("ReSharper", "MemberCanBeInternal")]
public enum SessionStatusCodes : byte
{
- Empty = 0x00,
- Incomplete = 0x01,
+ Empty = 0x00,
+ Incomplete = 0x01,
ReservedOrDamaged = 0x02,
- Complete = 0x03
+ Complete = 0x03
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
[SuppressMessage("ReSharper", "MemberCanBeInternal")]
public enum DiscStatusCodes : byte
{
- Empty = 0x00,
+ Empty = 0x00,
Incomplete = 0x01,
- Finalized = 0x02,
- Others = 0x03
+ Finalized = 0x02,
+ Others = 0x03
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
[SuppressMessage("ReSharper", "MemberCanBeInternal")]
public enum BGFormatStatusCodes : byte
{
- NoFormattable = 0x00,
+ NoFormattable = 0x00,
IncompleteBackgroundFormat = 0x01,
BackgroundFormatInProgress = 0x02,
- FormatComplete = 0x03
+ FormatComplete = 0x03
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
@@ -82,8 +82,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
/// Also valid for CD-DA, DVD and BD
///
CDROM = 0x00,
- CDi = 0x10,
- CDROMXA = 0x20,
+ CDi = 0x10,
+ CDROMXA = 0x20,
Undefined = 0xFF
}
}
\ No newline at end of file
diff --git a/SCSI/MMC/Features.cs b/SCSI/MMC/Features.cs
index 8011b6057..a333c7ba2 100644
--- a/SCSI/MMC/Features.cs
+++ b/SCSI/MMC/Features.cs
@@ -499,7 +499,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
public struct Profile
{
public ProfileNumber Number;
- public bool Current;
+ public bool Current;
}
///
@@ -2357,11 +2357,11 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0000 decoded = new Feature_0000();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- int offset = 4;
+ int offset = 4;
List listProfiles = new List();
while(offset < feature.Length)
{
@@ -2390,9 +2390,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0001 decoded = new Feature_0001();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.PhysicalInterfaceStandard =
(PhysicalInterfaces)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
@@ -2418,9 +2418,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0002 decoded = new Feature_0002();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.Async |= (feature[4] & 0x01) == 0x01;
@@ -2443,14 +2443,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0003 decoded = new Feature_0003();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.LoadingMechanismType = (byte)((feature[4] & 0xE0) >> 5);
- decoded.Eject |= (feature[4] & 0x08) == 0x08;
- decoded.PreventJumper |= (feature[4] & 0x04) == 0x04;
- decoded.Lock |= (feature[4] & 0x01) == 0x01;
+ decoded.LoadingMechanismType = (byte)((feature[4] & 0xE0) >> 5);
+ decoded.Eject |= (feature[4] & 0x08) == 0x08;
+ decoded.PreventJumper |= (feature[4] & 0x04) == 0x04;
+ decoded.Lock |= (feature[4] & 0x01) == 0x01;
if(decoded.Version < 2) return decoded;
@@ -2474,11 +2474,11 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0004 decoded = new Feature_0004();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.SPWP |= (feature[4] & 0x02) == 0x02;
+ decoded.SPWP |= (feature[4] & 0x02) == 0x02;
decoded.SSWPP |= (feature[4] & 0x01) == 0x01;
if(decoded.Version >= 1) decoded.WDCB |= (feature[4] & 0x04) == 0x04;
@@ -2502,12 +2502,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0010 decoded = new Feature_0010();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.LogicalBlockSize = (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
- decoded.Blocking = (ushort)((feature[8] << 8) + feature[9]);
+ decoded.LogicalBlockSize =
+ (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
+ decoded.Blocking =
+ (ushort)((feature[8] << 8) + feature[9]);
decoded.PP |= (feature[10] & 0x01) == 0x01;
return decoded;
@@ -2527,9 +2529,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_001D decoded = new Feature_001D();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -2548,13 +2550,13 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_001E decoded = new Feature_001E();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version >= 1)
{
- decoded.C2 |= (feature[4] & 0x02) == 0x02;
+ decoded.C2 |= (feature[4] & 0x02) == 0x02;
decoded.CDText |= (feature[4] & 0x01) == 0x01;
}
@@ -2577,14 +2579,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_001F decoded = new Feature_001F();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version >= 2 && feature.Length >= 8)
{
decoded.MULTI110 |= (feature[4] & 0x01) == 0x01;
- decoded.DualR |= (feature[6] & 0x01) == 0x01;
+ decoded.DualR |= (feature[6] & 0x01) == 0x01;
}
// TODO: Check this
@@ -2607,17 +2609,17 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0020 decoded = new Feature_0020();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version < 1) return decoded;
decoded.LastLBA = (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
decoded.LogicalBlockSize =
(uint)((feature[8] << 24) + (feature[9] << 16) + (feature[10] << 8) + feature[11]);
- decoded.Blocking = (ushort)((feature[12] << 8) + feature[13]);
- decoded.PP |= (feature[14] & 0x01) == 0x01;
+ decoded.Blocking = (ushort)((feature[12] << 8) + feature[13]);
+ decoded.PP |= (feature[14] & 0x01) == 0x01;
return decoded;
}
@@ -2636,15 +2638,15 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0021 decoded = new Feature_0021();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version >= 1)
{
- decoded.DataTypeSupported = (ushort)((feature[4] << 8) + feature[5]);
- decoded.BUF |= (feature[6] & 0x01) == 0x01;
- decoded.LinkSizes = new byte[feature[7]];
+ decoded.DataTypeSupported = (ushort)((feature[4] << 8) + feature[5]);
+ decoded.BUF |= (feature[6] & 0x01) == 0x01;
+ decoded.LinkSizes = new byte[feature[7]];
if(feature.Length > feature[7] + 8) Array.Copy(feature, 8, decoded.LinkSizes, 0, feature[7]);
}
@@ -2670,9 +2672,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0022 decoded = new Feature_0022();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -2691,17 +2693,17 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0023 decoded = new Feature_0023();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version >= 1 && feature.Length >= 12)
{
decoded.RENoSA |= (feature[4] & 0x08) == 0x08;
decoded.Expand |= (feature[4] & 0x04) == 0x04;
- decoded.QCert |= (feature[4] & 0x02) == 0x02;
- decoded.Cert |= (feature[4] & 0x01) == 0x01;
- decoded.RRM |= (feature[8] & 0x01) == 0x01;
+ decoded.QCert |= (feature[4] & 0x02) == 0x02;
+ decoded.Cert |= (feature[4] & 0x01) == 0x01;
+ decoded.RRM |= (feature[8] & 0x01) == 0x01;
}
if(decoded.Version >= 2 && feature.Length >= 12) decoded.FRF |= (feature[4] & 0x80) == 0x80;
@@ -2723,9 +2725,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0024 decoded = new Feature_0024();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version >= 1 && feature.Length >= 8) decoded.SSA |= (feature[4] & 0x80) == 0x80;
@@ -2746,12 +2748,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0025 decoded = new Feature_0025();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.LogicalBlockSize = (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
- decoded.Blocking = (ushort)((feature[8] << 8) + feature[9]);
+ decoded.LogicalBlockSize =
+ (uint)((feature[4] << 24) + (feature[5] << 16) + (feature[6] << 8) + feature[7]);
+ decoded.Blocking =
+ (ushort)((feature[8] << 8) + feature[9]);
decoded.PP |= (feature[10] & 0x01) == 0x01;
return decoded;
@@ -2771,9 +2775,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0026 decoded = new Feature_0026();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -2792,9 +2796,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0027 decoded = new Feature_0027();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -2813,16 +2817,16 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0028 decoded = new Feature_0028();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.Write |= (feature[4] & 0x01) == 0x01;
if(decoded.Version < 1) return decoded;
decoded.DVDPWrite |= (feature[4] & 0x04) == 0x04;
- decoded.DVDPRead |= (feature[4] & 0x02) == 0x02;
+ decoded.DVDPRead |= (feature[4] & 0x02) == 0x02;
return decoded;
}
@@ -2841,13 +2845,13 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0029 decoded = new Feature_0029();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.DRTDM |= (feature[4] & 0x01) == 0x01;
- decoded.DBICacheZones = feature[5];
- decoded.Entries = (ushort)((feature[6] << 8) + feature[7]);
+ decoded.DRTDM |= (feature[4] & 0x01) == 0x01;
+ decoded.DBICacheZones = feature[5];
+ decoded.Entries = (ushort)((feature[6] << 8) + feature[7]);
return decoded;
}
@@ -2866,11 +2870,11 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_002A decoded = new Feature_002A();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.Write |= (feature[4] & 0x01) == 0x01;
+ decoded.Write |= (feature[4] & 0x01) == 0x01;
decoded.CloseOnly |= (feature[5] & 0x01) == 0x01;
if(decoded.Version >= 1) decoded.QuickStart |= (feature[5] & 0x02) == 0x02;
@@ -2892,9 +2896,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_002B decoded = new Feature_002B();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.Write |= (feature[4] & 0x01) == 0x01;
@@ -2915,14 +2919,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_002C decoded = new Feature_002C();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.DSDG |= (feature[4] & 0x08) == 0x08;
- decoded.DSDR |= (feature[4] & 0x04) == 0x04;
+ decoded.DSDG |= (feature[4] & 0x08) == 0x08;
+ decoded.DSDR |= (feature[4] & 0x04) == 0x04;
decoded.Intermediate |= (feature[4] & 0x02) == 0x02;
- decoded.Blank |= (feature[4] & 0x01) == 0x01;
+ decoded.Blank |= (feature[4] & 0x01) == 0x01;
return decoded;
}
@@ -2941,19 +2945,19 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_002D decoded = new Feature_002D();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
- decoded.CDRW |= (feature[4] & 0x02) == 0x02;
- decoded.RWSubchannel |= (feature[4] & 0x01) == 0x01;
- decoded.DataTypeSupported = (ushort)((feature[6] << 8) + feature[7]);
+ decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
+ decoded.CDRW |= (feature[4] & 0x02) == 0x02;
+ decoded.RWSubchannel |= (feature[4] & 0x01) == 0x01;
+ decoded.DataTypeSupported = (ushort)((feature[6] << 8) + feature[7]);
if(decoded.Version < 2) return decoded;
- decoded.BUF |= (feature[4] & 0x40) == 0x40;
- decoded.RWRaw |= (feature[4] & 0x10) == 0x10;
+ decoded.BUF |= (feature[4] & 0x40) == 0x40;
+ decoded.RWRaw |= (feature[4] & 0x10) == 0x10;
decoded.RWPack |= (feature[4] & 0x08) == 0x08;
return decoded;
@@ -2973,17 +2977,17 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_002E decoded = new Feature_002E();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.SAO |= (feature[4] & 0x20) == 0x20;
- decoded.RAWMS |= (feature[4] & 0x10) == 0x10;
- decoded.RAW |= (feature[4] & 0x08) == 0x08;
- decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
- decoded.CDRW |= (feature[4] & 0x02) == 0x02;
- decoded.RW |= (feature[4] & 0x01) == 0x01;
- decoded.MaxCueSheet = (uint)((feature[5] << 16) + (feature[6] << 8) + feature[7]);
+ decoded.SAO |= (feature[4] & 0x20) == 0x20;
+ decoded.RAWMS |= (feature[4] & 0x10) == 0x10;
+ decoded.RAW |= (feature[4] & 0x08) == 0x08;
+ decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
+ decoded.CDRW |= (feature[4] & 0x02) == 0x02;
+ decoded.RW |= (feature[4] & 0x01) == 0x01;
+ decoded.MaxCueSheet = (uint)((feature[5] << 16) + (feature[6] << 8) + feature[7]);
if(decoded.Version >= 1) decoded.BUF |= (feature[4] & 0x40) == 0x40;
@@ -3004,11 +3008,11 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_002F decoded = new Feature_002F();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.BUF |= (feature[4] & 0x40) == 0x40;
+ decoded.BUF |= (feature[4] & 0x40) == 0x40;
decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
if(decoded.Version >= 1) decoded.DVDRW |= (feature[4] & 0x02) == 0x02;
@@ -3032,9 +3036,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0030 decoded = new Feature_0030();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3053,9 +3057,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0031 decoded = new Feature_0031();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.TestWrite |= (feature[4] & 0x04) == 0x04;
@@ -3076,12 +3080,12 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0032 decoded = new Feature_0032();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.Intermediate |= (feature[4] & 0x02) == 0x02;
- decoded.Blank |= (feature[4] & 0x01) == 0x01;
+ decoded.Blank |= (feature[4] & 0x01) == 0x01;
return decoded;
}
@@ -3100,9 +3104,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0033 decoded = new Feature_0033();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(feature[7] <= 0 || feature.Length <= feature[7] + 8) return decoded;
@@ -3126,9 +3130,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0035 decoded = new Feature_0035();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3147,9 +3151,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0037 decoded = new Feature_0037();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.SubtypeSupport = feature[5];
@@ -3170,9 +3174,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0038 decoded = new Feature_0038();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3191,13 +3195,13 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_003A decoded = new Feature_003A();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.Write |= (feature[4] & 0x01) == 0x01;
+ decoded.Write |= (feature[4] & 0x01) == 0x01;
decoded.QuickStart |= (feature[5] & 0x02) == 0x02;
- decoded.CloseOnly |= (feature[5] & 0x01) == 0x01;
+ decoded.CloseOnly |= (feature[5] & 0x01) == 0x01;
return decoded;
}
@@ -3216,9 +3220,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_003B decoded = new Feature_003B();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.Write |= (feature[4] & 0x01) == 0x01;
@@ -3239,20 +3243,20 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0040 decoded = new Feature_0040();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.OldRE |= (feature[9] & 0x01) == 0x01;
- decoded.OldR |= (feature[17] & 0x01) == 0x01;
+ decoded.OldRE |= (feature[9] & 0x01) == 0x01;
+ decoded.OldR |= (feature[17] & 0x01) == 0x01;
decoded.OldROM |= (feature[25] & 0x01) == 0x01;
if(decoded.Version < 1) return decoded;
- decoded.BCA |= (feature[4] & 0x01) == 0x01;
- decoded.RE2 |= (feature[9] & 0x04) == 0x04;
- decoded.RE1 |= (feature[9] & 0x02) == 0x02;
- decoded.R |= (feature[17] & 0x02) == 0x02;
+ decoded.BCA |= (feature[4] & 0x01) == 0x01;
+ decoded.RE2 |= (feature[9] & 0x04) == 0x04;
+ decoded.RE1 |= (feature[9] & 0x02) == 0x02;
+ decoded.R |= (feature[17] & 0x02) == 0x02;
decoded.ROM |= (feature[25] & 0x02) == 0x02;
return decoded;
@@ -3272,19 +3276,19 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0041 decoded = new Feature_0041();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.SVNR |= (feature[4] & 0x01) == 0x01;
- decoded.OldRE |= (feature[9] & 0x01) == 0x01;
- decoded.OldR |= (feature[17] & 0x01) == 0x01;
+ decoded.SVNR |= (feature[4] & 0x01) == 0x01;
+ decoded.OldRE |= (feature[9] & 0x01) == 0x01;
+ decoded.OldR |= (feature[17] & 0x01) == 0x01;
if(decoded.Version < 1) return decoded;
- decoded.RE2 |= (feature[9] & 0x04) == 0x04;
- decoded.RE1 |= (feature[9] & 0x02) == 0x02;
- decoded.R |= (feature[17] & 0x02) == 0x02;
+ decoded.RE2 |= (feature[9] & 0x04) == 0x04;
+ decoded.RE1 |= (feature[9] & 0x02) == 0x02;
+ decoded.R |= (feature[17] & 0x02) == 0x02;
return decoded;
}
@@ -3303,9 +3307,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0042 decoded = new Feature_0042();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3324,11 +3328,11 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0050 decoded = new Feature_0050();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.HDDVDR |= (feature[4] & 0x01) == 0x01;
+ decoded.HDDVDR |= (feature[4] & 0x01) == 0x01;
decoded.HDDVDRAM |= (feature[6] & 0x01) == 0x01;
return decoded;
@@ -3348,11 +3352,11 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0051 decoded = new Feature_0051();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.HDDVDR |= (feature[4] & 0x01) == 0x01;
+ decoded.HDDVDR |= (feature[4] & 0x01) == 0x01;
decoded.HDDVDRAM |= (feature[6] & 0x01) == 0x01;
return decoded;
@@ -3372,9 +3376,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0080 decoded = new Feature_0080();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.RI |= (feature[4] & 0x01) == 0x01;
@@ -3395,9 +3399,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0100 decoded = new Feature_0100();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3416,9 +3420,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0101 decoded = new Feature_0101();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.PP |= (feature[4] & 0x01) == 0x01;
@@ -3439,13 +3443,13 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0102 decoded = new Feature_0102();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.SCC |= (feature[4] & 0x10) == 0x10;
- decoded.SDP |= (feature[4] & 0x04) == 0x04;
- decoded.HighestSlotNumber = (byte)(feature[7] & 0x1F);
+ decoded.SCC |= (feature[4] & 0x10) == 0x10;
+ decoded.SDP |= (feature[4] & 0x04) == 0x04;
+ decoded.HighestSlotNumber = (byte)(feature[7] & 0x1F);
return decoded;
}
@@ -3464,14 +3468,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0103 decoded = new Feature_0103();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.Scan |= (feature[4] & 0x04) == 0x04;
- decoded.SCM |= (feature[4] & 0x02) == 0x02;
- decoded.SV |= (feature[4] & 0x01) == 0x01;
- decoded.VolumeLevels = (ushort)((feature[6] << 8) + feature[7]);
+ decoded.Scan |= (feature[4] & 0x04) == 0x04;
+ decoded.SCM |= (feature[4] & 0x02) == 0x02;
+ decoded.SV |= (feature[4] & 0x01) == 0x01;
+ decoded.VolumeLevels = (ushort)((feature[6] << 8) + feature[7]);
return decoded;
}
@@ -3490,9 +3494,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0104 decoded = new Feature_0104();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version >= 1 && feature.Length >= 8) decoded.M5 |= (feature[4] & 0x01) == 0x01;
@@ -3513,14 +3517,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0105 decoded = new Feature_0105();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version < 1 || feature.Length < 8) return decoded;
- decoded.Group3 |= (feature[4] & 0x01) == 0x01;
- decoded.UnitLength = (ushort)((feature[6] << 8) + feature[7]);
+ decoded.Group3 |= (feature[4] & 0x01) == 0x01;
+ decoded.UnitLength = (ushort)((feature[6] << 8) + feature[7]);
return decoded;
}
@@ -3539,9 +3543,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0106 decoded = new Feature_0106();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.CSSVersion = feature[7];
@@ -3562,22 +3566,22 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0107 decoded = new Feature_0107();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
if(decoded.Version >= 3 && feature.Length >= 8)
{
decoded.RBCB |= (feature[4] & 0x10) == 0x10;
- decoded.SCS |= (feature[4] & 0x08) == 0x08;
+ decoded.SCS |= (feature[4] & 0x08) == 0x08;
decoded.MP2A |= (feature[4] & 0x04) == 0x04;
decoded.WSPD |= (feature[4] & 0x02) == 0x02;
- decoded.SW |= (feature[4] & 0x01) == 0x01;
+ decoded.SW |= (feature[4] & 0x01) == 0x01;
}
if(decoded.Version < 5 || feature.Length < 8) return decoded;
- decoded.SMP |= (feature[4] & 0x20) == 0x20;
+ decoded.SMP |= (feature[4] & 0x20) == 0x20;
decoded.RBCB |= (feature[4] & 0x10) == 0x10;
return decoded;
@@ -3597,9 +3601,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0108 decoded = new Feature_0108();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
byte[] serial = new byte[feature.Length];
Array.Copy(feature, 4, serial, 0, feature.Length - 4);
@@ -3622,9 +3626,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0109 decoded = new Feature_0109();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3643,14 +3647,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_010A decoded = new Feature_010A();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.DCBs = new uint[feature[3] / 4];
for(int i = 0; i < decoded.DCBs.Length; i++)
decoded.DCBs[i] = (uint)((feature[0 + 4 + i * 4] << 24) + (feature[1 + 4 + i * 4] << 16) +
- (feature[2 + 4 + i * 4] << 8) + feature[3 + 4 + i * 4]);
+ (feature[2 + 4 + i * 4] << 8) + feature[3 + 4 + i * 4]);
return decoded;
}
@@ -3669,9 +3673,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_010B decoded = new Feature_010B();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.CPRMVersion = feature[7];
@@ -3692,17 +3696,17 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_010C decoded = new Feature_010C();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.Century = (ushort)((feature[4] << 8) + feature[5]);
- decoded.Year = (ushort)((feature[6] << 8) + feature[7]);
- decoded.Month = (ushort)((feature[8] << 8) + feature[9]);
- decoded.Day = (ushort)((feature[10] << 8) + feature[11]);
- decoded.Hour = (ushort)((feature[12] << 8) + feature[13]);
- decoded.Minute = (ushort)((feature[14] << 8) + feature[15]);
- decoded.Second = (ushort)((feature[16] << 8) + feature[17]);
+ decoded.Century = (ushort)((feature[4] << 8) + feature[5]);
+ decoded.Year = (ushort)((feature[6] << 8) + feature[7]);
+ decoded.Month = (ushort)((feature[8] << 8) + feature[9]);
+ decoded.Day = (ushort)((feature[10] << 8) + feature[11]);
+ decoded.Hour = (ushort)((feature[12] << 8) + feature[13]);
+ decoded.Minute = (ushort)((feature[14] << 8) + feature[15]);
+ decoded.Second = (ushort)((feature[16] << 8) + feature[17]);
return decoded;
}
@@ -3721,14 +3725,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_010D decoded = new Feature_010D();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.BNG |= (feature[4] & 0x01) == 0x01;
- decoded.BindNonceBlocks = feature[5];
- decoded.AGIDs = (byte)(feature[6] & 0x0F);
- decoded.AACSVersion = feature[7];
+ decoded.BNG |= (feature[4] & 0x01) == 0x01;
+ decoded.BindNonceBlocks = feature[5];
+ decoded.AGIDs = (byte)(feature[6] & 0x0F);
+ decoded.AACSVersion = feature[7];
if(decoded.Version < 2) return decoded;
@@ -3754,9 +3758,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_010E decoded = new Feature_010E();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
decoded.MaxScrambleExtent = feature[4];
@@ -3777,9 +3781,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0110 decoded = new Feature_0110();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3798,9 +3802,9 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0113 decoded = new Feature_0113();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
return decoded;
}
@@ -3819,14 +3823,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
Feature_0142 decoded = new Feature_0142();
- decoded.Current |= (feature[2] & 0x01) == 0x01;
+ decoded.Current |= (feature[2] & 0x01) == 0x01;
decoded.Persistent |= (feature[2] & 0x02) == 0x02;
- decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
+ decoded.Version = (byte)((feature[2] & 0x3C) >> 2);
- decoded.PSAU |= (feature[4] & 0x80) == 0x80;
- decoded.LOSPB |= (feature[4] & 0x40) == 0x40;
- decoded.ME |= (feature[4] & 0x01) == 0x01;
- decoded.Profiles = new ushort[feature[5]];
+ decoded.PSAU |= (feature[4] & 0x80) == 0x80;
+ decoded.LOSPB |= (feature[4] & 0x40) == 0x40;
+ decoded.ME |= (feature[4] & 0x01) == 0x01;
+ decoded.Profiles = new ushort[feature[5]];
if(feature[5] * 2 + 6 != feature.Length) return decoded;
for(int i = 0; i < feature[5]; i++)
@@ -3839,8 +3843,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0000 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0000 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Supported Profiles:");
if(ftr.Profiles == null) return sb.ToString();
@@ -3982,8 +3986,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0001 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0001 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Core Feature:");
sb.Append("\tDrive uses ");
@@ -4036,8 +4040,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0002 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0002 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Morphing:");
@@ -4054,8 +4058,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0003 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0003 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Removable Medium:");
@@ -4095,8 +4099,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0004 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0004 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Write Protect:");
@@ -4112,8 +4116,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0010 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0010 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC Random Readable");
if(ftr.Current) sb.Append(" (current)");
@@ -4139,8 +4143,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_001E ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_001E ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC CD Read");
if(ftr.Current) sb.Append(" (current)");
@@ -4157,8 +4161,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_001F ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_001F ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC DVD Read");
if(ftr.Current) sb.Append(" (current)");
@@ -4176,8 +4180,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0020 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0020 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC Random Writable:");
if(ftr.Current) sb.Append(" (current)");
@@ -4197,8 +4201,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0021 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0021 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Incremental Streaming Writable:");
@@ -4240,8 +4244,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0023 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0023 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Formattable:");
sb.AppendLine("\tDrive can format media into logical blocks");
@@ -4260,8 +4264,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0024 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0024 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Hardware Defect Management:");
sb.AppendLine("\tDrive shall be able to provide a defect-free contiguous address space");
@@ -4274,8 +4278,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0025 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0025 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC Write Once");
if(ftr.Current) sb.Append(" (current)");
@@ -4301,8 +4305,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0027 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0027 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("Drive can write High-Speed CD-RW");
if(ftr.Current) sb.AppendLine(" (current)");
@@ -4315,12 +4319,12 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0028 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0028 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.Write && ftr.DVDPRead && ftr.DVDPWrite) sb.Append("Drive can read and write CD-MRW and DVD+MRW");
- else if(ftr.DVDPRead && ftr.DVDPWrite) sb.Append("Drive can read and write DVD+MRW");
- else if(ftr.Write && ftr.DVDPRead) sb.Append("Drive and read DVD+MRW and read and write CD-MRW");
+ else if(ftr.DVDPRead && ftr.DVDPWrite) sb.Append("Drive can read and write DVD+MRW");
+ else if(ftr.Write && ftr.DVDPRead) sb.Append("Drive and read DVD+MRW and read and write CD-MRW");
else if(ftr.Write) sb.Append("Drive can read and write CD-MRW");
else if(ftr.DVDPRead) sb.Append("Drive can read CD-MRW and DVD+MRW");
else sb.Append("Drive can read CD-MRW");
@@ -4335,8 +4339,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0029 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0029 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Enhanced Defect Reporting Feature:");
@@ -4353,8 +4357,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_002A ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_002A ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.Write)
{
@@ -4380,8 +4384,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_002B ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_002B ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.Write)
{
@@ -4403,8 +4407,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_002C ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_002C ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC Rigid Restricted Overwrite");
sb.AppendLine(ftr.Current ? " (current):" : ":");
@@ -4422,8 +4426,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_002D ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_002D ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive can write CDs in Track at Once Mode:");
@@ -4466,10 +4470,10 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_002E ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_002E ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
- if(ftr.SAO && !ftr.RAW) sb.AppendLine("Drive can write CDs in Session at Once Mode:");
+ if(ftr.SAO && !ftr.RAW) sb.AppendLine("Drive can write CDs in Session at Once Mode:");
else if(!ftr.SAO && ftr.RAW) sb.AppendLine("Drive can write CDs in raw Mode:");
else sb.AppendLine("Drive can write CDs in Session at Once and in Raw Modes:");
@@ -4492,8 +4496,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_002F ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_002F ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.DVDRW && ftr.RDL) sb.AppendLine("Drive supports writing DVD-R, DVD-RW and DVD-R DL");
else if(ftr.RDL) sb.AppendLine("Drive supports writing DVD-R and DVD-R DL");
@@ -4515,8 +4519,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0031 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0031 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive supports writing DDCD-R");
@@ -4529,8 +4533,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0032 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0032 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive supports writing DDCD-RW");
@@ -4544,8 +4548,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0033 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0033 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Layer Jump Recording:");
@@ -4566,8 +4570,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0037 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0037 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive can write CD-RW");
if(ftr.SubtypeSupport <= 0) return sb.ToString();
@@ -4595,8 +4599,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_003A ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_003A ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.Write)
{
@@ -4622,8 +4626,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_003B ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_003B ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.Write)
{
@@ -4645,8 +4649,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0040 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0040 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC BD Read");
sb.AppendLine(ftr.Current ? " (current):" : ":");
@@ -4668,8 +4672,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0041 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0041 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("MMC BD Write");
sb.AppendLine(ftr.Current ? " (current):" : ":");
@@ -4696,8 +4700,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0050 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0050 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.HDDVDR && ftr.HDDVDRAM) sb.Append("Drive can read HD DVD-ROM, HD DVD-RW, HD DVD-R and HD DVD-RAM");
else if(ftr.HDDVDR) sb.Append("Drive can read HD DVD-ROM, HD DVD-RW and HD DVD-R");
@@ -4714,8 +4718,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0051 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0051 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.HDDVDR && ftr.HDDVDRAM) sb.Append("Drive can write HD DVD-RW, HD DVD-R and HD DVD-RAM");
else if(ftr.HDDVDR) sb.Append("Drive can write HD DVD-RW and HD DVD-R");
@@ -4732,8 +4736,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0080 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0080 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("Drive is able to access Hybrid discs");
if(ftr.Current) sb.AppendLine(" (current)");
@@ -4754,8 +4758,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0101 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0101 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive supports S.M.A.R.T.");
if(ftr.PP) sb.AppendLine("\tDrive supports the Informational Exceptions Control mode page 1Ch");
@@ -4767,8 +4771,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0102 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0102 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Embedded Changer:");
@@ -4784,8 +4788,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0103 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0103 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive has an analogue audio output");
@@ -4802,8 +4806,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0104 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0104 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive supports Microcode Upgrade");
if(ftr.M5)
@@ -4816,8 +4820,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0105 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0105 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive supports Timeout & Protect mode page 1Dh");
@@ -4834,8 +4838,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0106 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0106 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendFormat("Drive supports DVD CSS/CPPM version {0}", ftr.CSSVersion);
if(ftr.Current) sb.AppendLine(" and current disc is encrypted");
@@ -4848,8 +4852,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0107 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0107 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("MMC Real Time Streaming:");
@@ -4869,8 +4873,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0108 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0108 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendFormat("Drive serial number: {0}", ftr.Serial).AppendLine();
@@ -4886,8 +4890,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_010A ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_010A ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
if(ftr.DCBs == null) return sb.ToString();
@@ -4900,8 +4904,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_010B ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_010B ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendFormat("Drive supports DVD CPRM version {0}", ftr.CPRMVersion);
if(ftr.Current) sb.AppendLine(" and current disc is or can be encrypted");
@@ -4914,8 +4918,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_010C ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_010C ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
byte[] temp = new byte[4];
temp[0] = (byte)((ftr.Century & 0xFF00) >> 8);
@@ -4923,23 +4927,23 @@ namespace DiscImageChef.Decoders.SCSI.MMC
temp[2] = (byte)((ftr.Year & 0xFF00) >> 8);
temp[3] = (byte)(ftr.Year & 0xFF);
string syear = Encoding.ASCII.GetString(temp);
- temp = new byte[2];
+ temp = new byte[2];
temp[0] = (byte)((ftr.Month & 0xFF00) >> 8);
temp[1] = (byte)(ftr.Month & 0xFF);
string smonth = Encoding.ASCII.GetString(temp);
- temp = new byte[2];
+ temp = new byte[2];
temp[0] = (byte)((ftr.Day & 0xFF00) >> 8);
temp[1] = (byte)(ftr.Day & 0xFF);
string sday = Encoding.ASCII.GetString(temp);
- temp = new byte[2];
+ temp = new byte[2];
temp[0] = (byte)((ftr.Hour & 0xFF00) >> 8);
temp[1] = (byte)(ftr.Hour & 0xFF);
string shour = Encoding.ASCII.GetString(temp);
- temp = new byte[2];
+ temp = new byte[2];
temp[0] = (byte)((ftr.Minute & 0xFF00) >> 8);
temp[1] = (byte)(ftr.Minute & 0xFF);
string sminute = Encoding.ASCII.GetString(temp);
- temp = new byte[2];
+ temp = new byte[2];
temp[0] = (byte)((ftr.Second & 0xFF00) >> 8);
temp[1] = (byte)(ftr.Second & 0xFF);
string ssecond = Encoding.ASCII.GetString(temp);
@@ -4951,12 +4955,12 @@ namespace DiscImageChef.Decoders.SCSI.MMC
sb.AppendFormat("Drive firmware is dated {0}", fwDate).AppendLine();
}
-#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
+ #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
{
// ignored
}
-#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
+ #pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
return sb.ToString();
}
@@ -4965,8 +4969,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_010D ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_010D ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendFormat("Drive supports AACS version {0}", ftr.AACSVersion);
if(ftr.Current) sb.AppendLine(" and current disc is encrypted");
@@ -4983,6 +4987,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
sb.AppendFormat("\t{0} media blocks are required for the binding nonce", ftr.BindNonceBlocks)
.AppendLine();
}
+
if(ftr.AGIDs > 0) sb.AppendFormat("\tDrive supports {0} AGIDs concurrently", ftr.AGIDs).AppendLine();
return sb.ToString();
@@ -4992,8 +4997,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_010E ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_010E ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("Drive supports DVD-Download");
if(ftr.Current) sb.AppendLine(" (current)");
@@ -5010,8 +5015,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0110 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0110 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine(ftr.Current ? "Drive and currently inserted media support VCPS" : "Drive supports VCPS");
@@ -5022,8 +5027,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0113 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0113 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine(ftr.Current
? "Drive and currently inserted media support SecurDisc"
@@ -5036,8 +5041,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
if(!feature.HasValue) return null;
- Feature_0142 ftr = feature.Value;
- StringBuilder sb = new StringBuilder();
+ Feature_0142 ftr = feature.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Drive supports the Trusted Computing Group Optical Security Subsystem Class");
@@ -5348,10 +5353,10 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
SeparatedFeatures dec = new SeparatedFeatures
{
- DataLength = (uint)((response[0] << 24) + (response[1] << 16) + (response[2] << 8) + response[4]),
- CurrentProfile = (ushort)((response[6] << 8) + response[7])
+ DataLength = (uint)((response[0] << 24) + (response[1] << 16) + (response[2] << 8) + response[4]),
+ CurrentProfile = (ushort)((response[6] << 8) + response[7])
};
- uint offset = 8;
+ uint offset = 8;
List descLst = new List();
while(offset + 4 < response.Length)
@@ -5387,8 +5392,8 @@ namespace DiscImageChef.Decoders.SCSI.MMC
[SuppressMessage("ReSharper", "NotAccessedField.Global")]
public struct SeparatedFeatures
{
- public uint DataLength;
- public ushort CurrentProfile;
+ public uint DataLength;
+ public ushort CurrentProfile;
public FeatureDescriptor[] Descriptors;
}
}
diff --git a/SCSI/MMC/Hybrid.cs b/SCSI/MMC/Hybrid.cs
index 2756e9e01..0535b4513 100644
--- a/SCSI/MMC/Hybrid.cs
+++ b/SCSI/MMC/Hybrid.cs
@@ -116,14 +116,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
- decoded.DataLength = BigEndianBitConverter.ToUInt16(FormatLayersResponse, 0);
- decoded.Reserved1 = FormatLayersResponse[2];
- decoded.Reserved2 = FormatLayersResponse[3];
- decoded.NumberOfLayers = FormatLayersResponse[4];
- decoded.Reserved3 = (byte)((FormatLayersResponse[5] & 0xC0) >> 6);
+ decoded.DataLength = BigEndianBitConverter.ToUInt16(FormatLayersResponse, 0);
+ decoded.Reserved1 = FormatLayersResponse[2];
+ decoded.Reserved2 = FormatLayersResponse[3];
+ decoded.NumberOfLayers = FormatLayersResponse[4];
+ decoded.Reserved3 = (byte)((FormatLayersResponse[5] & 0xC0) >> 6);
decoded.DefaultFormatLayer = (byte)((FormatLayersResponse[5] & 0x30) >> 4);
- decoded.Reserved4 = (byte)((FormatLayersResponse[5] & 0x0C) >> 2);
- decoded.OnlineFormatLayer = (byte)(FormatLayersResponse[5] & 0x03);
+ decoded.Reserved4 = (byte)((FormatLayersResponse[5] & 0x0C) >> 2);
+ decoded.OnlineFormatLayer = (byte)(FormatLayersResponse[5] & 0x03);
decoded.FormatLayers = new ushort[(FormatLayersResponse.Length - 6) / 2];
@@ -150,28 +150,28 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{
sb.AppendFormat("Layer {0} is of type Blu-ray", i).AppendLine();
if(response.DefaultFormatLayer == i) sb.AppendLine("This is the default layer.");
- if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
+ if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break;
}
case (ushort)FormatLayerTypeCodes.CDLayer:
{
sb.AppendFormat("Layer {0} is of type CD", i).AppendLine();
if(response.DefaultFormatLayer == i) sb.AppendLine("This is the default layer.");
- if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
+ if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break;
}
case (ushort)FormatLayerTypeCodes.DVDLayer:
{
sb.AppendFormat("Layer {0} is of type DVD", i).AppendLine();
if(response.DefaultFormatLayer == i) sb.AppendLine("This is the default layer.");
- if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
+ if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break;
}
case (ushort)FormatLayerTypeCodes.HDDVDLayer:
{
sb.AppendFormat("Layer {0} is of type HD DVD", i).AppendLine();
if(response.DefaultFormatLayer == i) sb.AppendLine("This is the default layer.");
- if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
+ if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break;
}
default:
@@ -179,7 +179,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
sb.AppendFormat("Layer {0} is of unknown type 0x{1:X4}", i, response.FormatLayers[i])
.AppendLine();
if(response.DefaultFormatLayer == i) sb.AppendLine("This is the default layer.");
- if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
+ if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break;
}
}
diff --git a/SCSI/MMC/WriteProtect.cs b/SCSI/MMC/WriteProtect.cs
index 1ad0fedb8..ad3307389 100644
--- a/SCSI/MMC/WriteProtect.cs
+++ b/SCSI/MMC/WriteProtect.cs
@@ -125,16 +125,16 @@ namespace DiscImageChef.Decoders.SCSI.MMC
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(WPSResponse, 0);
- decoded.Reserved1 = WPSResponse[2];
- decoded.Reserved2 = WPSResponse[3];
- decoded.Reserved3 = (byte)((WPSResponse[4] & 0xF0) >> 4);
- decoded.MSWI = Convert.ToBoolean(WPSResponse[4] & 0x08);
- decoded.CWP = Convert.ToBoolean(WPSResponse[4] & 0x04);
- decoded.PWP = Convert.ToBoolean(WPSResponse[4] & 0x02);
- decoded.SWPP = Convert.ToBoolean(WPSResponse[4] & 0x01);
- decoded.Reserved4 = WPSResponse[5];
- decoded.Reserved5 = WPSResponse[6];
- decoded.Reserved6 = WPSResponse[7];
+ decoded.Reserved1 = WPSResponse[2];
+ decoded.Reserved2 = WPSResponse[3];
+ decoded.Reserved3 = (byte)((WPSResponse[4] & 0xF0) >> 4);
+ decoded.MSWI = Convert.ToBoolean(WPSResponse[4] & 0x08);
+ decoded.CWP = Convert.ToBoolean(WPSResponse[4] & 0x04);
+ decoded.PWP = Convert.ToBoolean(WPSResponse[4] & 0x02);
+ decoded.SWPP = Convert.ToBoolean(WPSResponse[4] & 0x01);
+ decoded.Reserved4 = WPSResponse[5];
+ decoded.Reserved5 = WPSResponse[6];
+ decoded.Reserved6 = WPSResponse[7];
return decoded;
}
@@ -152,14 +152,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(response.PWP) sb.AppendLine("Media surface sets write protection");
if(response.SWPP) sb.AppendLine("Software write protection is set until power down");
-#if DEBUG
+ #if DEBUG
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
if(response.Reserved3 != 0) sb.AppendFormat("Reserved3 = 0x{0:X2}", response.Reserved3).AppendLine();
if(response.Reserved4 != 0) sb.AppendFormat("Reserved4 = 0x{0:X2}", response.Reserved4).AppendLine();
if(response.Reserved5 != 0) sb.AppendFormat("Reserved5 = 0x{0:X2}", response.Reserved5).AppendLine();
if(response.Reserved6 != 0) sb.AppendFormat("Reserved6 = 0x{0:X2}", response.Reserved6).AppendLine();
-#endif
+ #endif
return sb.ToString();
}
diff --git a/SCSI/Modes/00_SFF.cs b/SCSI/Modes/00_SFF.cs
index d03542e64..8844dcdbf 100644
--- a/SCSI/Modes/00_SFF.cs
+++ b/SCSI/Modes/00_SFF.cs
@@ -103,7 +103,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_00_SFF page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Drive Operation Mode page:");
diff --git a/SCSI/Modes/01.cs b/SCSI/Modes/01.cs
index 4b84e6f4f..8cffdf546 100644
--- a/SCSI/Modes/01.cs
+++ b/SCSI/Modes/01.cs
@@ -127,26 +127,26 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_01 decoded = new ModePage_01();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.AWRE |= (pageResponse[2] & 0x80) == 0x80;
decoded.ARRE |= (pageResponse[2] & 0x40) == 0x40;
- decoded.TB |= (pageResponse[2] & 0x20) == 0x20;
- decoded.RC |= (pageResponse[2] & 0x10) == 0x10;
- decoded.EER |= (pageResponse[2] & 0x08) == 0x08;
- decoded.PER |= (pageResponse[2] & 0x04) == 0x04;
- decoded.DTE |= (pageResponse[2] & 0x02) == 0x02;
- decoded.DCR |= (pageResponse[2] & 0x01) == 0x01;
+ decoded.TB |= (pageResponse[2] & 0x20) == 0x20;
+ decoded.RC |= (pageResponse[2] & 0x10) == 0x10;
+ decoded.EER |= (pageResponse[2] & 0x08) == 0x08;
+ decoded.PER |= (pageResponse[2] & 0x04) == 0x04;
+ decoded.DTE |= (pageResponse[2] & 0x02) == 0x02;
+ decoded.DCR |= (pageResponse[2] & 0x01) == 0x01;
- decoded.ReadRetryCount = pageResponse[3];
- decoded.CorrectionSpan = pageResponse[4];
- decoded.HeadOffsetCount = (sbyte)pageResponse[5];
+ decoded.ReadRetryCount = pageResponse[3];
+ decoded.CorrectionSpan = pageResponse[4];
+ decoded.HeadOffsetCount = (sbyte)pageResponse[5];
decoded.DataStrobeOffsetCount = (sbyte)pageResponse[6];
if(pageResponse.Length < 12) return decoded;
- decoded.WriteRetryCount = pageResponse[8];
- decoded.RecoveryTimeLimit = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
- decoded.LBPERE |= (pageResponse[7] & 0x80) == 0x80;
+ decoded.WriteRetryCount = pageResponse[8];
+ decoded.RecoveryTimeLimit = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
+ decoded.LBPERE |= (pageResponse[7] & 0x80) == 0x80;
return decoded;
}
@@ -160,8 +160,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_01 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_01 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Read-write error recovery page:");
@@ -197,15 +197,15 @@ namespace DiscImageChef.Decoders.SCSI
pg[0] = 0x01;
pg[1] = 6;
- if(page.PS) pg[0] += 0x80;
+ if(page.PS) pg[0] += 0x80;
if(page.AWRE) pg[2] += 0x80;
if(page.ARRE) pg[2] += 0x40;
- if(page.TB) pg[2] += 0x20;
- if(page.RC) pg[2] += 0x10;
- if(page.EER) pg[2] += 0x08;
- if(page.PER) pg[2] += 0x04;
- if(page.DTE) pg[2] += 0x02;
- if(page.DCR) pg[2] += 0x01;
+ if(page.TB) pg[2] += 0x20;
+ if(page.RC) pg[2] += 0x10;
+ if(page.EER) pg[2] += 0x08;
+ if(page.PER) pg[2] += 0x04;
+ if(page.DTE) pg[2] += 0x02;
+ if(page.DCR) pg[2] += 0x01;
pg[3] = page.ReadRetryCount;
pg[4] = page.CorrectionSpan;
diff --git a/SCSI/Modes/01_MMC.cs b/SCSI/Modes/01_MMC.cs
index fc750aae1..3230f2e05 100644
--- a/SCSI/Modes/01_MMC.cs
+++ b/SCSI/Modes/01_MMC.cs
@@ -83,13 +83,13 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_01_MMC decoded = new ModePage_01_MMC();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.Parameter = pageResponse[2];
- decoded.ReadRetryCount = pageResponse[3];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.Parameter = pageResponse[2];
+ decoded.ReadRetryCount = pageResponse[3];
if(pageResponse.Length < 12) return decoded;
- decoded.WriteRetryCount = pageResponse[8];
+ decoded.WriteRetryCount = pageResponse[8];
decoded.RecoveryTimeLimit = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
return decoded;
@@ -105,7 +105,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_01_MMC page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Read error recovery page for MultiMedia Devices:");
@@ -113,17 +113,18 @@ namespace DiscImageChef.Decoders.SCSI
if(page.ReadRetryCount > 0)
sb.AppendFormat("\tDrive will repeat read operations {0} times", page.ReadRetryCount).AppendLine();
- string AllUsed = "\tAll available recovery procedures will be used.\n";
- string CIRCRetriesUsed = "\tOnly retries and CIRC are used.\n";
- string RetriesUsed = "\tOnly retries are used.\n";
+ string AllUsed = "\tAll available recovery procedures will be used.\n";
+ string CIRCRetriesUsed = "\tOnly retries and CIRC are used.\n";
+ string RetriesUsed = "\tOnly retries are used.\n";
string RecoveredNotReported = "\tRecovered errors will not be reported.\n";
- string RecoveredReported = "\tRecovered errors will be reported.\n";
- string RecoveredAbort = "\tRecovered errors will be reported and aborted with CHECK CONDITION.\n";
- string UnrecECCAbort = "\tUnrecovered ECC errors will return CHECK CONDITION.";
- string UnrecCIRCAbort = "\tUnrecovered CIRC errors will return CHECK CONDITION.";
- string UnrecECCNotAbort = "\tUnrecovered ECC errors will not abort the transfer.";
- string UnrecCIRCNotAbort = "\tUnrecovered CIRC errors will not abort the transfer.";
- string UnrecECCAbortData = "\tUnrecovered ECC errors will return CHECK CONDITION and the uncorrected data.";
+ string RecoveredReported = "\tRecovered errors will be reported.\n";
+ string RecoveredAbort = "\tRecovered errors will be reported and aborted with CHECK CONDITION.\n";
+ string UnrecECCAbort = "\tUnrecovered ECC errors will return CHECK CONDITION.";
+ string UnrecCIRCAbort = "\tUnrecovered CIRC errors will return CHECK CONDITION.";
+ string UnrecECCNotAbort = "\tUnrecovered ECC errors will not abort the transfer.";
+ string UnrecCIRCNotAbort = "\tUnrecovered CIRC errors will not abort the transfer.";
+ string UnrecECCAbortData =
+ "\tUnrecovered ECC errors will return CHECK CONDITION and the uncorrected data.";
string UnrecCIRCAbortData =
"\tUnrecovered CIRC errors will return CHECK CONDITION and the uncorrected data.";
@@ -209,7 +210,7 @@ namespace DiscImageChef.Decoders.SCSI
// This is from a newer version of SCSI unknown what happen for drives expecting an 8 byte page
- pg[8] = page.WriteRetryCount;
+ pg[8] = page.WriteRetryCount;
pg[10] = (byte)((page.RecoveryTimeLimit & 0xFF00) << 8);
pg[11] = (byte)(page.RecoveryTimeLimit & 0xFF);
diff --git a/SCSI/Modes/02.cs b/SCSI/Modes/02.cs
index 84e2d7380..071e3e611 100644
--- a/SCSI/Modes/02.cs
+++ b/SCSI/Modes/02.cs
@@ -112,20 +112,20 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_02 decoded = new ModePage_02();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.BufferFullRatio = pageResponse[2];
- decoded.BufferEmptyRatio = pageResponse[3];
- decoded.BusInactivityLimit = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
- decoded.DisconnectTimeLimit = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
- decoded.ConnectTimeLimit = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
- decoded.MaxBurstSize = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.BufferFullRatio = pageResponse[2];
+ decoded.BufferEmptyRatio = pageResponse[3];
+ decoded.BusInactivityLimit = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
+ decoded.DisconnectTimeLimit = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.ConnectTimeLimit = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
+ decoded.MaxBurstSize = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
if(pageResponse.Length >= 13)
{
- decoded.EMDP |= (pageResponse[12] & 0x80) == 0x80;
- decoded.DIMM |= (pageResponse[12] & 0x08) == 0x08;
- decoded.FairArbitration = (byte)((pageResponse[12] & 0x70) >> 4);
- decoded.DTDC = (byte)(pageResponse[12] & 0x07);
+ decoded.EMDP |= (pageResponse[12] & 0x80) == 0x80;
+ decoded.DIMM |= (pageResponse[12] & 0x08) == 0x08;
+ decoded.FairArbitration = (byte)((pageResponse[12] & 0x70) >> 4);
+ decoded.DTDC = (byte)(pageResponse[12] & 0x07);
}
if(pageResponse.Length >= 16) decoded.FirstBurstSize = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
@@ -142,8 +142,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_02 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_02 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Disconnect-Reconnect mode page:");
@@ -162,15 +162,15 @@ namespace DiscImageChef.Decoders.SCSI
page.DisconnectTimeLimit * 100).AppendLine();
if(page.ConnectTimeLimit > 0)
sb
- .AppendFormat("\t{0} µs allowed to use the bus before disconnecting, if granted the privilege and not restricted",
- page.ConnectTimeLimit * 100).AppendLine();
+ .AppendFormat("\t{0} µs allowed to use the bus before disconnecting, if granted the privilege and not restricted",
+ page.ConnectTimeLimit * 100).AppendLine();
if(page.MaxBurstSize > 0)
sb.AppendFormat("\t{0} bytes maximum can be transferred before disconnecting", page.MaxBurstSize * 512)
.AppendLine();
if(page.FirstBurstSize > 0)
sb
- .AppendFormat("\t{0} bytes maximum can be transferred for a command along with the disconnect command",
- page.FirstBurstSize * 512).AppendLine();
+ .AppendFormat("\t{0} bytes maximum can be transferred for a command along with the disconnect command",
+ page.FirstBurstSize * 512).AppendLine();
if(page.DIMM)
sb.AppendLine("\tTarget shall not transfer data for a command during the same interconnect tenancy");
diff --git a/SCSI/Modes/03.cs b/SCSI/Modes/03.cs
index f6e0549a3..2128d9701 100644
--- a/SCSI/Modes/03.cs
+++ b/SCSI/Modes/03.cs
@@ -119,20 +119,20 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_03 decoded = new ModePage_03();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.TracksPerZone = (ushort)((pageResponse[2] << 8) + pageResponse[3]);
- decoded.AltSectorsPerZone = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
- decoded.AltTracksPerZone = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
- decoded.AltTracksPerLun = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
- decoded.SectorsPerTrack = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
- decoded.BytesPerSector = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
- decoded.Interleave = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
- decoded.TrackSkew = (ushort)((pageResponse[16] << 8) + pageResponse[17]);
- decoded.CylinderSkew = (ushort)((pageResponse[18] << 8) + pageResponse[19]);
- decoded.SSEC |= (pageResponse[20] & 0x80) == 0x80;
- decoded.HSEC |= (pageResponse[20] & 0x40) == 0x40;
- decoded.RMB |= (pageResponse[20] & 0x20) == 0x20;
- decoded.SURF |= (pageResponse[20] & 0x10) == 0x10;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.TracksPerZone = (ushort)((pageResponse[2] << 8) + pageResponse[3]);
+ decoded.AltSectorsPerZone = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
+ decoded.AltTracksPerZone = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.AltTracksPerLun = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
+ decoded.SectorsPerTrack = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
+ decoded.BytesPerSector = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
+ decoded.Interleave = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
+ decoded.TrackSkew = (ushort)((pageResponse[16] << 8) + pageResponse[17]);
+ decoded.CylinderSkew = (ushort)((pageResponse[18] << 8) + pageResponse[19]);
+ decoded.SSEC |= (pageResponse[20] & 0x80) == 0x80;
+ decoded.HSEC |= (pageResponse[20] & 0x40) == 0x40;
+ decoded.RMB |= (pageResponse[20] & 0x20) == 0x20;
+ decoded.SURF |= (pageResponse[20] & 0x10) == 0x10;
return decoded;
}
@@ -146,16 +146,16 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_03 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_03 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Format device page:");
if(page.PS) sb.AppendLine("\tParameters can be saved");
sb
- .AppendFormat("\t{0} tracks per zone to use in dividing the capacity for the purpose of allocating alternate sectors",
- page.TracksPerZone).AppendLine();
+ .AppendFormat("\t{0} tracks per zone to use in dividing the capacity for the purpose of allocating alternate sectors",
+ page.TracksPerZone).AppendLine();
sb.AppendFormat("\t{0} sectors per zone that shall be reserved for defect handling", page.AltSectorsPerZone)
.AppendLine();
sb.AppendFormat("\t{0} tracks per zone that shall be reserved for defect handling", page.AltTracksPerZone)
diff --git a/SCSI/Modes/04.cs b/SCSI/Modes/04.cs
index 60bec2dbc..8834ed481 100644
--- a/SCSI/Modes/04.cs
+++ b/SCSI/Modes/04.cs
@@ -102,14 +102,16 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_04 decoded = new ModePage_04();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.Cylinders = (uint)((pageResponse[2] << 16) + (pageResponse[3] << 8) + pageResponse[4]);
- decoded.Heads = pageResponse[5];
- decoded.WritePrecompCylinder = (uint)((pageResponse[6] << 16) + (pageResponse[7] << 8) + pageResponse[8]);
- decoded.WriteReduceCylinder = (uint)((pageResponse[9] << 16) + (pageResponse[10] << 8) + pageResponse[11]);
- decoded.DriveStepRate = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
- decoded.LandingCylinder = (pageResponse[14] << 16) + (pageResponse[15] << 8) + pageResponse[16];
- decoded.RPL = (byte)(pageResponse[17] & 0x03);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.Cylinders = (uint)((pageResponse[2] << 16) + (pageResponse[3] << 8) + pageResponse[4]);
+ decoded.Heads = pageResponse[5];
+ decoded.WritePrecompCylinder = (uint)((pageResponse[6] << 16) + (pageResponse[7] << 8) + pageResponse[8]);
+ decoded.WriteReduceCylinder =
+ (uint)((pageResponse[9] << 16) + (pageResponse[10] << 8) + pageResponse[11]);
+ decoded.DriveStepRate =
+ (ushort)((pageResponse[12] << 8) + pageResponse[13]);
+ decoded.LandingCylinder = (pageResponse[14] << 16) + (pageResponse[15] << 8) + pageResponse[16];
+ decoded.RPL = (byte)(pageResponse[17] & 0x03);
decoded.RotationalOffset = pageResponse[18];
if(pageResponse.Length >= 22)
@@ -127,8 +129,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_04 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_04 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Rigid disk drive geometry page:");
diff --git a/SCSI/Modes/05.cs b/SCSI/Modes/05.cs
index 3e7badb81..d4207a637 100644
--- a/SCSI/Modes/05.cs
+++ b/SCSI/Modes/05.cs
@@ -167,31 +167,31 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_05 decoded = new ModePage_05();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.TransferRate = (ushort)((pageResponse[2] << 8) + pageResponse[3]);
- decoded.Heads = pageResponse[4];
- decoded.SectorsPerTrack = pageResponse[5];
- decoded.BytesPerSector = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
- decoded.Cylinders = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
- decoded.WritePrecompCylinder = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
- decoded.WriteReduceCylinder = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
- decoded.DriveStepRate = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
- decoded.DriveStepPulse = pageResponse[16];
- decoded.HeadSettleDelay = (ushort)((pageResponse[17] << 8) + pageResponse[18]);
- decoded.MotorOnDelay = pageResponse[19];
- decoded.MotorOffDelay = pageResponse[20];
- decoded.TRDY |= (pageResponse[21] & 0x80) == 0x80;
- decoded.SSN |= (pageResponse[21] & 0x40) == 0x40;
- decoded.MO |= (pageResponse[21] & 0x20) == 0x20;
- decoded.SPC = (byte)(pageResponse[22] & 0x0F);
- decoded.WriteCompensation = pageResponse[23];
- decoded.HeadLoadDelay = pageResponse[24];
- decoded.HeadUnloadDelay = pageResponse[25];
- decoded.Pin34 = (byte)((pageResponse[26] & 0xF0) >> 4);
- decoded.Pin2 = (byte)(pageResponse[26] & 0x0F);
- decoded.Pin4 = (byte)((pageResponse[27] & 0xF0) >> 4);
- decoded.Pin1 = (byte)(pageResponse[27] & 0x0F);
- decoded.MediumRotationRate = (ushort)((pageResponse[28] << 8) + pageResponse[29]);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.TransferRate = (ushort)((pageResponse[2] << 8) + pageResponse[3]);
+ decoded.Heads = pageResponse[4];
+ decoded.SectorsPerTrack = pageResponse[5];
+ decoded.BytesPerSector = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.Cylinders = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
+ decoded.WritePrecompCylinder = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
+ decoded.WriteReduceCylinder = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
+ decoded.DriveStepRate = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
+ decoded.DriveStepPulse = pageResponse[16];
+ decoded.HeadSettleDelay = (ushort)((pageResponse[17] << 8) + pageResponse[18]);
+ decoded.MotorOnDelay = pageResponse[19];
+ decoded.MotorOffDelay = pageResponse[20];
+ decoded.TRDY |= (pageResponse[21] & 0x80) == 0x80;
+ decoded.SSN |= (pageResponse[21] & 0x40) == 0x40;
+ decoded.MO |= (pageResponse[21] & 0x20) == 0x20;
+ decoded.SPC = (byte)(pageResponse[22] & 0x0F);
+ decoded.WriteCompensation = pageResponse[23];
+ decoded.HeadLoadDelay = pageResponse[24];
+ decoded.HeadUnloadDelay = pageResponse[25];
+ decoded.Pin34 = (byte)((pageResponse[26] & 0xF0) >> 4);
+ decoded.Pin2 = (byte)(pageResponse[26] & 0x0F);
+ decoded.Pin4 = (byte)((pageResponse[27] & 0xF0) >> 4);
+ decoded.Pin1 = (byte)(pageResponse[27] & 0x0F);
+ decoded.MediumRotationRate = (ushort)((pageResponse[28] << 8) + pageResponse[29]);
return decoded;
}
@@ -205,8 +205,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_05 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_05 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Flexible disk page:");
@@ -232,17 +232,17 @@ namespace DiscImageChef.Decoders.SCSI
if(!page.TRDY)
sb
- .AppendFormat("\tTarget shall wait {0} seconds before attempting to access the medium after motor on is asserted",
- (double)page.MotorOnDelay * 10).AppendLine();
+ .AppendFormat("\tTarget shall wait {0} seconds before attempting to access the medium after motor on is asserted",
+ (double)page.MotorOnDelay * 10).AppendLine();
else
sb
- .AppendFormat("\tTarget shall wait {0} seconds after drive is ready before aborting medium access attemps",
- (double)page.MotorOnDelay * 10).AppendLine();
+ .AppendFormat("\tTarget shall wait {0} seconds after drive is ready before aborting medium access attemps",
+ (double)page.MotorOnDelay * 10).AppendLine();
if(page.MotorOffDelay != 0xFF)
sb
- .AppendFormat("\tTarget shall wait {0} seconds before releasing the motor on signal after becoming idle",
- (double)page.MotorOffDelay * 10).AppendLine();
+ .AppendFormat("\tTarget shall wait {0} seconds before releasing the motor on signal after becoming idle",
+ (double)page.MotorOffDelay * 10).AppendLine();
else sb.AppendLine("\tTarget shall never release the motor on signal");
if(page.TRDY) sb.AppendLine("\tThere is a drive ready signal");
diff --git a/SCSI/Modes/06.cs b/SCSI/Modes/06.cs
index 2de55c080..12f642441 100644
--- a/SCSI/Modes/06.cs
+++ b/SCSI/Modes/06.cs
@@ -70,7 +70,7 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_06 decoded = new ModePage_06();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.RUBR |= (pageResponse[2] & 0x01) == 0x01;
return decoded;
@@ -85,8 +85,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_06 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_06 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI optical memory:");
diff --git a/SCSI/Modes/07.cs b/SCSI/Modes/07.cs
index 7ca4d38f7..b61426d12 100644
--- a/SCSI/Modes/07.cs
+++ b/SCSI/Modes/07.cs
@@ -95,14 +95,14 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_07 decoded = new ModePage_07();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.EER |= (pageResponse[2] & 0x08) == 0x08;
decoded.PER |= (pageResponse[2] & 0x04) == 0x04;
decoded.DTE |= (pageResponse[2] & 0x02) == 0x02;
decoded.DCR |= (pageResponse[2] & 0x01) == 0x01;
- decoded.VerifyRetryCount = pageResponse[3];
- decoded.CorrectionSpan = pageResponse[4];
+ decoded.VerifyRetryCount = pageResponse[3];
+ decoded.CorrectionSpan = pageResponse[4];
decoded.RecoveryTimeLimit = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
return decoded;
@@ -117,8 +117,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_07 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_07 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Verify error recovery page:");
diff --git a/SCSI/Modes/07_MMC.cs b/SCSI/Modes/07_MMC.cs
index 8a3e802b8..0f3c6e46d 100644
--- a/SCSI/Modes/07_MMC.cs
+++ b/SCSI/Modes/07_MMC.cs
@@ -74,9 +74,9 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_07_MMC decoded = new ModePage_07_MMC();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.Parameter = pageResponse[2];
- decoded.VerifyRetryCount = pageResponse[3];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.Parameter = pageResponse[2];
+ decoded.VerifyRetryCount = pageResponse[3];
return decoded;
}
@@ -91,7 +91,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_07_MMC page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Verify error recovery page for MultiMedia Devices:");
@@ -99,17 +99,18 @@ namespace DiscImageChef.Decoders.SCSI
if(page.VerifyRetryCount > 0)
sb.AppendFormat("\tDrive will repeat verify operations {0} times", page.VerifyRetryCount).AppendLine();
- string AllUsed = "\tAll available recovery procedures will be used.\n";
- string CIRCRetriesUsed = "\tOnly retries and CIRC are used.\n";
- string RetriesUsed = "\tOnly retries are used.\n";
+ string AllUsed = "\tAll available recovery procedures will be used.\n";
+ string CIRCRetriesUsed = "\tOnly retries and CIRC are used.\n";
+ string RetriesUsed = "\tOnly retries are used.\n";
string RecoveredNotReported = "\tRecovered errors will not be reported.\n";
- string RecoveredReported = "\tRecovered errors will be reported.\n";
- string RecoveredAbort = "\tRecovered errors will be reported and aborted with CHECK CONDITION.\n";
- string UnrecECCAbort = "\tUnrecovered ECC errors will return CHECK CONDITION.";
- string UnrecCIRCAbort = "\tUnrecovered CIRC errors will return CHECK CONDITION.";
- string UnrecECCNotAbort = "\tUnrecovered ECC errors will not abort the transfer.";
- string UnrecCIRCNotAbort = "\tUnrecovered CIRC errors will not abort the transfer.";
- string UnrecECCAbortData = "\tUnrecovered ECC errors will return CHECK CONDITION and the uncorrected data.";
+ string RecoveredReported = "\tRecovered errors will be reported.\n";
+ string RecoveredAbort = "\tRecovered errors will be reported and aborted with CHECK CONDITION.\n";
+ string UnrecECCAbort = "\tUnrecovered ECC errors will return CHECK CONDITION.";
+ string UnrecCIRCAbort = "\tUnrecovered CIRC errors will return CHECK CONDITION.";
+ string UnrecECCNotAbort = "\tUnrecovered ECC errors will not abort the transfer.";
+ string UnrecCIRCNotAbort = "\tUnrecovered CIRC errors will not abort the transfer.";
+ string UnrecECCAbortData =
+ "\tUnrecovered ECC errors will return CHECK CONDITION and the uncorrected data.";
string UnrecCIRCAbortData =
"\tUnrecovered CIRC errors will return CHECK CONDITION and the uncorrected data.";
diff --git a/SCSI/Modes/08.cs b/SCSI/Modes/08.cs
index 84d5afca7..55ef31d99 100644
--- a/SCSI/Modes/08.cs
+++ b/SCSI/Modes/08.cs
@@ -150,32 +150,32 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_08 decoded = new ModePage_08();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.WCE |= (pageResponse[2] & 0x04) == 0x04;
- decoded.MF |= (pageResponse[2] & 0x02) == 0x02;
+ decoded.MF |= (pageResponse[2] & 0x02) == 0x02;
decoded.RCD |= (pageResponse[2] & 0x01) == 0x01;
decoded.DemandReadRetentionPrio = (byte)((pageResponse[3] & 0xF0) >> 4);
- decoded.WriteRetentionPriority = (byte)(pageResponse[3] & 0x0F);
- decoded.DisablePreFetch = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
- decoded.MinimumPreFetch = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
- decoded.MaximumPreFetch = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
- decoded.MaximumPreFetchCeiling = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
+ decoded.WriteRetentionPriority = (byte)(pageResponse[3] & 0x0F);
+ decoded.DisablePreFetch = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
+ decoded.MinimumPreFetch = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.MaximumPreFetch = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
+ decoded.MaximumPreFetchCeiling = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
if(pageResponse.Length < 20) return decoded;
- decoded.IC |= (pageResponse[2] & 0x80) == 0x80;
+ decoded.IC |= (pageResponse[2] & 0x80) == 0x80;
decoded.ABPF |= (pageResponse[2] & 0x40) == 0x40;
- decoded.CAP |= (pageResponse[2] & 0x20) == 0x20;
+ decoded.CAP |= (pageResponse[2] & 0x20) == 0x20;
decoded.Disc |= (pageResponse[2] & 0x10) == 0x10;
decoded.Size |= (pageResponse[2] & 0x08) == 0x08;
- decoded.FSW |= (pageResponse[12] & 0x80) == 0x80;
+ decoded.FSW |= (pageResponse[12] & 0x80) == 0x80;
decoded.LBCSS |= (pageResponse[12] & 0x40) == 0x40;
- decoded.DRA |= (pageResponse[12] & 0x20) == 0x20;
+ decoded.DRA |= (pageResponse[12] & 0x20) == 0x20;
- decoded.CacheSegments = pageResponse[13];
- decoded.CacheSegmentSize = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
+ decoded.CacheSegments = pageResponse[13];
+ decoded.CacheSegmentSize = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
decoded.NonCacheSegmentSize = (uint)((pageResponse[17] << 16) + (pageResponse[18] << 8) + pageResponse[19]);
decoded.NV_DIS |= (pageResponse[12] & 0x01) == 0x01;
@@ -192,8 +192,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_08 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_08 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Caching mode page:");
@@ -254,8 +254,8 @@ namespace DiscImageChef.Decoders.SCSI
.AppendLine();
if(page.MaximumPreFetchCeiling > 0)
sb
- .AppendFormat("\tA maximum of {0} blocks will be pre-fetched even if it is commanded to pre-fetch more",
- page.MaximumPreFetchCeiling).AppendLine();
+ .AppendFormat("\tA maximum of {0} blocks will be pre-fetched even if it is commanded to pre-fetch more",
+ page.MaximumPreFetchCeiling).AppendLine();
if(page.IC)
sb.AppendLine("\tDevice should use number of cache segments or cache segment size for caching");
@@ -286,8 +286,8 @@ namespace DiscImageChef.Decoders.SCSI
if(page.NonCacheSegmentSize > 0)
sb
- .AppendFormat("\tDrive shall allocate {0} bytes to buffer even when all cached data cannot be evicted",
- page.NonCacheSegmentSize).AppendLine();
+ .AppendFormat("\tDrive shall allocate {0} bytes to buffer even when all cached data cannot be evicted",
+ page.NonCacheSegmentSize).AppendLine();
if(page.NV_DIS) sb.AppendLine("\tNon-Volatile cache is disabled");
diff --git a/SCSI/Modes/0A.cs b/SCSI/Modes/0A.cs
index 1c3064f3f..3040b4d09 100644
--- a/SCSI/Modes/0A.cs
+++ b/SCSI/Modes/0A.cs
@@ -177,17 +177,17 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_0A decoded = new ModePage_0A();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.RLEC |= (pageResponse[2] & 0x01) == 0x01;
decoded.QueueAlgorithm = (byte)((pageResponse[3] & 0xF0) >> 4);
- decoded.QErr = (byte)((pageResponse[3] & 0x06) >> 1);
+ decoded.QErr = (byte)((pageResponse[3] & 0x06) >> 1);
- decoded.DQue |= (pageResponse[3] & 0x01) == 0x01;
- decoded.EECA |= (pageResponse[4] & 0x80) == 0x80;
- decoded.RAENP |= (pageResponse[4] & 0x04) == 0x04;
+ decoded.DQue |= (pageResponse[3] & 0x01) == 0x01;
+ decoded.EECA |= (pageResponse[4] & 0x80) == 0x80;
+ decoded.RAENP |= (pageResponse[4] & 0x04) == 0x04;
decoded.UAAENP |= (pageResponse[4] & 0x02) == 0x02;
- decoded.EAENP |= (pageResponse[4] & 0x01) == 0x01;
+ decoded.EAENP |= (pageResponse[4] & 0x01) == 0x01;
decoded.ReadyAENHoldOffPeriod = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
@@ -195,30 +195,30 @@ namespace DiscImageChef.Decoders.SCSI
// SPC-1
decoded.GLTSD |= (pageResponse[2] & 0x02) == 0x02;
- decoded.RAC |= (pageResponse[4] & 0x40) == 0x40;
- decoded.SWP |= (pageResponse[4] & 0x08) == 0x08;
+ decoded.RAC |= (pageResponse[4] & 0x40) == 0x40;
+ decoded.SWP |= (pageResponse[4] & 0x08) == 0x08;
decoded.BusyTimeoutPeriod = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
// SPC-2
- decoded.TST = (byte)((pageResponse[2] & 0xE0) >> 5);
- decoded.TAS |= (pageResponse[4] & 0x80) == 0x80;
- decoded.AutoloadMode = (byte)(pageResponse[5] & 0x07);
- decoded.BusyTimeoutPeriod = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
+ decoded.TST = (byte)((pageResponse[2] & 0xE0) >> 5);
+ decoded.TAS |= (pageResponse[4] & 0x80) == 0x80;
+ decoded.AutoloadMode = (byte)(pageResponse[5] & 0x07);
+ decoded.BusyTimeoutPeriod = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
// SPC-3
- decoded.TMF_ONLY |= (pageResponse[2] & 0x10) == 0x10;
- decoded.D_SENSE |= (pageResponse[2] & 0x04) == 0x04;
- decoded.UA_INTLCK_CTRL = (byte)((pageResponse[4] & 0x30) >> 4);
- decoded.TAS |= (pageResponse[5] & 0x40) == 0x40;
- decoded.ATO |= (pageResponse[5] & 0x80) == 0x80;
+ decoded.TMF_ONLY |= (pageResponse[2] & 0x10) == 0x10;
+ decoded.D_SENSE |= (pageResponse[2] & 0x04) == 0x04;
+ decoded.UA_INTLCK_CTRL = (byte)((pageResponse[4] & 0x30) >> 4);
+ decoded.TAS |= (pageResponse[5] & 0x40) == 0x40;
+ decoded.ATO |= (pageResponse[5] & 0x80) == 0x80;
// SPC-5
decoded.DPICZ |= (pageResponse[2] & 0x08) == 0x08;
- decoded.NUAR |= (pageResponse[3] & 0x08) == 0x08;
+ decoded.NUAR |= (pageResponse[3] & 0x08) == 0x08;
decoded.ATMPE |= (pageResponse[5] & 0x20) == 0x20;
- decoded.RWWP |= (pageResponse[5] & 0x10) == 0x10;
- decoded.SBLP |= (pageResponse[5] & 0x08) == 0x08;
+ decoded.RWWP |= (pageResponse[5] & 0x10) == 0x10;
+ decoded.SBLP |= (pageResponse[5] & 0x08) == 0x08;
return decoded;
}
@@ -232,8 +232,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_0A page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_0A page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Control mode page:");
@@ -412,8 +412,8 @@ namespace DiscImageChef.Decoders.SCSI
decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.IALUAE |= (pageResponse[4] & 0x01) == 0x01;
- decoded.SCSIP |= (pageResponse[4] & 0x02) == 0x02;
- decoded.TCMOS |= (pageResponse[4] & 0x04) == 0x04;
+ decoded.SCSIP |= (pageResponse[4] & 0x02) == 0x02;
+ decoded.TCMOS |= (pageResponse[4] & 0x04) == 0x04;
decoded.InitialPriority = (byte)(pageResponse[5] & 0x0F);
@@ -430,7 +430,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_0A_S01 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Control extension page:");
diff --git a/SCSI/Modes/0B.cs b/SCSI/Modes/0B.cs
index 0673c674b..b5b753ba8 100644
--- a/SCSI/Modes/0B.cs
+++ b/SCSI/Modes/0B.cs
@@ -70,11 +70,11 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_0B decoded = new ModePage_0B();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.MediumType1 = (MediumTypes)pageResponse[4];
- decoded.MediumType2 = (MediumTypes)pageResponse[5];
- decoded.MediumType3 = (MediumTypes)pageResponse[6];
- decoded.MediumType4 = (MediumTypes)pageResponse[7];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.MediumType1 = (MediumTypes)pageResponse[4];
+ decoded.MediumType2 = (MediumTypes)pageResponse[5];
+ decoded.MediumType3 = (MediumTypes)pageResponse[6];
+ decoded.MediumType4 = (MediumTypes)pageResponse[7];
return decoded;
}
@@ -88,8 +88,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_0B page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_0B page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Medium types supported page:");
diff --git a/SCSI/Modes/0D.cs b/SCSI/Modes/0D.cs
index 9a52eadf4..edae3552e 100644
--- a/SCSI/Modes/0D.cs
+++ b/SCSI/Modes/0D.cs
@@ -78,10 +78,10 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_0D decoded = new ModePage_0D();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.InactivityTimerMultiplier = (byte)(pageResponse[3] & 0xF);
- decoded.SecondsPerMinute = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
- decoded.FramesPerSecond = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.InactivityTimerMultiplier = (byte)(pageResponse[3] & 0xF);
+ decoded.SecondsPerMinute = (ushort)((pageResponse[4] << 8) + pageResponse[5]);
+ decoded.FramesPerSecond = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
return decoded;
}
@@ -95,8 +95,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_0D page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_0D page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI CD-ROM parameters page:");
diff --git a/SCSI/Modes/0E.cs b/SCSI/Modes/0E.cs
index 404a5712c..2c27c014a 100644
--- a/SCSI/Modes/0E.cs
+++ b/SCSI/Modes/0E.cs
@@ -118,20 +118,20 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_0E decoded = new ModePage_0E();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.Immed |= (pageResponse[2] & 0x04) == 0x04;
- decoded.SOTC |= (pageResponse[2] & 0x02) == 0x02;
- decoded.APRVal |= (pageResponse[5] & 0x80) == 0x80;
- decoded.LBAFormat = (byte)(pageResponse[5] & 0x0F);
- decoded.BlocksPerSecondOfAudio = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
- decoded.OutputPort0ChannelSelection = (byte)(pageResponse[8] & 0x0F);
- decoded.OutputPort0Volume = pageResponse[9];
- decoded.OutputPort1ChannelSelection = (byte)(pageResponse[10] & 0x0F);
- decoded.OutputPort1Volume = pageResponse[11];
- decoded.OutputPort2ChannelSelection = (byte)(pageResponse[12] & 0x0F);
- decoded.OutputPort2Volume = pageResponse[13];
- decoded.OutputPort3ChannelSelection = (byte)(pageResponse[14] & 0x0F);
- decoded.OutputPort3Volume = pageResponse[15];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.Immed |= (pageResponse[2] & 0x04) == 0x04;
+ decoded.SOTC |= (pageResponse[2] & 0x02) == 0x02;
+ decoded.APRVal |= (pageResponse[5] & 0x80) == 0x80;
+ decoded.LBAFormat = (byte)(pageResponse[5] & 0x0F);
+ decoded.BlocksPerSecondOfAudio = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.OutputPort0ChannelSelection = (byte)(pageResponse[8] & 0x0F);
+ decoded.OutputPort0Volume = pageResponse[9];
+ decoded.OutputPort1ChannelSelection = (byte)(pageResponse[10] & 0x0F);
+ decoded.OutputPort1Volume = pageResponse[11];
+ decoded.OutputPort2ChannelSelection = (byte)(pageResponse[12] & 0x0F);
+ decoded.OutputPort2Volume = pageResponse[13];
+ decoded.OutputPort3ChannelSelection = (byte)(pageResponse[14] & 0x0F);
+ decoded.OutputPort3Volume = pageResponse[15];
return decoded;
}
@@ -145,8 +145,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_0E page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_0E page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI CD-ROM audio control parameters page:");
@@ -160,7 +160,7 @@ namespace DiscImageChef.Decoders.SCSI
{
double blocks;
if(page.LBAFormat == 8) blocks = page.BlocksPerSecondOfAudio * (1 / 256);
- else blocks = page.BlocksPerSecondOfAudio;
+ else blocks = page.BlocksPerSecondOfAudio;
sb.AppendFormat("\tThere are {0} blocks per each second of audio", blocks).AppendLine();
}
diff --git a/SCSI/Modes/0F.cs b/SCSI/Modes/0F.cs
index b46f4caa5..52ac20b5a 100644
--- a/SCSI/Modes/0F.cs
+++ b/SCSI/Modes/0F.cs
@@ -95,12 +95,12 @@ namespace DiscImageChef.Decoders.SCSI
decoded.DCE |= (pageResponse[2] & 0x80) == 0x80;
decoded.DCC |= (pageResponse[2] & 0x40) == 0x40;
decoded.DDE |= (pageResponse[3] & 0x80) == 0x80;
- decoded.RED = (byte)((pageResponse[3] & 0x60) >> 5);
+ decoded.RED = (byte)((pageResponse[3] & 0x60) >> 5);
decoded.CompressionAlgo = (uint)((pageResponse[4] << 24) + (pageResponse[5] << 16) +
- (pageResponse[6] << 8) + pageResponse[7]);
- decoded.DecompressionAlgo = (uint)((pageResponse[8] << 24) + (pageResponse[9] << 16) +
- (pageResponse[10] << 8) + pageResponse[11]);
+ (pageResponse[6] << 8) + pageResponse[7]);
+ decoded.DecompressionAlgo = (uint)((pageResponse[8] << 24) + (pageResponse[9] << 16) +
+ (pageResponse[10] << 8) + pageResponse[11]);
return decoded;
}
@@ -114,8 +114,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_0F page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_0F page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Data compression page:");
diff --git a/SCSI/Modes/10.cs b/SCSI/Modes/10.cs
index d0821049f..812a943ed 100644
--- a/SCSI/Modes/10.cs
+++ b/SCSI/Modes/10.cs
@@ -92,9 +92,9 @@ namespace DiscImageChef.Decoders.SCSI
decoded.MaxXorWrite = (uint)((pageResponse[4] << 24) + (pageResponse[5] << 16) + (pageResponse[6] << 8) +
pageResponse[7]);
decoded.MaxRegenSize = (uint)((pageResponse[12] << 24) + (pageResponse[13] << 16) +
- (pageResponse[14] << 8) + pageResponse[15]);
+ (pageResponse[14] << 8) + pageResponse[15]);
decoded.MaxRebuildRead = (uint)((pageResponse[16] << 24) + (pageResponse[17] << 16) +
- (pageResponse[18] << 8) + pageResponse[19]);
+ (pageResponse[18] << 8) + pageResponse[19]);
decoded.RebuildDelay = (ushort)((pageResponse[22] << 8) + pageResponse[23]);
return decoded;
@@ -109,8 +109,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_10 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_10 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI XOR control mode page:");
diff --git a/SCSI/Modes/10_SSC.cs b/SCSI/Modes/10_SSC.cs
index 4b1f1328e..4403711b0 100644
--- a/SCSI/Modes/10_SSC.cs
+++ b/SCSI/Modes/10_SSC.cs
@@ -176,39 +176,39 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_10_SSC decoded = new ModePage_10_SSC();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.CAP |= (pageResponse[2] & 0x40) == 0x40;
- decoded.CAF |= (pageResponse[2] & 0x20) == 0x20;
- decoded.ActiveFormat = (byte)(pageResponse[2] & 0x1F);
- decoded.ActivePartition = pageResponse[3];
- decoded.WriteBufferFullRatio = pageResponse[4];
- decoded.ReadBufferEmptyRatio = pageResponse[5];
- decoded.WriteDelayTime = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
- decoded.DBR |= (pageResponse[8] & 0x80) == 0x80;
- decoded.BIS |= (pageResponse[8] & 0x40) == 0x40;
- decoded.RSmk |= (pageResponse[8] & 0x20) == 0x20;
- decoded.AVC |= (pageResponse[8] & 0x10) == 0x10;
- decoded.RBO |= (pageResponse[8] & 0x02) == 0x02;
- decoded.REW |= (pageResponse[8] & 0x01) == 0x01;
- decoded.EEG |= (pageResponse[10] & 0x10) == 0x10;
- decoded.SEW |= (pageResponse[10] & 0x08) == 0x08;
- decoded.SOCF = (byte)((pageResponse[8] & 0x0C) >> 2);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.CAP |= (pageResponse[2] & 0x40) == 0x40;
+ decoded.CAF |= (pageResponse[2] & 0x20) == 0x20;
+ decoded.ActiveFormat = (byte)(pageResponse[2] & 0x1F);
+ decoded.ActivePartition = pageResponse[3];
+ decoded.WriteBufferFullRatio = pageResponse[4];
+ decoded.ReadBufferEmptyRatio = pageResponse[5];
+ decoded.WriteDelayTime = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.DBR |= (pageResponse[8] & 0x80) == 0x80;
+ decoded.BIS |= (pageResponse[8] & 0x40) == 0x40;
+ decoded.RSmk |= (pageResponse[8] & 0x20) == 0x20;
+ decoded.AVC |= (pageResponse[8] & 0x10) == 0x10;
+ decoded.RBO |= (pageResponse[8] & 0x02) == 0x02;
+ decoded.REW |= (pageResponse[8] & 0x01) == 0x01;
+ decoded.EEG |= (pageResponse[10] & 0x10) == 0x10;
+ decoded.SEW |= (pageResponse[10] & 0x08) == 0x08;
+ decoded.SOCF = (byte)((pageResponse[8] & 0x0C) >> 2);
decoded.BufferSizeEarlyWarning =
(uint)((pageResponse[11] << 16) + (pageResponse[12] << 8) + pageResponse[13]);
decoded.SelectedCompression = pageResponse[14];
- decoded.SWP |= (pageResponse[10] & 0x04) == 0x04;
+ decoded.SWP |= (pageResponse[10] & 0x04) == 0x04;
decoded.ASOCWP |= (pageResponse[15] & 0x04) == 0x04;
decoded.PERSWP |= (pageResponse[15] & 0x02) == 0x02;
- decoded.PRMWP |= (pageResponse[15] & 0x01) == 0x01;
+ decoded.PRMWP |= (pageResponse[15] & 0x01) == 0x01;
decoded.BAML |= (pageResponse[10] & 0x02) == 0x02;
- decoded.BAM |= (pageResponse[10] & 0x01) == 0x01;
+ decoded.BAM |= (pageResponse[10] & 0x01) == 0x01;
decoded.RewindOnReset = (byte)((pageResponse[15] & 0x18) >> 3);
- decoded.OIR |= (pageResponse[15] & 0x20) == 0x20;
- decoded.WTRE = (byte)((pageResponse[15] & 0xC0) >> 6);
+ decoded.OIR |= (pageResponse[15] & 0x20) == 0x20;
+ decoded.WTRE = (byte)((pageResponse[15] & 0xC0) >> 6);
return decoded;
}
@@ -223,7 +223,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_10_SSC page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Device configuration page:");
@@ -236,8 +236,8 @@ namespace DiscImageChef.Decoders.SCSI
sb.AppendFormat("\tRead buffer shall have an empty ratio of {0} before more data is read from medium",
page.ReadBufferEmptyRatio).AppendLine();
sb
- .AppendFormat("\tDrive will delay {0} ms before buffered data is forcefully written to the medium even before buffer is full",
- page.WriteDelayTime * 100).AppendLine();
+ .AppendFormat("\tDrive will delay {0} ms before buffered data is forcefully written to the medium even before buffer is full",
+ page.WriteDelayTime * 100).AppendLine();
if(page.DBR)
{
sb.AppendLine("\tDrive supports recovering data from buffer");
@@ -245,6 +245,7 @@ namespace DiscImageChef.Decoders.SCSI
? "\tRecovered buffer data comes in LIFO order"
: "\tRecovered buffer data comes in FIFO order");
}
+
if(page.BIS) sb.AppendLine("\tMedium supports block IDs");
if(page.RSmk) sb.AppendLine("\tDrive reports setmarks");
switch(page.SOCF)
diff --git a/SCSI/Modes/11.cs b/SCSI/Modes/11.cs
index bec32a979..46630e133 100644
--- a/SCSI/Modes/11.cs
+++ b/SCSI/Modes/11.cs
@@ -144,22 +144,22 @@ namespace DiscImageChef.Decoders.SCSI
decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.MaxAdditionalPartitions = pageResponse[2];
- decoded.AdditionalPartitionsDefined = pageResponse[3];
- decoded.FDP |= (pageResponse[4] & 0x80) == 0x80;
- decoded.SDP |= (pageResponse[4] & 0x40) == 0x40;
- decoded.IDP |= (pageResponse[4] & 0x20) == 0x20;
- decoded.PSUM = (PartitionSizeUnitOfMeasures)((pageResponse[4] & 0x18) >> 3);
- decoded.POFM |= (pageResponse[4] & 0x04) == 0x04;
- decoded.CLEAR |= (pageResponse[4] & 0x02) == 0x02;
- decoded.ADDP |= (pageResponse[4] & 0x01) == 0x01;
- decoded.PartitionUnits = (byte)(pageResponse[6] & 0x0F);
- decoded.MediumFormatRecognition = (MediumFormatRecognitionValues)pageResponse[5];
- decoded.PartitionSizes = new ushort[(pageResponse.Length - 8) / 2];
+ decoded.MaxAdditionalPartitions = pageResponse[2];
+ decoded.AdditionalPartitionsDefined = pageResponse[3];
+ decoded.FDP |= (pageResponse[4] & 0x80) == 0x80;
+ decoded.SDP |= (pageResponse[4] & 0x40) == 0x40;
+ decoded.IDP |= (pageResponse[4] & 0x20) == 0x20;
+ decoded.PSUM = (PartitionSizeUnitOfMeasures)((pageResponse[4] & 0x18) >> 3);
+ decoded.POFM |= (pageResponse[4] & 0x04) == 0x04;
+ decoded.CLEAR |= (pageResponse[4] & 0x02) == 0x02;
+ decoded.ADDP |= (pageResponse[4] & 0x01) == 0x01;
+ decoded.PartitionUnits = (byte)(pageResponse[6] & 0x0F);
+ decoded.MediumFormatRecognition = (MediumFormatRecognitionValues)pageResponse[5];
+ decoded.PartitionSizes = new ushort[(pageResponse.Length - 8) / 2];
for(int i = 8; i < pageResponse.Length; i += 2)
{
- decoded.PartitionSizes[(i - 8) / 2] = (ushort)(pageResponse[i] << 8);
+ decoded.PartitionSizes[(i - 8) / 2] = (ushort)(pageResponse[i] << 8);
decoded.PartitionSizes[(i - 8) / 2] += pageResponse[i + 1];
}
@@ -175,8 +175,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_11 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_11 page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI medium partition page:");
@@ -251,7 +251,8 @@ namespace DiscImageChef.Decoders.SCSI
if(page.PartitionSizes[i] == 0)
if(page.PartitionSizes.Length == 1)
sb.AppendLine("\tDevice recognizes one single partition spanning whole medium");
- else sb.AppendFormat("\tPartition {0} runs for rest of medium", i).AppendLine();
+ else
+ sb.AppendFormat("\tPartition {0} runs for rest of medium", i).AppendLine();
else
sb.AppendFormat("\tPartition {0} is {1} {2} long", i, page.PartitionSizes[i], measure).AppendLine();
diff --git a/SCSI/Modes/12_13_14.cs b/SCSI/Modes/12_13_14.cs
index c9a2bd369..2c29baa36 100644
--- a/SCSI/Modes/12_13_14.cs
+++ b/SCSI/Modes/12_13_14.cs
@@ -78,7 +78,7 @@ namespace DiscImageChef.Decoders.SCSI
for(int i = 2; i < pageResponse.Length; i += 2)
{
- decoded.PartitionSizes[(i - 2) / 2] = (ushort)(pageResponse[i] << 8);
+ decoded.PartitionSizes[(i - 2) / 2] = (ushort)(pageResponse[i] << 8);
decoded.PartitionSizes[(i - 2) / 2] += pageResponse[i + 1];
}
@@ -95,7 +95,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_12_13_14 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI medium partition page (extra):");
diff --git a/SCSI/Modes/1A.cs b/SCSI/Modes/1A.cs
index a50bc5d73..7ba240082 100644
--- a/SCSI/Modes/1A.cs
+++ b/SCSI/Modes/1A.cs
@@ -118,7 +118,7 @@ namespace DiscImageChef.Decoders.SCSI
decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.Standby |= (pageResponse[3] & 0x01) == 0x01;
- decoded.Idle |= (pageResponse[3] & 0x02) == 0x02;
+ decoded.Idle |= (pageResponse[3] & 0x02) == 0x02;
decoded.IdleTimer = (uint)((pageResponse[4] << 24) + (pageResponse[5] << 16) + (pageResponse[6] << 8) +
pageResponse[7]);
@@ -127,19 +127,19 @@ namespace DiscImageChef.Decoders.SCSI
if(pageResponse.Length < 40) return decoded;
- decoded.PM_BG_Precedence = (byte)((pageResponse[2] & 0xC0) >> 6);
- decoded.Standby_Y |= (pageResponse[2] & 0x01) == 0x01;
- decoded.Idle_B |= (pageResponse[3] & 0x04) == 0x04;
- decoded.Idle_C |= (pageResponse[3] & 0x08) == 0x08;
+ decoded.PM_BG_Precedence = (byte)((pageResponse[2] & 0xC0) >> 6);
+ decoded.Standby_Y |= (pageResponse[2] & 0x01) == 0x01;
+ decoded.Idle_B |= (pageResponse[3] & 0x04) == 0x04;
+ decoded.Idle_C |= (pageResponse[3] & 0x08) == 0x08;
decoded.IdleTimer_B = (uint)((pageResponse[12] << 24) + (pageResponse[13] << 16) + (pageResponse[14] << 8) +
pageResponse[15]);
decoded.IdleTimer_C = (uint)((pageResponse[16] << 24) + (pageResponse[17] << 16) + (pageResponse[18] << 8) +
pageResponse[19]);
decoded.StandbyTimer_Y = (uint)((pageResponse[20] << 24) + (pageResponse[21] << 16) +
- (pageResponse[22] << 8) + pageResponse[23]);
+ (pageResponse[22] << 8) + pageResponse[23]);
- decoded.CCF_Idle = (byte)((pageResponse[39] & 0xC0) >> 6);
+ decoded.CCF_Idle = (byte)((pageResponse[39] & 0xC0) >> 6);
decoded.CCF_Standby = (byte)((pageResponse[39] & 0x30) >> 4);
decoded.CCF_Stopped = (byte)((pageResponse[39] & 0x0C) >> 2);
@@ -155,8 +155,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_1A page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_1A page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Power condition page:");
@@ -171,7 +171,7 @@ namespace DiscImageChef.Decoders.SCSI
}
else sb.AppendLine("\tDrive will not enter standy mode");
- if(page.Idle && page.IdleTimer > 0 || page.Idle_B && page.IdleTimer_B > 0 ||
+ if(page.Idle && page.IdleTimer > 0 || page.Idle_B && page.IdleTimer_B > 0 ||
page.Idle_C && page.IdleTimer_C > 0)
{
if(page.Idle && page.IdleTimer > 0)
@@ -235,9 +235,9 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_1A_S01 decoded = new ModePage_1A_S01();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.ActiveLevel = (byte)(pageResponse[6] & 0x03);
- decoded.PowerConsumptionIdentifier = pageResponse[7];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.ActiveLevel = (byte)(pageResponse[6] & 0x03);
+ decoded.PowerConsumptionIdentifier = pageResponse[7];
return decoded;
}
@@ -252,7 +252,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_1A_S01 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Power Consumption page:");
diff --git a/SCSI/Modes/1B.cs b/SCSI/Modes/1B.cs
index 5eace4e96..f21049302 100644
--- a/SCSI/Modes/1B.cs
+++ b/SCSI/Modes/1B.cs
@@ -86,11 +86,11 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_1B decoded = new ModePage_1B();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.SFLP |= (pageResponse[2] & 0x80) == 0x80;
decoded.SRFP |= (pageResponse[2] & 0x40) == 0x40;
- decoded.NCD |= (pageResponse[3] & 0x80) == 0x80;
- decoded.SML |= (pageResponse[3] & 0x40) == 0x40;
+ decoded.NCD |= (pageResponse[3] & 0x80) == 0x80;
+ decoded.SML |= (pageResponse[3] & 0x40) == 0x40;
decoded.TLUN = (byte)(pageResponse[3] & 0x07);
@@ -106,8 +106,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_1B page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_1B page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Removable Block Access Capabilities page:");
diff --git a/SCSI/Modes/1C.cs b/SCSI/Modes/1C.cs
index b8def2bcf..56ad338cf 100644
--- a/SCSI/Modes/1C.cs
+++ b/SCSI/Modes/1C.cs
@@ -110,9 +110,9 @@ namespace DiscImageChef.Decoders.SCSI
decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.Perf |= (pageResponse[2] & 0x80) == 0x80;
+ decoded.Perf |= (pageResponse[2] & 0x80) == 0x80;
decoded.DExcpt |= (pageResponse[2] & 0x08) == 0x08;
- decoded.Test |= (pageResponse[2] & 0x04) == 0x04;
+ decoded.Test |= (pageResponse[2] & 0x04) == 0x04;
decoded.LogErr |= (pageResponse[2] & 0x01) == 0x01;
decoded.MRIE = (byte)(pageResponse[3] & 0x0F);
@@ -120,14 +120,14 @@ namespace DiscImageChef.Decoders.SCSI
decoded.IntervalTimer = (uint)((pageResponse[4] << 24) + (pageResponse[5] << 16) + (pageResponse[6] << 8) +
pageResponse[7]);
- decoded.EBF |= (pageResponse[2] & 0x20) == 0x20;
+ decoded.EBF |= (pageResponse[2] & 0x20) == 0x20;
decoded.EWasc |= (pageResponse[2] & 0x10) == 0x10;
decoded.EBACKERR |= (pageResponse[2] & 0x02) == 0x02;
if(pageResponse.Length >= 12)
- decoded.ReportCount = (uint)((pageResponse[8] << 24) + (pageResponse[9] << 16) +
- (pageResponse[10] << 8) + pageResponse[11]);
+ decoded.ReportCount = (uint)((pageResponse[8] << 24) + (pageResponse[9] << 16) +
+ (pageResponse[10] << 8) + pageResponse[11]);
return decoded;
}
@@ -141,8 +141,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_1C page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_1C page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Informational exceptions control page:");
@@ -186,8 +186,10 @@ namespace DiscImageChef.Decoders.SCSI
if(page.LogErr) sb.AppendLine("\tDrive shall log informational exception conditions");
if(page.IntervalTimer > 0)
- if(page.IntervalTimer == 0xFFFFFFFF) sb.AppendLine("\tTimer interval is vendor-specific");
- else sb.AppendFormat("\tTimer interval is {0} ms", page.IntervalTimer * 100).AppendLine();
+ if(page.IntervalTimer == 0xFFFFFFFF)
+ sb.AppendLine("\tTimer interval is vendor-specific");
+ else
+ sb.AppendFormat("\tTimer interval is {0} ms", page.IntervalTimer * 100).AppendLine();
if(page.ReportCount > 0)
sb.AppendFormat("\tInformational exception conditions will be reported a maximum of {0} times",
@@ -266,14 +268,14 @@ namespace DiscImageChef.Decoders.SCSI
decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.S_L_Full |= (pageResponse[4] & 0x04) == 0x04;
- decoded.LOWIR |= (pageResponse[4] & 0x02) == 0x02;
- decoded.En_Bms |= (pageResponse[4] & 0x01) == 0x01;
- decoded.En_Ps |= (pageResponse[5] & 0x01) == 0x01;
+ decoded.LOWIR |= (pageResponse[4] & 0x02) == 0x02;
+ decoded.En_Bms |= (pageResponse[4] & 0x01) == 0x01;
+ decoded.En_Ps |= (pageResponse[5] & 0x01) == 0x01;
- decoded.BackgroundScanInterval = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
- decoded.BackgroundPrescanTimeLimit = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
- decoded.MinIdleBeforeBgScan = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
- decoded.MaxTimeSuspendBgScan = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
+ decoded.BackgroundScanInterval = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.BackgroundPrescanTimeLimit = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
+ decoded.MinIdleBeforeBgScan = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
+ decoded.MaxTimeSuspendBgScan = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
return decoded;
}
@@ -288,7 +290,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_1C_S01 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Background Control page:");
@@ -313,8 +315,8 @@ namespace DiscImageChef.Decoders.SCSI
if(page.MaxTimeSuspendBgScan > 0)
sb
- .AppendFormat("\tAt most {0} ms must be before suspending a background scan operation and processing received commands",
- page.MaxTimeSuspendBgScan).AppendLine();
+ .AppendFormat("\tAt most {0} ms must be before suspending a background scan operation and processing received commands",
+ page.MaxTimeSuspendBgScan).AppendLine();
return sb.ToString();
}
diff --git a/SCSI/Modes/1C_SFF.cs b/SCSI/Modes/1C_SFF.cs
index c943ca902..eed8be82b 100644
--- a/SCSI/Modes/1C_SFF.cs
+++ b/SCSI/Modes/1C_SFF.cs
@@ -78,7 +78,7 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_1C_SFF decoded = new ModePage_1C_SFF();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.DISP |= (pageResponse[2] & 0x02) == 0x02;
decoded.SWPP |= (pageResponse[3] & 0x01) == 0x01;
@@ -97,7 +97,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
ModePage_1C_SFF page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Timer & Protect page:");
diff --git a/SCSI/Modes/1D.cs b/SCSI/Modes/1D.cs
index 4ddd99742..287add1cb 100644
--- a/SCSI/Modes/1D.cs
+++ b/SCSI/Modes/1D.cs
@@ -64,10 +64,10 @@ namespace DiscImageChef.Decoders.SCSI
ModePage_1D decoded = new ModePage_1D();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.WORMM |= (pageResponse[2] & 0x01) == 0x01;
- decoded.WormModeLabelRestrictions = pageResponse[4];
- decoded.WormModeFilemarkRestrictions = pageResponse[5];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.WORMM |= (pageResponse[2] & 0x01) == 0x01;
+ decoded.WormModeLabelRestrictions = pageResponse[4];
+ decoded.WormModeFilemarkRestrictions = pageResponse[5];
return decoded;
}
@@ -81,8 +81,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_1D page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_1D page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI Medium Configuration Mode Page:");
diff --git a/SCSI/Modes/21_Certance.cs b/SCSI/Modes/21_Certance.cs
index f9ba75d08..4e9d65226 100644
--- a/SCSI/Modes/21_Certance.cs
+++ b/SCSI/Modes/21_Certance.cs
@@ -69,15 +69,15 @@ namespace DiscImageChef.Decoders.SCSI
Certance_ModePage_21 decoded = new Certance_ModePage_21();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.OperatingSystemsSupport = pageResponse[2];
- decoded.FirmwareTestControl2 = pageResponse[3];
- decoded.ExtendedPOSTMode = pageResponse[4];
- decoded.InquiryStringControl = pageResponse[5];
- decoded.FirmwareTestControl = pageResponse[6];
- decoded.DataCompressionControl = pageResponse[7];
- decoded.HostUnloadOverride |= (pageResponse[8] & 0x80) == 0x80;
- decoded.AutoUnloadMode = (byte)(pageResponse[8] & 0x7F);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.OperatingSystemsSupport = pageResponse[2];
+ decoded.FirmwareTestControl2 = pageResponse[3];
+ decoded.ExtendedPOSTMode = pageResponse[4];
+ decoded.InquiryStringControl = pageResponse[5];
+ decoded.FirmwareTestControl = pageResponse[6];
+ decoded.DataCompressionControl = pageResponse[7];
+ decoded.HostUnloadOverride |= (pageResponse[8] & 0x80) == 0x80;
+ decoded.AutoUnloadMode = (byte)(pageResponse[8] & 0x7F);
return decoded;
}
@@ -92,7 +92,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Certance_ModePage_21 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Certance Drive Capabilities Control Mode Page:");
diff --git a/SCSI/Modes/22_Certance.cs b/SCSI/Modes/22_Certance.cs
index db1f05687..25aff1f89 100644
--- a/SCSI/Modes/22_Certance.cs
+++ b/SCSI/Modes/22_Certance.cs
@@ -73,18 +73,18 @@ namespace DiscImageChef.Decoders.SCSI
Certance_ModePage_22 decoded = new Certance_ModePage_22();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.BaudRate = pageResponse[2];
- decoded.CmdFwd = (byte)((pageResponse[3] & 0x18) >> 3);
- decoded.StopBits |= (pageResponse[3] & 0x04) == 0x04;
- decoded.CmdFwd = (byte)(pageResponse[3] & 0x03);
- decoded.PortATransportType = pageResponse[4];
- decoded.PortAPresentSelectionID = pageResponse[7];
- decoded.NextSelectionID = pageResponse[12];
- decoded.JumperedSelectionID = pageResponse[13];
- decoded.TargetInitiatedBusControl = pageResponse[14];
- decoded.PortAEnabled |= (pageResponse[15] & 0x10) == 0x10;
- decoded.PortAEnabledOnPower |= (pageResponse[15] & 0x04) == 0x04;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.BaudRate = pageResponse[2];
+ decoded.CmdFwd = (byte)((pageResponse[3] & 0x18) >> 3);
+ decoded.StopBits |= (pageResponse[3] & 0x04) == 0x04;
+ decoded.CmdFwd = (byte)(pageResponse[3] & 0x03);
+ decoded.PortATransportType = pageResponse[4];
+ decoded.PortAPresentSelectionID = pageResponse[7];
+ decoded.NextSelectionID = pageResponse[12];
+ decoded.JumperedSelectionID = pageResponse[13];
+ decoded.TargetInitiatedBusControl = pageResponse[14];
+ decoded.PortAEnabled |= (pageResponse[15] & 0x10) == 0x10;
+ decoded.PortAEnabledOnPower |= (pageResponse[15] & 0x04) == 0x04;
return decoded;
}
@@ -99,7 +99,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Certance_ModePage_22 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Certance Interface Control Mode Page:");
diff --git a/SCSI/Modes/24_IBM.cs b/SCSI/Modes/24_IBM.cs
index 0f7f8c8f4..f0e88a843 100644
--- a/SCSI/Modes/24_IBM.cs
+++ b/SCSI/Modes/24_IBM.cs
@@ -65,9 +65,9 @@ namespace DiscImageChef.Decoders.SCSI
IBM_ModePage_24 decoded = new IBM_ModePage_24();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.ModeControl = pageResponse[2];
- decoded.VelocitySetting = pageResponse[3];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.ModeControl = pageResponse[2];
+ decoded.VelocitySetting = pageResponse[3];
decoded.EncryptionEnabled |= (pageResponse[7] & 0x08) == 0x08;
decoded.EncryptionCapable |= (pageResponse[7] & 0x01) == 0x01;
@@ -84,13 +84,13 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
IBM_ModePage_24 page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("IBM Vendor-Specific Control Mode Page:");
if(page.PS) sb.AppendLine("\tParameters can be saved");
- sb.AppendFormat("\tVendor-specific mode control: {0}", page.ModeControl);
+ sb.AppendFormat("\tVendor-specific mode control: {0}", page.ModeControl);
sb.AppendFormat("\tVendor-specific velocity setting: {0}", page.VelocitySetting);
if(!page.EncryptionCapable) return sb.ToString();
diff --git a/SCSI/Modes/2A.cs b/SCSI/Modes/2A.cs
index 0758a29e1..e1a732e3d 100644
--- a/SCSI/Modes/2A.cs
+++ b/SCSI/Modes/2A.cs
@@ -162,30 +162,30 @@ namespace DiscImageChef.Decoders.SCSI
public bool RCK;
public bool BCK;
- public bool TestWrite;
+ public bool TestWrite;
public ushort MaxWriteSpeed;
public ushort CurrentWriteSpeed;
public bool ReadBarcode;
- public bool ReadDVDRAM;
- public bool ReadDVDR;
- public bool ReadDVDROM;
- public bool WriteDVDRAM;
- public bool WriteDVDR;
- public bool LeadInPW;
- public bool SCC;
+ public bool ReadDVDRAM;
+ public bool ReadDVDR;
+ public bool ReadDVDROM;
+ public bool WriteDVDRAM;
+ public bool WriteDVDR;
+ public bool LeadInPW;
+ public bool SCC;
public ushort CMRSupported;
- public bool BUF;
- public byte RotationControlSelected;
- public ushort CurrentWriteSpeedSelected;
+ public bool BUF;
+ public byte RotationControlSelected;
+ public ushort CurrentWriteSpeedSelected;
public ModePage_2A_WriteDescriptor[] WriteSpeedPerformanceDescriptors;
}
public struct ModePage_2A_WriteDescriptor
{
- public byte RotationControl;
+ public byte RotationControl;
public ushort WriteSpeed;
}
@@ -203,81 +203,81 @@ namespace DiscImageChef.Decoders.SCSI
decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.AudioPlay |= (pageResponse[4] & 0x01) == 0x01;
- decoded.Mode2Form1 |= (pageResponse[4] & 0x10) == 0x10;
- decoded.Mode2Form2 |= (pageResponse[4] & 0x20) == 0x20;
+ decoded.AudioPlay |= (pageResponse[4] & 0x01) == 0x01;
+ decoded.Mode2Form1 |= (pageResponse[4] & 0x10) == 0x10;
+ decoded.Mode2Form2 |= (pageResponse[4] & 0x20) == 0x20;
decoded.MultiSession |= (pageResponse[4] & 0x40) == 0x40;
- decoded.CDDACommand |= (pageResponse[5] & 0x01) == 0x01;
- decoded.AccurateCDDA |= (pageResponse[5] & 0x02) == 0x02;
- decoded.Subchannel |= (pageResponse[5] & 0x04) == 0x04;
+ decoded.CDDACommand |= (pageResponse[5] & 0x01) == 0x01;
+ decoded.AccurateCDDA |= (pageResponse[5] & 0x02) == 0x02;
+ decoded.Subchannel |= (pageResponse[5] & 0x04) == 0x04;
decoded.DeinterlaveSubchannel |= (pageResponse[5] & 0x08) == 0x08;
- decoded.C2Pointer |= (pageResponse[5] & 0x10) == 0x10;
- decoded.UPC |= (pageResponse[5] & 0x20) == 0x20;
- decoded.ISRC |= (pageResponse[5] & 0x40) == 0x40;
+ decoded.C2Pointer |= (pageResponse[5] & 0x10) == 0x10;
+ decoded.UPC |= (pageResponse[5] & 0x20) == 0x20;
+ decoded.ISRC |= (pageResponse[5] & 0x40) == 0x40;
- decoded.LoadingMechanism = (byte)((pageResponse[6] & 0xE0) >> 5);
- decoded.Lock |= (pageResponse[6] & 0x01) == 0x01;
- decoded.LockState |= (pageResponse[6] & 0x02) == 0x02;
- decoded.PreventJumper |= (pageResponse[6] & 0x04) == 0x04;
- decoded.Eject |= (pageResponse[6] & 0x08) == 0x08;
+ decoded.LoadingMechanism = (byte)((pageResponse[6] & 0xE0) >> 5);
+ decoded.Lock |= (pageResponse[6] & 0x01) == 0x01;
+ decoded.LockState |= (pageResponse[6] & 0x02) == 0x02;
+ decoded.PreventJumper |= (pageResponse[6] & 0x04) == 0x04;
+ decoded.Eject |= (pageResponse[6] & 0x08) == 0x08;
decoded.SeparateChannelVolume |= (pageResponse[7] & 0x01) == 0x01;
- decoded.SeparateChannelMute |= (pageResponse[7] & 0x02) == 0x02;
+ decoded.SeparateChannelMute |= (pageResponse[7] & 0x02) == 0x02;
- decoded.MaximumSpeed = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
+ decoded.MaximumSpeed = (ushort)((pageResponse[8] << 8) + pageResponse[9]);
decoded.SupportedVolumeLevels = (ushort)((pageResponse[10] << 8) + pageResponse[11]);
- decoded.BufferSize = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
- decoded.CurrentSpeed = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
+ decoded.BufferSize = (ushort)((pageResponse[12] << 8) + pageResponse[13]);
+ decoded.CurrentSpeed = (ushort)((pageResponse[14] << 8) + pageResponse[15]);
if(pageResponse.Length < 20) return decoded;
- decoded.Method2 |= (pageResponse[2] & 0x04) == 0x04;
+ decoded.Method2 |= (pageResponse[2] & 0x04) == 0x04;
decoded.ReadCDRW |= (pageResponse[2] & 0x02) == 0x02;
- decoded.ReadCDR |= (pageResponse[2] & 0x01) == 0x01;
+ decoded.ReadCDR |= (pageResponse[2] & 0x01) == 0x01;
decoded.WriteCDRW |= (pageResponse[3] & 0x02) == 0x02;
- decoded.WriteCDR |= (pageResponse[3] & 0x01) == 0x01;
+ decoded.WriteCDR |= (pageResponse[3] & 0x01) == 0x01;
- decoded.Composite |= (pageResponse[4] & 0x02) == 0x02;
+ decoded.Composite |= (pageResponse[4] & 0x02) == 0x02;
decoded.DigitalPort1 |= (pageResponse[4] & 0x04) == 0x04;
decoded.DigitalPort2 |= (pageResponse[4] & 0x08) == 0x08;
decoded.SDP |= (pageResponse[7] & 0x04) == 0x04;
decoded.SSS |= (pageResponse[7] & 0x08) == 0x08;
- decoded.Length = (byte)((pageResponse[17] & 0x30) >> 4);
- decoded.LSBF |= (pageResponse[17] & 0x08) == 0x08;
- decoded.RCK |= (pageResponse[17] & 0x04) == 0x04;
- decoded.BCK |= (pageResponse[17] & 0x02) == 0x02;
+ decoded.Length = (byte)((pageResponse[17] & 0x30) >> 4);
+ decoded.LSBF |= (pageResponse[17] & 0x08) == 0x08;
+ decoded.RCK |= (pageResponse[17] & 0x04) == 0x04;
+ decoded.BCK |= (pageResponse[17] & 0x02) == 0x02;
if(pageResponse.Length < 22) return decoded;
- decoded.TestWrite |= (pageResponse[3] & 0x04) == 0x04;
- decoded.MaxWriteSpeed = (ushort)((pageResponse[18] << 8) + pageResponse[19]);
- decoded.CurrentWriteSpeed = (ushort)((pageResponse[20] << 8) + pageResponse[21]);
+ decoded.TestWrite |= (pageResponse[3] & 0x04) == 0x04;
+ decoded.MaxWriteSpeed = (ushort)((pageResponse[18] << 8) + pageResponse[19]);
+ decoded.CurrentWriteSpeed = (ushort)((pageResponse[20] << 8) + pageResponse[21]);
decoded.ReadBarcode |= (pageResponse[5] & 0x80) == 0x80;
if(pageResponse.Length < 26) return decoded;
decoded.ReadDVDRAM |= (pageResponse[2] & 0x20) == 0x20;
- decoded.ReadDVDR |= (pageResponse[2] & 0x10) == 0x10;
+ decoded.ReadDVDR |= (pageResponse[2] & 0x10) == 0x10;
decoded.ReadDVDROM |= (pageResponse[2] & 0x08) == 0x08;
decoded.WriteDVDRAM |= (pageResponse[3] & 0x20) == 0x20;
- decoded.WriteDVDR |= (pageResponse[3] & 0x10) == 0x10;
+ decoded.WriteDVDR |= (pageResponse[3] & 0x10) == 0x10;
decoded.LeadInPW |= (pageResponse[3] & 0x20) == 0x20;
- decoded.SCC |= (pageResponse[3] & 0x10) == 0x10;
+ decoded.SCC |= (pageResponse[3] & 0x10) == 0x10;
decoded.CMRSupported = (ushort)((pageResponse[22] << 8) + pageResponse[23]);
if(pageResponse.Length < 32) return decoded;
- decoded.BUF |= (pageResponse[4] & 0x80) == 0x80;
- decoded.RotationControlSelected = (byte)(pageResponse[27] & 0x03);
- decoded.CurrentWriteSpeedSelected = (ushort)((pageResponse[28] << 8) + pageResponse[29]);
+ decoded.BUF |= (pageResponse[4] & 0x80) == 0x80;
+ decoded.RotationControlSelected = (byte)(pageResponse[27] & 0x03);
+ decoded.CurrentWriteSpeedSelected = (ushort)((pageResponse[28] << 8) + pageResponse[29]);
ushort descriptors = (ushort)((pageResponse.Length - 32) / 4);
decoded.WriteSpeedPerformanceDescriptors = new ModePage_2A_WriteDescriptor[descriptors];
@@ -285,7 +285,8 @@ namespace DiscImageChef.Decoders.SCSI
for(int i = 0; i < descriptors; i++)
decoded.WriteSpeedPerformanceDescriptors[i] = new ModePage_2A_WriteDescriptor
{
- RotationControl = (byte)(pageResponse[1 + 32 + i * 4] & 0x07),
+ RotationControl =
+ (byte)(pageResponse[1 + 32 + i * 4] & 0x07),
WriteSpeed = (ushort)((pageResponse[2 + 32 + i * 4] << 8) + pageResponse[3 + 32 + i * 4])
};
@@ -301,8 +302,8 @@ namespace DiscImageChef.Decoders.SCSI
{
if(!modePage.HasValue) return null;
- ModePage_2A page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ ModePage_2A page = modePage.Value;
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("SCSI CD-ROM capabilities page:");
@@ -356,6 +357,7 @@ namespace DiscImageChef.Decoders.SCSI
sb.AppendLine(page.LockState
? "\tDrive is locked, media cannot be ejected, but if empty, can be inserted"
: "\tDrive is not locked, media can be ejected and inserted");
+
if(page.Eject) sb.AppendLine("\tDrive can eject media");
if(page.SeparateChannelMute) sb.AppendLine("\tEach channel can be muted independently");
diff --git a/SCSI/Modes/2F_IBM.cs b/SCSI/Modes/2F_IBM.cs
index a34128dd9..f375e5c33 100644
--- a/SCSI/Modes/2F_IBM.cs
+++ b/SCSI/Modes/2F_IBM.cs
@@ -73,17 +73,17 @@ namespace DiscImageChef.Decoders.SCSI
return new IBM_ModePage_2F
{
- PS = (pageResponse[0] & 0x80) == 0x80,
- FenceBehaviour = pageResponse[2],
- CleanBehaviour = pageResponse[3],
- WORMEmulation = pageResponse[4],
- SenseDataBehaviour = pageResponse[5],
- CCDM = (pageResponse[6] & 0x04) == 0x04,
- DDEOR = (pageResponse[6] & 0x02) == 0x02,
- CLNCHK = (pageResponse[6] & 0x01) == 0x01,
+ PS = (pageResponse[0] & 0x80) == 0x80,
+ FenceBehaviour = pageResponse[2],
+ CleanBehaviour = pageResponse[3],
+ WORMEmulation = pageResponse[4],
+ SenseDataBehaviour = pageResponse[5],
+ CCDM = (pageResponse[6] & 0x04) == 0x04,
+ DDEOR = (pageResponse[6] & 0x02) == 0x02,
+ CLNCHK = (pageResponse[6] & 0x01) == 0x01,
FirmwareUpdateBehaviour = pageResponse[7],
- UOE_C = (byte)((pageResponse[8] & 0x30) >> 4),
- UOE_F = (byte)((pageResponse[8] & 0x0C) >> 2)
+ UOE_C = (byte)((pageResponse[8] & 0x30) >> 4),
+ UOE_F = (byte)((pageResponse[8] & 0x0C) >> 2)
};
}
@@ -97,7 +97,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
IBM_ModePage_2F page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("IBM Behaviour Configuration Mode Page:");
diff --git a/SCSI/Modes/3B_HP.cs b/SCSI/Modes/3B_HP.cs
index 0ea4b412a..37f4dded2 100644
--- a/SCSI/Modes/3B_HP.cs
+++ b/SCSI/Modes/3B_HP.cs
@@ -48,7 +48,7 @@ namespace DiscImageChef.Decoders.SCSI
/// Parameters can be saved
///
public bool PS;
- public byte MSN;
+ public byte MSN;
public byte[] SerialNumber;
}
@@ -64,9 +64,9 @@ namespace DiscImageChef.Decoders.SCSI
HP_ModePage_3B decoded = new HP_ModePage_3B();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.MSN = (byte)(pageResponse[2] & 0x03);
- decoded.SerialNumber = new byte[10];
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.MSN = (byte)(pageResponse[2] & 0x03);
+ decoded.SerialNumber = new byte[10];
Array.Copy(pageResponse, 6, decoded.SerialNumber, 0, 10);
return decoded;
@@ -82,7 +82,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
HP_ModePage_3B page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("HP Serial Number Override Mode Page:");
diff --git a/SCSI/Modes/3C_HP.cs b/SCSI/Modes/3C_HP.cs
index b1407154d..27e836d7a 100644
--- a/SCSI/Modes/3C_HP.cs
+++ b/SCSI/Modes/3C_HP.cs
@@ -48,18 +48,18 @@ namespace DiscImageChef.Decoders.SCSI
/// Parameters can be saved
///
public bool PS;
- public bool LT;
- public bool WT;
- public bool PT;
+ public bool LT;
+ public bool WT;
+ public bool PT;
public ushort CurrentPowerOn;
- public uint PowerOnTime;
- public bool UTC;
- public bool NTP;
- public uint WorldTime;
- public byte LibraryHours;
- public byte LibraryMinutes;
- public byte LibrarySeconds;
- public uint CumulativePowerOn;
+ public uint PowerOnTime;
+ public bool UTC;
+ public bool NTP;
+ public uint WorldTime;
+ public byte LibraryHours;
+ public byte LibraryMinutes;
+ public byte LibrarySeconds;
+ public uint CumulativePowerOn;
}
public static HP_ModePage_3C? DecodeHPModePage_3C(byte[] pageResponse)
@@ -74,22 +74,22 @@ namespace DiscImageChef.Decoders.SCSI
HP_ModePage_3C decoded = new HP_ModePage_3C();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.LT |= (pageResponse[2] & 0x04) == 0x04;
- decoded.WT |= (pageResponse[2] & 0x02) == 0x02;
- decoded.PT |= (pageResponse[2] & 0x01) == 0x01;
- decoded.CurrentPowerOn = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.LT |= (pageResponse[2] & 0x04) == 0x04;
+ decoded.WT |= (pageResponse[2] & 0x02) == 0x02;
+ decoded.PT |= (pageResponse[2] & 0x01) == 0x01;
+ decoded.CurrentPowerOn = (ushort)((pageResponse[6] << 8) + pageResponse[7]);
decoded.PowerOnTime = (uint)((pageResponse[8] << 24) + (pageResponse[9] << 16) + (pageResponse[10] << 8) +
pageResponse[11]);
decoded.UTC |= (pageResponse[14] & 0x02) == 0x02;
decoded.NTP |= (pageResponse[14] & 0x01) == 0x01;
decoded.WorldTime = (uint)((pageResponse[16] << 24) + (pageResponse[17] << 16) + (pageResponse[18] << 8) +
pageResponse[19]);
- decoded.LibraryHours = pageResponse[23];
+ decoded.LibraryHours = pageResponse[23];
decoded.LibraryMinutes = pageResponse[24];
decoded.LibrarySeconds = pageResponse[25];
decoded.CumulativePowerOn = (uint)((pageResponse[32] << 24) + (pageResponse[33] << 16) +
- (pageResponse[34] << 8) + pageResponse[35]);
+ (pageResponse[34] << 8) + pageResponse[35]);
return decoded;
}
@@ -104,7 +104,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
HP_ModePage_3C page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("HP Device Time Mode Page:");
diff --git a/SCSI/Modes/3D_HP.cs b/SCSI/Modes/3D_HP.cs
index 7239a3a9d..ee028706b 100644
--- a/SCSI/Modes/3D_HP.cs
+++ b/SCSI/Modes/3D_HP.cs
@@ -62,8 +62,8 @@ namespace DiscImageChef.Decoders.SCSI
HP_ModePage_3D decoded = new HP_ModePage_3D();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.ResetBehaviour = (byte)(pageResponse[2] & 0x03);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.ResetBehaviour = (byte)(pageResponse[2] & 0x03);
return decoded;
}
@@ -78,7 +78,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
HP_ModePage_3D page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("HP Extended Reset Mode Page:");
diff --git a/SCSI/Modes/3D_IBM.cs b/SCSI/Modes/3D_IBM.cs
index 417401bed..fbd13328f 100644
--- a/SCSI/Modes/3D_IBM.cs
+++ b/SCSI/Modes/3D_IBM.cs
@@ -62,8 +62,8 @@ namespace DiscImageChef.Decoders.SCSI
IBM_ModePage_3D decoded = new IBM_ModePage_3D();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
- decoded.NumberOfWraps = (ushort)((pageResponse[3] << 8) + pageResponse[4]);
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.NumberOfWraps = (ushort)((pageResponse[3] << 8) + pageResponse[4]);
return decoded;
}
@@ -78,7 +78,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
IBM_ModePage_3D page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("IBM LEOT Mode Page:");
diff --git a/SCSI/Modes/3E_Fujitsu.cs b/SCSI/Modes/3E_Fujitsu.cs
index 430cb7b7a..0feb3b92e 100644
--- a/SCSI/Modes/3E_Fujitsu.cs
+++ b/SCSI/Modes/3E_Fujitsu.cs
@@ -102,12 +102,12 @@ namespace DiscImageChef.Decoders.SCSI
decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.audioVisualMode |= (pageResponse[2] & 0x80) == 0x80;
- decoded.streamingMode |= (pageResponse[2] & 0x40) == 0x40;
- decoded.Reserved1 = (byte)((pageResponse[2] & 0x3C) >> 2);
- decoded.verifyMode = (Fujitsu_VerifyModes)(pageResponse[2] & 0x03);
+ decoded.streamingMode |= (pageResponse[2] & 0x40) == 0x40;
+ decoded.Reserved1 = (byte)((pageResponse[2] & 0x3C) >> 2);
+ decoded.verifyMode = (Fujitsu_VerifyModes)(pageResponse[2] & 0x03);
decoded.Reserved2 = (byte)((pageResponse[3] & 0xE0) >> 5);
- decoded.devType = (PeripheralDeviceTypes)(pageResponse[3] & 0x1F);
+ decoded.devType = (PeripheralDeviceTypes)(pageResponse[3] & 0x1F);
decoded.Reserved3 = new byte[4];
Array.Copy(pageResponse, 4, decoded.Reserved3, 0, 4);
@@ -125,7 +125,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
Fujitsu_ModePage_3E page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("Fujitsu Verify Control Page:");
diff --git a/SCSI/Modes/3E_HP.cs b/SCSI/Modes/3E_HP.cs
index 769275946..97118bd29 100644
--- a/SCSI/Modes/3E_HP.cs
+++ b/SCSI/Modes/3E_HP.cs
@@ -63,9 +63,9 @@ namespace DiscImageChef.Decoders.SCSI
HP_ModePage_3E decoded = new HP_ModePage_3E();
- decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
+ decoded.PS |= (pageResponse[0] & 0x80) == 0x80;
decoded.NonAuto |= (pageResponse[2] & 0x02) == 0x02;
- decoded.CDmode |= (pageResponse[2] & 0x01) == 0x01;
+ decoded.CDmode |= (pageResponse[2] & 0x01) == 0x01;
return decoded;
}
@@ -80,7 +80,7 @@ namespace DiscImageChef.Decoders.SCSI
if(!modePage.HasValue) return null;
HP_ModePage_3E page = modePage.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.AppendLine("HP CD-ROM Emulation/Disaster Recovery Mode Page:");
diff --git a/SCSI/Modes/Headers.cs b/SCSI/Modes/Headers.cs
index 569a279c2..adaa112b1 100644
--- a/SCSI/Modes/Headers.cs
+++ b/SCSI/Modes/Headers.cs
@@ -74,16 +74,16 @@ namespace DiscImageChef.Decoders.SCSI
case MediumTypes.Unspecified_DS:
return "Unspecified double sided flexible disk";
*/
- case MediumTypes.X3_73: return "ANSI X3.73-1980: 200 mm, 6631 ftprad, 1,9 Tracks per mm, 1 side";
+ case MediumTypes.X3_73: return "ANSI X3.73-1980: 200 mm, 6631 ftprad, 1,9 Tracks per mm, 1 side";
case MediumTypes.X3_73_DS: return "ANSI X3.73-1980: 200 mm, 6631 ftprad, 1,9 Tracks per mm, 2 sides";
- case MediumTypes.X3_82: return "ANSI X3.80-1980: 130 mm, 3979 ftprad, 1,9 Tracks per mm, 1 side";
+ case MediumTypes.X3_82: return "ANSI X3.80-1980: 130 mm, 3979 ftprad, 1,9 Tracks per mm, 1 side";
case MediumTypes.Type3Floppy:
return "3.5-inch, 135 tpi, 12362 bits/radian, double-sided MFM (aka 1.25Mb)";
case MediumTypes.HDFloppy: return "3.5-inch, 135 tpi, 15916 bits/radian, double-sided MFM (aka 1.44Mb)";
case MediumTypes.ReadOnly: return "a Read-only optical";
- case MediumTypes.WORM: return "a Write-once Read-many optical";
+ case MediumTypes.WORM: return "a Write-once Read-many optical";
case MediumTypes.Erasable: return "a Erasable optical";
- case MediumTypes.RO_WORM: return "a combination of read-only and write-once optical";
+ case MediumTypes.RO_WORM: return "a combination of read-only and write-once optical";
// These magneto-opticals were never manufactured
/*
case MediumTypes.RO_RW:
@@ -93,7 +93,7 @@ namespace DiscImageChef.Decoders.SCSI
return "a combination of write-once and erasable optical";
*/
case MediumTypes.DOW: return "a direct-overwrite optical";
- default: return $"Unknown medium type 0x{(byte)type:X2}";
+ default: return $"Unknown medium type 0x{(byte)type:X2}";
}
}
@@ -1415,8 +1415,8 @@ namespace DiscImageChef.Decoders.SCSI
if(descriptor.Blocks == 0)
if(descriptor.BlockLength == 0)
sb
- .AppendFormat("\tAll remaining blocks conform to {0} and have a variable length",
- density).AppendLine();
+ .AppendFormat("\tAll remaining blocks conform to {0} and have a variable length",
+ density).AppendLine();
else
sb.AppendFormat("\tAll remaining blocks conform to {0} and are {1} bytes each",
density, descriptor.BlockLength).AppendLine();
diff --git a/SCSI/Modes/Mode10.cs b/SCSI/Modes/Mode10.cs
index 59641ddb9..417c2b508 100644
--- a/SCSI/Modes/Mode10.cs
+++ b/SCSI/Modes/Mode10.cs
@@ -46,7 +46,7 @@ namespace DiscImageChef.Decoders.SCSI
{
if(modeResponse == null || modeResponse.Length < 8) return null;
- ushort modeLength = (ushort)((modeResponse[0] << 8) + modeResponse[1]);
+ ushort modeLength = (ushort)((modeResponse[0] << 8) + modeResponse[1]);
ushort blockDescLength = (ushort)((modeResponse[6] << 8) + modeResponse[7]);
if(modeResponse.Length < modeLength) return null;
@@ -65,15 +65,15 @@ namespace DiscImageChef.Decoders.SCSI
header.BlockDescriptors[i] = new BlockDescriptor {Density = DensityType.Default};
byte[] temp = new byte[8];
- temp[0] = modeResponse[7 + i * 16 + 8];
- temp[1] = modeResponse[6 + i * 16 + 8];
- temp[2] = modeResponse[5 + i * 16 + 8];
- temp[3] = modeResponse[4 + i * 16 + 8];
- temp[4] = modeResponse[3 + i * 16 + 8];
- temp[5] = modeResponse[2 + i * 16 + 8];
- temp[6] = modeResponse[1 + i * 16 + 8];
- temp[7] = modeResponse[0 + i * 16 + 8];
- header.BlockDescriptors[i].Blocks = BitConverter.ToUInt64(temp, 0);
+ temp[0] = modeResponse[7 + i * 16 + 8];
+ temp[1] = modeResponse[6 + i * 16 + 8];
+ temp[2] = modeResponse[5 + i * 16 + 8];
+ temp[3] = modeResponse[4 + i * 16 + 8];
+ temp[4] = modeResponse[3 + i * 16 + 8];
+ temp[5] = modeResponse[2 + i * 16 + 8];
+ temp[6] = modeResponse[1 + i * 16 + 8];
+ temp[7] = modeResponse[0 + i * 16 + 8];
+ header.BlockDescriptors[i].Blocks = BitConverter.ToUInt64(temp, 0);
header.BlockDescriptors[i].BlockLength += (uint)(modeResponse[15 + i * 16 + 8] << 24);
header.BlockDescriptors[i].BlockLength += (uint)(modeResponse[14 + i * 16 + 8] << 16);
header.BlockDescriptors[i].BlockLength += (uint)(modeResponse[13 + i * 16 + 8] << 8);
@@ -92,12 +92,13 @@ namespace DiscImageChef.Decoders.SCSI
header.BlockDescriptors[i].Density = (DensityType)modeResponse[0 + i * 8 + 8];
else
{
- header.BlockDescriptors[i].Density = DensityType.Default;
- header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[0 + i * 8 + 8] << 24);
+ header.BlockDescriptors[i].Density = DensityType.Default;
+ header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[0 + i * 8 + 8] << 24);
}
- header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[1 + i * 8 + 8] << 16);
- header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[2 + i * 8 + 8] << 8);
- header.BlockDescriptors[i].Blocks += modeResponse[3 + i * 8 + 8];
+
+ header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[1 + i * 8 + 8] << 16);
+ header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[2 + i * 8 + 8] << 8);
+ header.BlockDescriptors[i].Blocks += modeResponse[3 + i * 8 + 8];
header.BlockDescriptors[i].BlockLength += (uint)(modeResponse[5 + i * 8 + 8] << 16);
header.BlockDescriptors[i].BlockLength += (uint)(modeResponse[6 + i * 8 + 8] << 8);
header.BlockDescriptors[i].BlockLength += modeResponse[7 + i * 8 + 8];
@@ -109,20 +110,20 @@ namespace DiscImageChef.Decoders.SCSI
case PeripheralDeviceTypes.DirectAccess:
case PeripheralDeviceTypes.MultiMediaDevice:
header.WriteProtected = (modeResponse[3] & 0x80) == 0x80;
- header.DPOFUA = (modeResponse[3] & 0x10) == 0x10;
+ header.DPOFUA = (modeResponse[3] & 0x10) == 0x10;
break;
case PeripheralDeviceTypes.SequentialAccess:
- header.WriteProtected = (modeResponse[3] & 0x80) == 0x80;
- header.Speed = (byte)(modeResponse[3] & 0x0F);
- header.BufferedMode = (byte)((modeResponse[3] & 0x70) >> 4);
+ header.WriteProtected = (modeResponse[3] & 0x80) == 0x80;
+ header.Speed = (byte)(modeResponse[3] & 0x0F);
+ header.BufferedMode = (byte)((modeResponse[3] & 0x70) >> 4);
break;
case PeripheralDeviceTypes.PrinterDevice:
header.BufferedMode = (byte)((modeResponse[3] & 0x70) >> 4);
break;
case PeripheralDeviceTypes.OpticalDevice:
header.WriteProtected = (modeResponse[3] & 0x80) == 0x80;
- header.EBC = (modeResponse[3] & 0x01) == 0x01;
- header.DPOFUA = (modeResponse[3] & 0x10) == 0x10;
+ header.EBC = (modeResponse[3] & 0x01) == 0x01;
+ header.DPOFUA = (modeResponse[3] & 0x10) == 0x10;
break;
}
@@ -140,13 +141,13 @@ namespace DiscImageChef.Decoders.SCSI
if(!hdr.HasValue) return null;
DecodedMode decoded = new DecodedMode {Header = hdr.Value};
- bool longlba = (modeResponse[4] & 0x01) == 0x01;
- int offset;
- int blkDrLength = 0;
+ bool longlba = (modeResponse[4] & 0x01) == 0x01;
+ int offset;
+ int blkDrLength = 0;
if(decoded.Header.BlockDescriptors != null) blkDrLength = decoded.Header.BlockDescriptors.Length;
if(longlba) offset = 8 + blkDrLength * 16;
- else offset = 8 + blkDrLength * 8;
+ else offset = 8 + blkDrLength * 8;
int length = modeResponse[0] << 8;
length += modeResponse[1];
length += 2;
@@ -157,17 +158,17 @@ namespace DiscImageChef.Decoders.SCSI
while(offset < modeResponse.Length)
{
- bool isSubpage = (modeResponse[offset] & 0x40) == 0x40;
- ModePage pg = new ModePage();
- byte pageNo = (byte)(modeResponse[offset] & 0x3F);
+ bool isSubpage = (modeResponse[offset] & 0x40) == 0x40;
+ ModePage pg = new ModePage();
+ byte pageNo = (byte)(modeResponse[offset] & 0x3F);
if(pageNo == 0)
{
pg.PageResponse = new byte[modeResponse.Length - offset];
Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
- pg.Page = 0;
- pg.Subpage = 0;
- offset += pg.PageResponse.Length;
+ pg.Page = 0;
+ pg.Subpage = 0;
+ offset += pg.PageResponse.Length;
}
else
{
@@ -178,9 +179,9 @@ namespace DiscImageChef.Decoders.SCSI
if(pg.PageResponse.Length + offset > modeResponse.Length) return decoded;
Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
- pg.Page = (byte)(modeResponse[offset] & 0x3F);
- pg.Subpage = modeResponse[offset + 1];
- offset += pg.PageResponse.Length;
+ pg.Page = (byte)(modeResponse[offset] & 0x3F);
+ pg.Subpage = modeResponse[offset + 1];
+ offset += pg.PageResponse.Length;
}
else
{
@@ -189,9 +190,9 @@ namespace DiscImageChef.Decoders.SCSI
if(pg.PageResponse.Length + offset > modeResponse.Length) return decoded;
Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
- pg.Page = (byte)(modeResponse[offset] & 0x3F);
- pg.Subpage = 0;
- offset += pg.PageResponse.Length;
+ pg.Page = (byte)(modeResponse[offset] & 0x3F);
+ pg.Subpage = 0;
+ offset += pg.PageResponse.Length;
}
}
@@ -204,7 +205,7 @@ namespace DiscImageChef.Decoders.SCSI
}
public static byte[] EncodeModeHeader10(ModeHeader header, PeripheralDeviceTypes deviceType,
- bool longLBA = false)
+ bool longLBA = false)
{
byte[] hdr;
@@ -221,11 +222,11 @@ namespace DiscImageChef.Decoders.SCSI
case PeripheralDeviceTypes.DirectAccess:
case PeripheralDeviceTypes.MultiMediaDevice:
if(header.WriteProtected) hdr[3] += 0x80;
- if(header.DPOFUA) hdr[3] += 0x10;
+ if(header.DPOFUA) hdr[3] += 0x10;
break;
case PeripheralDeviceTypes.SequentialAccess:
if(header.WriteProtected) hdr[3] += 0x80;
- hdr[3] += (byte)(header.Speed & 0x0F);
+ hdr[3] += (byte)(header.Speed & 0x0F);
hdr[3] += (byte)((header.BufferedMode << 4) & 0x70);
break;
case PeripheralDeviceTypes.PrinterDevice:
@@ -233,8 +234,8 @@ namespace DiscImageChef.Decoders.SCSI
break;
case PeripheralDeviceTypes.OpticalDevice:
if(header.WriteProtected) hdr[3] += 0x80;
- if(header.EBC) hdr[3] += 0x01;
- if(header.DPOFUA) hdr[3] += 0x10;
+ if(header.EBC) hdr[3] += 0x01;
+ if(header.DPOFUA) hdr[3] += 0x10;
break;
}
@@ -246,30 +247,30 @@ namespace DiscImageChef.Decoders.SCSI
for(int i = 0; i < header.BlockDescriptors.Length; i++)
{
byte[] temp = BitConverter.GetBytes(header.BlockDescriptors[i].Blocks);
- hdr[7 + i * 16 + 8] = temp[0];
- hdr[6 + i * 16 + 8] = temp[1];
- hdr[5 + i * 16 + 8] = temp[2];
- hdr[4 + i * 16 + 8] = temp[3];
- hdr[3 + i * 16 + 8] = temp[4];
- hdr[2 + i * 16 + 8] = temp[5];
- hdr[1 + i * 16 + 8] = temp[6];
- hdr[0 + i * 16 + 8] = temp[7];
+ hdr[7 + i * 16 + 8] = temp[0];
+ hdr[6 + i * 16 + 8] = temp[1];
+ hdr[5 + i * 16 + 8] = temp[2];
+ hdr[4 + i * 16 + 8] = temp[3];
+ hdr[3 + i * 16 + 8] = temp[4];
+ hdr[2 + i * 16 + 8] = temp[5];
+ hdr[1 + i * 16 + 8] = temp[6];
+ hdr[0 + i * 16 + 8] = temp[7];
hdr[12 + i * 16 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF000000) >> 24);
- hdr[13 + i * 16 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF0000) >> 16);
- hdr[14 + i * 16 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF00) >> 8);
+ hdr[13 + i * 16 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF0000) >> 16);
+ hdr[14 + i * 16 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF00) >> 8);
hdr[15 + i * 16 + 8] = (byte)(header.BlockDescriptors[i].BlockLength & 0xFF);
}
else
for(int i = 0; i < header.BlockDescriptors.Length; i++)
{
if(deviceType != PeripheralDeviceTypes.DirectAccess)
- hdr[0 + i * 8 + 8] = (byte)header.BlockDescriptors[i].Density;
+ hdr[0 + i * 8 + 8] = (byte)header.BlockDescriptors[i].Density;
else hdr[0 + i * 8 + 8] = (byte)((header.BlockDescriptors[i].Blocks & 0xFF000000) >> 24);
hdr[1 + i * 8 + 8] = (byte)((header.BlockDescriptors[i].Blocks & 0xFF0000) >> 16);
- hdr[2 + i * 8 + 8] = (byte)((header.BlockDescriptors[i].Blocks & 0xFF00) >> 8);
+ hdr[2 + i * 8 + 8] = (byte)((header.BlockDescriptors[i].Blocks & 0xFF00) >> 8);
hdr[3 + i * 8 + 8] = (byte)(header.BlockDescriptors[i].Blocks & 0xFF);
hdr[5 + i * 8 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF0000) >> 16);
- hdr[6 + i * 8 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF00) >> 8);
+ hdr[6 + i * 8 + 8] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF00) >> 8);
hdr[7 + i * 8 + 8] = (byte)(header.BlockDescriptors[i].BlockLength & 0xFF);
}
@@ -278,7 +279,7 @@ namespace DiscImageChef.Decoders.SCSI
public static byte[] EncodeMode10(DecodedMode mode, PeripheralDeviceTypes deviceType)
{
- int modeSize = 0;
+ int modeSize = 0;
if(mode.Pages != null) modeSize += mode.Pages.Sum(page => page.PageResponse.Length);
byte[] hdr = EncodeModeHeader10(mode.Header, deviceType);
diff --git a/SCSI/Modes/Mode6.cs b/SCSI/Modes/Mode6.cs
index 1a229cac6..9759e3400 100644
--- a/SCSI/Modes/Mode6.cs
+++ b/SCSI/Modes/Mode6.cs
@@ -54,10 +54,10 @@ namespace DiscImageChef.Decoders.SCSI
header.BlockDescriptors = new BlockDescriptor[modeResponse[3] / 8];
for(int i = 0; i < header.BlockDescriptors.Length; i++)
{
- header.BlockDescriptors[i].Density = (DensityType)modeResponse[0 + i * 8 + 4];
- header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[1 + i * 8 + 4] << 16);
- header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[2 + i * 8 + 4] << 8);
- header.BlockDescriptors[i].Blocks += modeResponse[3 + i * 8 + 4];
+ header.BlockDescriptors[i].Density = (DensityType)modeResponse[0 + i * 8 + 4];
+ header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[1 + i * 8 + 4] << 16);
+ header.BlockDescriptors[i].Blocks += (ulong)(modeResponse[2 + i * 8 + 4] << 8);
+ header.BlockDescriptors[i].Blocks += modeResponse[3 + i * 8 + 4];
header.BlockDescriptors[i].BlockLength += (uint)(modeResponse[5 + i * 8 + 4] << 16);
header.BlockDescriptors[i].BlockLength += (uint)(modeResponse[6 + i * 8 + 4] << 8);
header.BlockDescriptors[i].BlockLength += modeResponse[7 + i * 8 + 4];
@@ -69,20 +69,20 @@ namespace DiscImageChef.Decoders.SCSI
case PeripheralDeviceTypes.DirectAccess:
case PeripheralDeviceTypes.MultiMediaDevice:
header.WriteProtected = (modeResponse[2] & 0x80) == 0x80;
- header.DPOFUA = (modeResponse[2] & 0x10) == 0x10;
+ header.DPOFUA = (modeResponse[2] & 0x10) == 0x10;
break;
case PeripheralDeviceTypes.SequentialAccess:
- header.WriteProtected = (modeResponse[2] & 0x80) == 0x80;
- header.Speed = (byte)(modeResponse[2] & 0x0F);
- header.BufferedMode = (byte)((modeResponse[2] & 0x70) >> 4);
+ header.WriteProtected = (modeResponse[2] & 0x80) == 0x80;
+ header.Speed = (byte)(modeResponse[2] & 0x0F);
+ header.BufferedMode = (byte)((modeResponse[2] & 0x70) >> 4);
break;
case PeripheralDeviceTypes.PrinterDevice:
header.BufferedMode = (byte)((modeResponse[2] & 0x70) >> 4);
break;
case PeripheralDeviceTypes.OpticalDevice:
header.WriteProtected = (modeResponse[2] & 0x80) == 0x80;
- header.EBC = (modeResponse[2] & 0x01) == 0x01;
- header.DPOFUA = (modeResponse[2] & 0x10) == 0x10;
+ header.EBC = (modeResponse[2] & 0x01) == 0x01;
+ header.DPOFUA = (modeResponse[2] & 0x10) == 0x10;
break;
}
@@ -99,11 +99,11 @@ namespace DiscImageChef.Decoders.SCSI
ModeHeader? hdr = DecodeModeHeader6(modeResponse, deviceType);
if(!hdr.HasValue) return null;
- DecodedMode decoded = new DecodedMode {Header = hdr.Value};
- int blkDrLength = 0;
+ DecodedMode decoded = new DecodedMode {Header = hdr.Value};
+ int blkDrLength = 0;
if(decoded.Header.BlockDescriptors != null) blkDrLength = decoded.Header.BlockDescriptors.Length;
- int offset = 4 + blkDrLength * 8;
+ int offset = 4 + blkDrLength * 8;
int length = modeResponse[0] + 1;
if(length != modeResponse.Length) return decoded;
@@ -112,17 +112,17 @@ namespace DiscImageChef.Decoders.SCSI
while(offset < modeResponse.Length)
{
- bool isSubpage = (modeResponse[offset] & 0x40) == 0x40;
- ModePage pg = new ModePage();
- byte pageNo = (byte)(modeResponse[offset] & 0x3F);
+ bool isSubpage = (modeResponse[offset] & 0x40) == 0x40;
+ ModePage pg = new ModePage();
+ byte pageNo = (byte)(modeResponse[offset] & 0x3F);
if(pageNo == 0)
{
pg.PageResponse = new byte[modeResponse.Length - offset];
Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
- pg.Page = 0;
- pg.Subpage = 0;
- offset += pg.PageResponse.Length;
+ pg.Page = 0;
+ pg.Subpage = 0;
+ offset += pg.PageResponse.Length;
}
else
{
@@ -134,9 +134,9 @@ namespace DiscImageChef.Decoders.SCSI
if(pg.PageResponse.Length + offset > modeResponse.Length) return decoded;
Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
- pg.Page = (byte)(modeResponse[offset] & 0x3F);
- pg.Subpage = modeResponse[offset + 1];
- offset += pg.PageResponse.Length;
+ pg.Page = (byte)(modeResponse[offset] & 0x3F);
+ pg.Subpage = modeResponse[offset + 1];
+ offset += pg.PageResponse.Length;
}
else
{
@@ -146,9 +146,9 @@ namespace DiscImageChef.Decoders.SCSI
if(pg.PageResponse.Length + offset > modeResponse.Length) return decoded;
Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
- pg.Page = (byte)(modeResponse[offset] & 0x3F);
- pg.Subpage = 0;
- offset += pg.PageResponse.Length;
+ pg.Page = (byte)(modeResponse[offset] & 0x3F);
+ pg.Subpage = 0;
+ offset += pg.PageResponse.Length;
}
}
@@ -173,11 +173,11 @@ namespace DiscImageChef.Decoders.SCSI
case PeripheralDeviceTypes.DirectAccess:
case PeripheralDeviceTypes.MultiMediaDevice:
if(header.WriteProtected) hdr[2] += 0x80;
- if(header.DPOFUA) hdr[2] += 0x10;
+ if(header.DPOFUA) hdr[2] += 0x10;
break;
case PeripheralDeviceTypes.SequentialAccess:
if(header.WriteProtected) hdr[2] += 0x80;
- hdr[2] += (byte)(header.Speed & 0x0F);
+ hdr[2] += (byte)(header.Speed & 0x0F);
hdr[2] += (byte)((header.BufferedMode << 4) & 0x70);
break;
case PeripheralDeviceTypes.PrinterDevice:
@@ -185,8 +185,8 @@ namespace DiscImageChef.Decoders.SCSI
break;
case PeripheralDeviceTypes.OpticalDevice:
if(header.WriteProtected) hdr[2] += 0x80;
- if(header.EBC) hdr[2] += 0x01;
- if(header.DPOFUA) hdr[2] += 0x10;
+ if(header.EBC) hdr[2] += 0x01;
+ if(header.DPOFUA) hdr[2] += 0x10;
break;
}
@@ -198,10 +198,10 @@ namespace DiscImageChef.Decoders.SCSI
{
hdr[0 + i * 8 + 4] = (byte)header.BlockDescriptors[i].Density;
hdr[1 + i * 8 + 4] = (byte)((header.BlockDescriptors[i].Blocks & 0xFF0000) >> 16);
- hdr[2 + i * 8 + 4] = (byte)((header.BlockDescriptors[i].Blocks & 0xFF00) >> 8);
+ hdr[2 + i * 8 + 4] = (byte)((header.BlockDescriptors[i].Blocks & 0xFF00) >> 8);
hdr[3 + i * 8 + 4] = (byte)(header.BlockDescriptors[i].Blocks & 0xFF);
hdr[5 + i * 8 + 4] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF0000) >> 16);
- hdr[6 + i * 8 + 4] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF00) >> 8);
+ hdr[6 + i * 8 + 4] = (byte)((header.BlockDescriptors[i].BlockLength & 0xFF00) >> 8);
hdr[7 + i * 8 + 4] = (byte)(header.BlockDescriptors[i].BlockLength & 0xFF);
}
@@ -210,7 +210,7 @@ namespace DiscImageChef.Decoders.SCSI
public static byte[] EncodeMode6(DecodedMode mode, PeripheralDeviceTypes deviceType)
{
- int modeSize = 0;
+ int modeSize = 0;
if(mode.Pages != null) modeSize += mode.Pages.Sum(page => page.PageResponse.Length);
byte[] hdr = EncodeModeHeader6(mode.Header, deviceType);
diff --git a/SCSI/Modes/Structs.cs b/SCSI/Modes/Structs.cs
index 966055c9d..82f114693 100644
--- a/SCSI/Modes/Structs.cs
+++ b/SCSI/Modes/Structs.cs
@@ -42,25 +42,25 @@ namespace DiscImageChef.Decoders.SCSI
public struct BlockDescriptor
{
public DensityType Density;
- public ulong Blocks;
- public uint BlockLength;
+ public ulong Blocks;
+ public uint BlockLength;
}
public struct ModeHeader
{
- public MediumTypes MediumType;
- public bool WriteProtected;
+ public MediumTypes MediumType;
+ public bool WriteProtected;
public BlockDescriptor[] BlockDescriptors;
- public byte Speed;
- public byte BufferedMode;
- public bool EBC;
- public bool DPOFUA;
+ public byte Speed;
+ public byte BufferedMode;
+ public bool EBC;
+ public bool DPOFUA;
}
public struct ModePage
{
- public byte Page;
- public byte Subpage;
+ public byte Page;
+ public byte Subpage;
public byte[] PageResponse;
}
diff --git a/SCSI/SSC/BlockLimits.cs b/SCSI/SSC/BlockLimits.cs
index 8ea720997..e195ce869 100644
--- a/SCSI/SSC/BlockLimits.cs
+++ b/SCSI/SSC/BlockLimits.cs
@@ -65,7 +65,7 @@ namespace DiscImageChef.Decoders.SCSI.SSC
{
granularity = (byte)(response[0] & 0x1F),
maxBlockLen = (uint)((response[1] << 16) + (response[2] << 8) + response[3]),
- minBlockLen = (ushort)((response[4] << 8) + response[5])
+ minBlockLen = (ushort)((response[4] << 8) + response[5])
};
}
diff --git a/SCSI/SSC/DensitySupport.cs b/SCSI/SSC/DensitySupport.cs
index 3933a7adf..bb717da8e 100644
--- a/SCSI/SSC/DensitySupport.cs
+++ b/SCSI/SSC/DensitySupport.cs
@@ -45,32 +45,32 @@ namespace DiscImageChef.Decoders.SCSI.SSC
{
public struct DensitySupportHeader
{
- public ushort length;
- public ushort reserved;
+ public ushort length;
+ public ushort reserved;
public DensitySupportDescriptor[] descriptors;
}
public struct MediaTypeSupportHeader
{
- public ushort length;
- public ushort reserved;
+ public ushort length;
+ public ushort reserved;
public MediaTypeSupportDescriptor[] descriptors;
}
public struct DensitySupportDescriptor
{
- public byte primaryCode;
- public byte secondaryCode;
- public bool writable;
- public bool duplicate;
- public bool defaultDensity;
- public byte reserved;
- public bool lenvalid;
+ public byte primaryCode;
+ public byte secondaryCode;
+ public bool writable;
+ public bool duplicate;
+ public bool defaultDensity;
+ public byte reserved;
+ public bool lenvalid;
public ushort len;
- public uint bpmm;
+ public uint bpmm;
public ushort width;
public ushort tracks;
- public uint capacity;
+ public uint capacity;
public string organization;
public string name;
public string description;
@@ -78,15 +78,15 @@ namespace DiscImageChef.Decoders.SCSI.SSC
public struct MediaTypeSupportDescriptor
{
- public byte mediumType;
- public byte reserved1;
+ public byte mediumType;
+ public byte reserved1;
public ushort len;
- public byte numberOfCodes;
+ public byte numberOfCodes;
public byte[] densityCodes;
public ushort width;
public ushort length;
- public byte reserved2;
- public byte reserved3;
+ public byte reserved2;
+ public byte reserved3;
public string organization;
public string name;
public string description;
@@ -103,46 +103,52 @@ namespace DiscImageChef.Decoders.SCSI.SSC
if(response.Length != responseLen) return null;
List descriptors = new List();
- int offset = 4;
+ int offset = 4;
while(offset < response.Length)
{
DensitySupportDescriptor descriptor = new DensitySupportDescriptor
{
- primaryCode = response[offset + 0],
- secondaryCode = response[offset + 1],
- writable = (response[offset + 2] & 0x80) == 0x80,
- duplicate = (response[offset + 2] & 0x40) == 0x40,
+ primaryCode = response[offset + 0],
+ secondaryCode = response[offset + 1],
+ writable = (response[offset + 2] & 0x80) == 0x80,
+ duplicate = (response[offset + 2] & 0x40) == 0x40,
defaultDensity = (response[offset + 2] & 0x20) == 0x20,
- reserved = (byte)((response[offset + 2] & 0x1E) >> 1),
- lenvalid = (response[offset + 2] & 0x01) == 0x01,
- len = (ushort)((response[offset + 3] << 8) + response[offset + 4]),
- bpmm = (uint)((response[offset + 5] << 16) + (response[offset + 6] << 8) + response[offset + 7]),
- width = (ushort)((response[offset + 8] << 8) + response[offset + 9]),
- tracks = (ushort)((response[offset + 10] << 8) + response[offset + 11]),
+ reserved = (byte)((response[offset + 2] & 0x1E) >> 1),
+ lenvalid =
+ (response[offset + 2] &
+ 0x01) == 0x01,
+ len =
+ (ushort)((response[offset + 3] << 8) + response[offset + 4]),
+ bpmm =
+ (uint)((response[offset + 5] << 16) + (response[offset + 6] << 8) + response[offset + 7]),
+ width =
+ (ushort)((response[offset + 8] << 8) + response[offset + 9]),
+ tracks =
+ (ushort)((response[offset + 10] << 8) + response[offset + 11]),
capacity = (uint)((response[offset + 12] << 24) + (response[offset + 13] << 16) +
- (response[offset + 14] << 8) + response[offset + 15])
+ (response[offset + 14] << 8) + response[offset + 15])
};
byte[] tmp = new byte[8];
Array.Copy(response, offset + 16, tmp, 0, 8);
descriptor.organization = StringHandlers.CToString(tmp).Trim();
- tmp = new byte[8];
+ tmp = new byte[8];
Array.Copy(response, offset + 24, tmp, 0, 8);
descriptor.name = StringHandlers.CToString(tmp).Trim();
- tmp = new byte[20];
+ tmp = new byte[20];
Array.Copy(response, offset + 32, tmp, 0, 20);
descriptor.description = StringHandlers.CToString(tmp).Trim();
if(descriptor.lenvalid) offset += descriptor.len + 5;
- else offset += 52;
+ else offset += 52;
descriptors.Add(descriptor);
}
DensitySupportHeader decoded = new DensitySupportHeader
{
- length = responseLen,
- reserved = (ushort)((response[2] << 8) + response[3] + 2),
+ length = responseLen,
+ reserved = (ushort)((response[2] << 8) + response[3] + 2),
descriptors = descriptors.ToArray()
};
@@ -154,7 +160,7 @@ namespace DiscImageChef.Decoders.SCSI.SSC
if(density == null) return null;
DensitySupportHeader decoded = density.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
foreach(DensitySupportDescriptor descriptor in decoded.descriptors)
{
@@ -192,32 +198,32 @@ namespace DiscImageChef.Decoders.SCSI.SSC
if(response.Length != responseLen) return null;
List descriptors = new List();
- int offset = 4;
+ int offset = 4;
while(offset < response.Length)
{
MediaTypeSupportDescriptor descriptor = new MediaTypeSupportDescriptor
{
mediumType = response[offset + 0],
- reserved1 = response[offset + 1],
- len = (ushort)((response[offset + 2] << 8) + response[offset + 3])
+ reserved1 = response[offset + 1],
+ len = (ushort)((response[offset + 2] << 8) + response[offset + 3])
};
if(descriptor.len != 52) return null;
descriptor.numberOfCodes = response[offset + 4];
- descriptor.densityCodes = new byte[9];
- Array.Copy(response, offset + 5, descriptor.densityCodes, 0, 9);
- descriptor.width = (ushort)((response[offset + 14] << 8) + response[offset + 15]);
- descriptor.length = (ushort)((response[offset + 16] << 8) + response[offset + 17]);
+ descriptor.densityCodes = new byte[9];
+ Array.Copy(response, offset + 5, descriptor.densityCodes, 0, 9);
+ descriptor.width = (ushort)((response[offset + 14] << 8) + response[offset + 15]);
+ descriptor.length = (ushort)((response[offset + 16] << 8) + response[offset + 17]);
descriptor.reserved1 = response[offset + 18];
descriptor.reserved1 = response[offset + 19];
byte[] tmp = new byte[8];
Array.Copy(response, offset + 20, tmp, 0, 8);
descriptor.organization = StringHandlers.CToString(tmp).Trim();
- tmp = new byte[8];
+ tmp = new byte[8];
Array.Copy(response, offset + 28, tmp, 0, 8);
descriptor.name = StringHandlers.CToString(tmp).Trim();
- tmp = new byte[20];
+ tmp = new byte[20];
Array.Copy(response, offset + 36, tmp, 0, 20);
descriptor.description = StringHandlers.CToString(tmp).Trim();
@@ -228,8 +234,8 @@ namespace DiscImageChef.Decoders.SCSI.SSC
MediaTypeSupportHeader decoded = new MediaTypeSupportHeader
{
- length = responseLen,
- reserved = (ushort)((response[2] << 8) + response[3] + 2),
+ length = responseLen,
+ reserved = (ushort)((response[2] << 8) + response[3] + 2),
descriptors = descriptors.ToArray()
};
@@ -241,7 +247,7 @@ namespace DiscImageChef.Decoders.SCSI.SSC
if(mediumType == null) return null;
MediaTypeSupportHeader decoded = mediumType.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
foreach(MediaTypeSupportDescriptor descriptor in decoded.descriptors)
{
diff --git a/SCSI/Sense.cs b/SCSI/Sense.cs
index 63f00449e..4495e1130 100644
--- a/SCSI/Sense.cs
+++ b/SCSI/Sense.cs
@@ -200,7 +200,7 @@ namespace DiscImageChef.Decoders.SCSI
/// If set, is valid
///
public bool SKSV;
- public uint SenseKeySpecific;
+ public uint SenseKeySpecific;
public byte[] AdditionalSense;
}
@@ -234,9 +234,9 @@ namespace DiscImageChef.Decoders.SCSI
public struct AnotherProgressIndicationSenseDescriptor
{
public SenseKeys SenseKey;
- public byte ASC;
- public byte ASCQ;
- public ushort Progress;
+ public byte ASC;
+ public byte ASCQ;
+ public ushort Progress;
}
[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
@@ -257,10 +257,10 @@ namespace DiscImageChef.Decoders.SCSI
switch(sense[0] & 0x0F)
{
- case 0: return SenseType.ExtendedSenseFixedCurrent;
- case 1: return SenseType.ExtendedSenseFixedPast;
- case 2: return SenseType.ExtendedSenseDescriptorCurrent;
- case 3: return SenseType.ExtendedSenseDescriptorPast;
+ case 0: return SenseType.ExtendedSenseFixedCurrent;
+ case 1: return SenseType.ExtendedSenseFixedPast;
+ case 2: return SenseType.ExtendedSenseDescriptorCurrent;
+ case 3: return SenseType.ExtendedSenseDescriptorPast;
default: return SenseType.Unknown;
}
}
@@ -271,10 +271,10 @@ namespace DiscImageChef.Decoders.SCSI
StandardSense decoded = new StandardSense();
decoded.AddressValid |= (sense[0] & 0x80) == 0x80;
- decoded.ErrorClass = (byte)((sense[0] & 0x70) >> 4);
- decoded.ErrorType = (byte)(sense[0] & 0x0F);
- decoded.Private = (byte)((sense[1] & 0x80) >> 4);
- decoded.LBA = (uint)(((sense[1] & 0x0F) << 16) + (sense[2] << 8) + sense[3]);
+ decoded.ErrorClass = (byte)((sense[0] & 0x70) >> 4);
+ decoded.ErrorType = (byte)(sense[0] & 0x0F);
+ decoded.Private = (byte)((sense[1] & 0x80) >> 4);
+ decoded.LBA = (uint)(((sense[1] & 0x0F) << 16) + (sense[2] << 8) + sense[3]);
return decoded;
}
@@ -294,12 +294,12 @@ namespace DiscImageChef.Decoders.SCSI
FixedSense decoded = new FixedSense
{
InformationValid = (sense[0] & 0x80) == 0x80,
- SegmentNumber = sense[1],
- Filemark = (sense[2] & 0x80) == 0x80,
- EOM = (sense[2] & 0x40) == 0x40,
- ILI = (sense[2] & 0x20) == 0x20,
- SenseKey = (SenseKeys)(sense[2] & 0x0F),
- Information = (uint)((sense[3] << 24) + (sense[4] << 16) + (sense[5] << 8) + sense[6]),
+ SegmentNumber = sense[1],
+ Filemark = (sense[2] & 0x80) == 0x80,
+ EOM = (sense[2] & 0x40) == 0x40,
+ ILI = (sense[2] & 0x20) == 0x20,
+ SenseKey = (SenseKeys)(sense[2] & 0x0F),
+ Information = (uint)((sense[3] << 24) + (sense[4] << 16) + (sense[5] << 8) + sense[6]),
AdditionalLength = sense[7]
};
@@ -308,8 +308,8 @@ namespace DiscImageChef.Decoders.SCSI
if(sense.Length >= 14)
{
- decoded.ASC = sense[12];
- decoded.ASCQ = sense[13];
+ decoded.ASC = sense[12];
+ decoded.ASCQ = sense[13];
senseDescription = GetSenseDescription(decoded.ASC, decoded.ASCQ);
}
@@ -340,10 +340,10 @@ namespace DiscImageChef.Decoders.SCSI
DescriptorSense decoded = new DescriptorSense
{
- SenseKey = (SenseKeys)(sense[1] & 0x0F),
- ASC = sense[2],
- ASCQ = sense[3],
- Overflow = (sense[4] & 0x80) == 0x80,
+ SenseKey = (SenseKeys)(sense[1] & 0x0F),
+ ASC = sense[2],
+ ASCQ = sense[3],
+ Overflow = (sense[4] & 0x80) == 0x80,
Descriptors = new Dictionary()
};
@@ -354,7 +354,7 @@ namespace DiscImageChef.Decoders.SCSI
if(offset + 2 < sense.Length)
{
byte descType = sense[offset];
- int descLen = sense[offset + 1] + 1;
+ int descLen = sense[offset + 1] + 1;
byte[] desc = new byte[descLen];
Array.Copy(sense, offset, desc, 0, descLen);
@@ -363,7 +363,8 @@ namespace DiscImageChef.Decoders.SCSI
offset += descLen;
}
- else break;
+ else
+ break;
return decoded;
}
@@ -554,8 +555,8 @@ namespace DiscImageChef.Decoders.SCSI
return new AnotherProgressIndicationSenseDescriptor
{
SenseKey = (SenseKeys)descriptor[2],
- ASC = descriptor[3],
- ASCQ = descriptor[4],
+ ASC = descriptor[3],
+ ASCQ = descriptor[4],
Progress = (ushort)((descriptor[6] << 8) + descriptor[7])
};
}
@@ -589,13 +590,13 @@ namespace DiscImageChef.Decoders.SCSI
{
return new AtaErrorRegistersLba48
{
- Error = descriptor[3],
- SectorCount = (ushort)((descriptor[4] << 8) + descriptor[5]),
- LbaLow = (ushort)((descriptor[6] << 8) + descriptor[7]),
- LbaMid = (ushort)((descriptor[8] << 8) + descriptor[9]),
- LbaHigh = (ushort)((descriptor[10] << 8) + descriptor[11]),
- DeviceHead = descriptor[12],
- Status = descriptor[13]
+ Error = descriptor[3],
+ SectorCount = (ushort)((descriptor[4] << 8) + descriptor[5]),
+ LbaLow = (ushort)((descriptor[6] << 8) + descriptor[7]),
+ LbaMid = (ushort)((descriptor[8] << 8) + descriptor[9]),
+ LbaHigh = (ushort)((descriptor[10] << 8) + descriptor[11]),
+ DeviceHead = descriptor[12],
+ Status = descriptor[13]
};
}
@@ -624,21 +625,21 @@ namespace DiscImageChef.Decoders.SCSI
switch(key)
{
case SenseKeys.AbortedCommand: return "ABORTED COMMAND";
- case SenseKeys.BlankCheck: return "BLANK CHECK";
- case SenseKeys.CopyAborted: return "COPY ABORTED";
- case SenseKeys.DataProtect: return "DATA PROTECT";
- case SenseKeys.Equal: return "EQUAL";
- case SenseKeys.HardwareError: return "HARDWARE ERROR";
+ case SenseKeys.BlankCheck: return "BLANK CHECK";
+ case SenseKeys.CopyAborted: return "COPY ABORTED";
+ case SenseKeys.DataProtect: return "DATA PROTECT";
+ case SenseKeys.Equal: return "EQUAL";
+ case SenseKeys.HardwareError: return "HARDWARE ERROR";
case SenseKeys.IllegalRequest: return "ILLEGAL REQUEST";
- case SenseKeys.MediumError: return "MEDIUM ERROR";
- case SenseKeys.Miscompare: return "MISCOMPARE";
- case SenseKeys.NoSense: return "NO SENSE";
- case SenseKeys.PrivateUse: return "PRIVATE USE";
+ case SenseKeys.MediumError: return "MEDIUM ERROR";
+ case SenseKeys.Miscompare: return "MISCOMPARE";
+ case SenseKeys.NoSense: return "NO SENSE";
+ case SenseKeys.PrivateUse: return "PRIVATE USE";
case SenseKeys.RecoveredError: return "RECOVERED ERROR";
- case SenseKeys.Completed: return "COMPLETED";
- case SenseKeys.UnitAttention: return "UNIT ATTENTION";
+ case SenseKeys.Completed: return "COMPLETED";
+ case SenseKeys.UnitAttention: return "UNIT ATTENTION";
case SenseKeys.VolumeOverflow: return "VOLUME OVERFLOW";
- default: return "UNKNOWN";
+ default: return "UNKNOWN";
}
}
@@ -1460,7 +1461,7 @@ namespace DiscImageChef.Decoders.SCSI
switch(ASCQ)
{
case 0x00: return "RAM FAILURE";
- default: return $"DIAGNOSTIC FAILURE ON COMPONENT {ASCQ:X2}h";
+ default: return $"DIAGNOSTIC FAILURE ON COMPONENT {ASCQ:X2}h";
}
case 0x41:
switch(ASCQ)
diff --git a/SCSI/VendorString.cs b/SCSI/VendorString.cs
index 8b063957b..6605e7635 100644
--- a/SCSI/VendorString.cs
+++ b/SCSI/VendorString.cs
@@ -38,805 +38,805 @@ namespace DiscImageChef.Decoders.SCSI
{
switch(scsiVendorString)
{
- case "0B4C": return "MOOSIK Ltd.";
- case "13FE": return "PHISON";
- case "2AI": return "2AI (Automatisme et Avenir Informatique)";
- case "3M": return "3M Company";
- case "3nhtech": return "3NH Technologies";
- case "3PARdata": return "3PARdata, Inc.";
- case "A-Max": return "A-Max Technology Co., Ltd";
- case "ABSOLUTE": return "Absolute Analysis";
- case "ACARD": return "ACARD Technology Corp.";
- case "Accusys": return "Accusys INC.";
- case "Acer": return "Acer, Inc.";
- case "ACL": return "Automated Cartridge Librarys, Inc.";
- case "Actifio": return "Actifio";
- case "Acuid": return "Acuid Corporation Ltd.";
- case "AcuLab": return "AcuLab, Inc. (Tulsa, OK)";
- case "ADAPTEC": return "Adaptec";
- case "ADIC": return "Advanced Digital Information Corporation";
- case "ADSI": return "Adaptive Data Systems, Inc. (a Western Digital subsidiary)";
- case "ADTX": return "ADTX Co., Ltd.";
- case "ADVA": return "ADVA Optical Networking AG";
- case "AEM": return "AEM Performance Electronics";
- case "AERONICS": return "Aeronics, Inc.";
- case "AGFA": return "AGFA";
- case "Agilent": return "Agilent Technologies";
- case "AIC": return "Advanced Industrial Computer, Inc.";
- case "AIPTEK": return "AIPTEK International Inc.";
- case "Alcohol": return "Alcohol Soft";
- case "ALCOR": return "Alcor Micro, Corp.";
- case "AMCC": return "Applied Micro Circuits Corporation";
- case "AMCODYNE": return "Amcodyne";
- case "Amgeon": return "Amgeon LLC";
- case "AMI": return "American Megatrends, Inc.";
- case "AMPEX": return "Ampex Data Systems";
- case "Amphenol": return "Amphenol";
- case "Amtl": return "Tenlon Technology Co.,Ltd";
- case "ANAMATIC": return "Anamartic Limited (England)";
- case "Ancor": return "Ancor Communications, Inc.";
- case "ANCOT": return "ANCOT Corp.";
- case "ANDATACO": return "Andataco";
- case "andiamo": return "Andiamo Systems, Inc.";
- case "ANOBIT": return "Anobit";
- case "ANRITSU": return "Anritsu Corporation";
- case "ANTONIO": return "Antonio Precise Products Manufactory Ltd.";
- case "AoT": return "Art of Technology AG";
- case "APPLE": return "Apple Computer, Inc.";
- case "ARCHIVE": return "Archive";
- case "ARDENCE": return "Ardence Inc";
- case "Areca": return "Areca Technology Corporation";
- case "Arena": return "MaxTronic International Co., Ltd.";
- case "Argent": return "Argent Data Systems, Inc.";
- case "ARIO": return "Ario Data Networks, Inc.";
- case "ARISTOS": return "Aristos Logic Corp.";
- case "ARK": return "ARK Research Corporation";
- case "ARL:UT@A": return "Applied Research Laboratories : University of Texas at Austin";
- case "ARTECON": return "Artecon Inc.";
- case "Artistic": return "Artistic Licence (UK) Ltd";
- case "ARTON": return "Arton Int.";
- case "ASACA": return "ASACA Corp.";
- case "ASC": return "Advanced Storage Concepts, Inc.";
- case "ASPEN": return "Aspen Peripherals";
- case "AST": return "AST Research";
- case "ASTEK": return "Astek Corporation";
- case "ASTK": return "Alcatel STK A/S";
- case "AStor": return "AccelStor, Inc.";
- case "ASTUTE": return "Astute Networks, Inc.";
- case "AT&T": return "AT&T";
- case "ATA": return "SCSI / ATA Translator Software (Organization Not Specified)";
- case "ATARI": return "Atari Corporation";
- case "ATech": return "ATech electronics";
- case "ATG CYG": return "ATG Cygnet Inc.";
- case "ATL": return "Quantum|ATL Products";
- case "ATTO": return "ATTO Technology Inc.";
- case "ATTRATEC": return "Attratech Ltd liab. Co";
- case "ATX": return "Alphatronix";
- case "AURASEN": return "Aurasen Limited";
- case "Avago": return "Avago Technologies";
- case "AVC": return "AVC Technology Ltd";
- case "AVIDVIDR": return "AVID Technologies, Inc.";
- case "AVR": return "Advanced Vision Research";
- case "AXSTOR": return "AXSTOR";
- case "Axxana": return "Axxana Ltd.";
- case "B*BRIDGE": return "Blockbridge Networks LLC";
- case "BALLARD": return "Ballard Synergy Corp.";
- case "Barco": return "Barco";
- case "BAROMTEC": return "Barom Technologies Co., Ltd.";
- case "Bassett": return "Bassett Electronic Systems Ltd";
- case "BC Hydro": return "BC Hydro";
- case "BDT": return "BDT AG";
- case "BECEEM": return "Beceem Communications, Inc";
- case "BENQ": return "BENQ Corporation.";
- case "BERGSWD": return "Berg Software Design";
- case "BEZIER": return "Bezier Systems, Inc.";
- case "BHTi": return "Breece Hill Technologies";
- case "biodata": return "Biodata Devices SL";
- case "BIOS": return "BIOS Corporation";
- case "BIR": return "Bio-Imaging Research, Inc.";
- case "BiT": return "BiT Microsystems";
- case "BITMICRO": return "BiT Microsystems, Inc.";
- case "Blendlgy": return "Blendology Limited";
- case "BLOOMBAS": return "Bloombase Technologies Limited";
- case "BlueArc": return "BlueArc Corporation";
- case "bluecog": return "bluecog";
- case "BME-HVT": return "Broadband Infocommunicatons and Electromagnetic Theory Department";
- case "BNCHMARK": return "Benchmark Tape Systems Corporation";
- case "Bosch": return "Robert Bosch GmbH";
- case "Botman": return "Botmanfamily Electronics";
- case "BoxHill": return "Box Hill Systems Corporation";
- case "BRDGWRKS": return "Bridgeworks Ltd.";
- case "BREA": return "BREA Technologies, Inc.";
- case "BREECE": return "Breece Hill LLC";
- case "BreqLabs": return "BreqLabs Inc.";
- case "Broadcom": return "Broadcom Corporation";
- case "BROCADE": return "Brocade Communications Systems, Incorporated";
- case "BUFFALO": return "BUFFALO INC.";
- case "BULL": return "Bull Peripherals Corp.";
- case "BUSLOGIC": return "BusLogic Inc.";
- case "BVIRTUAL": return "B-Virtual N.V.";
- case "CACHEIO": return "CacheIO LLC";
- case "CalComp": return "CalComp, A Lockheed Company";
- case "CALCULEX": return "CALCULEX, Inc.";
- case "CALIPER": return "Caliper (California Peripheral Corp.)";
- case "CAMBEX": return "Cambex Corporation";
- case "CAMEOSYS": return "Cameo Systems Inc.";
- case "CANDERA": return "Candera Inc.";
- case "CAPTION": return "CAPTION BANK";
- case "CAST": return "Advanced Storage Tech";
- case "CATALYST": return "Catalyst Enterprises";
- case "CCDISK": return "iSCSI Cake";
- case "CDC": return "Control Data or MPI";
- case "CDP": return "Columbia Data Products";
- case "Celsia": return "A M Bromley Limited";
- case "CenData": return "Central Data Corporation";
- case "Cereva": return "Cereva Networks Inc.";
- case "CERTANCE": return "Certance";
- case "Chantil": return "Chantil Technology";
- case "CHEROKEE": return "Cherokee Data Systems";
- case "CHINON": return "Chinon";
- case "CHRISTMA": return "Christmann Informationstechnik + Medien GmbH & Co KG";
- case "CIE&YED": return "YE Data, C.Itoh Electric Corp.";
- case "CIPHER": return "Cipher Data Products";
- case "Ciprico": return "Ciprico, Inc.";
- case "CIRRUSL": return "Cirrus Logic Inc.";
- case "CISCO": return "Cisco Systems, Inc.";
- case "CLEARSKY": return "ClearSky Data, Inc.";
- case "CLOVERLF": return "Cloverleaf Communications, Inc";
- case "CLS": return "Celestica";
- case "CMD": return "CMD Technology Inc.";
- case "CMTechno": return "CMTech";
- case "CNGR SFW": return "Congruent Software, Inc.";
- case "CNSi": return "Chaparral Network Storage, Inc.";
- case "CNT": return "Computer Network Technology";
- case "COBY": return "Coby Electronics Corporation, USA";
- case "COGITO": return "Cogito";
- case "COMAY": return "Corerise Electronics";
- case "COMPAQ": return "Compaq Computer Corporation";
- case "COMPELNT": return "Compellent Technologies, Inc.";
- case "COMPORT": return "Comport Corp.";
- case "COMPSIG": return "Computer Signal Corporation";
- case "COMPTEX": return "Comptex Pty Limited";
- case "CONNER": return "Conner Peripherals";
- case "COPANSYS": return "COPAN SYSTEMS INC";
- case "CORAID": return "Coraid, Inc";
- case "CORE": return "Core International, Inc.";
- case "CORERISE": return "Corerise Electronics";
- case "COVOTE": return "Covote GmbH & Co KG";
- case "COWON": return "COWON SYSTEMS, Inc.";
- case "CPL": return "Cross Products Ltd";
- case "CPU TECH": return "CPU Technology, Inc.";
- case "CREO": return "Creo Products Inc.";
- case "CROSFLD": return "Crosfield Electronics";
- case "CROSSRDS": return "Crossroads Systems, Inc.";
- case "crosswlk": return "Crosswalk, Inc.";
- case "CSCOVRTS": return "Cisco - Veritas";
- case "CSM, INC": return "Computer SM, Inc.";
- case "Cunuqui": return "CUNUQUI SLU";
- case "CYBERNET": return "Cybernetics";
- case "Cygnal": return "Dekimo";
- case "CYPRESS": return "Cypress Semiconductor Corp.";
- case "D Bit": return "Digby's Bitpile, Inc. DBA D Bit";
- case "DALSEMI": return "Dallas Semiconductor";
- case "DANEELEC": return "Dane-Elec";
- case "DANGER": return "Danger Inc.";
- case "DAT-MG": return "DAT Manufacturers Group";
- case "Data Com": return "Data Com Information Systems Pty. Ltd.";
- case "DATABOOK": return "Databook, Inc.";
- case "DATACOPY": return "Datacopy Corp.";
- case "DataCore": return "DataCore Software Corporation";
- case "DataG": return "DataGravity";
- case "DATAPT": return "Datapoint Corp.";
- case "DATARAM": return "Dataram Corporation";
- case "DATC": return "Datum Champion Technology Co., Ltd";
- case "DAVIS": return "Daviscomms (S) Pte Ltd";
- case "DCS": return "ShenZhen DCS Group Co.,Ltd";
- case "DDN": return "DataDirect Networks, Inc.";
- case "DDRDRIVE": return "DDRdrive LLC";
- case "DE": return "Dimension Engineering LLC";
- case "DEC": return "Digital Equipment Corporation";
- case "DEI": return "Digital Engineering, Inc.";
- case "DELL": return "Dell, Inc.";
- case "Dell(tm)": return "Dell, Inc";
- case "DELPHI": return "Delphi Data Div. of Sparks Industries, Inc.";
- case "DENON": return "Denon/Nippon Columbia";
- case "DenOptix": return "DenOptix, Inc.";
- case "DEST": return "DEST Corp.";
- case "DFC": return "DavioFranke.com";
- case "DFT": return "Data Fault Tolerance System CO.,LTD.";
- case "DGC": return "Data General Corp.";
- case "DIGIDATA": return "Digi-Data Corporation";
- case "DigiIntl": return "Digi International";
- case "Digital": return "Digital Equipment Corporation";
- case "DILOG": return "Distributed Logic Corp.";
- case "DISC": return "Document Imaging Systems Corp.";
- case "DiscSoft": return "Disc Soft Ltd";
- case "DLNET": return "Driveline";
- case "DNS": return "Data and Network Security";
- case "DNUK": return "Digital Networks Uk Ltd";
- case "DotHill": return "Dot Hill Systems Corp.";
- case "DP": return "Dell, Inc.";
- case "DPT": return "Distributed Processing Technology";
- case "Drewtech": return "Drew Technologies, Inc.";
- case "DROBO": return "Data Robotics, Inc.";
- case "DSC": return "DigitalStream Corporation";
- case "DSI": return "Data Spectrum, Inc.";
- case "DSM": return "Deterner Steuerungs- und Maschinenbau GmbH & Co.";
- case "DSNET": return "Cleversafe, Inc.";
- case "DT": return "Double-Take Software, INC.";
- case "DTC QUME": return "Data Technology Qume";
- case "DXIMAGIN": return "DX Imaging";
- case "E-Motion": return "E-Motion LLC";
- case "EARTHLAB": return "EarthLabs";
- case "EarthLCD": return "Earth Computer Technologies, Inc.";
- case "ECCS": return "ECCS, Inc.";
- case "ECMA": return "European Computer Manufacturers Association";
- case "EDS": return "Embedded Data Systems";
- case "EIM": return "InfoCore";
- case "ELE Intl": return "ELE International";
- case "ELEGANT": return "Elegant Invention, LLC";
- case "Elektron": return "Elektron Music Machines MAV AB";
- case "elipsan": return "Elipsan UK Ltd.";
- case "Elms": return "Elms Systems Corporation";
- case "ELSE": return "ELSE Ltd.";
- case "ELSEC": return "Littlemore Scientific";
- case "EMASS": return "EMASS, Inc.";
- case "EMC": return "EMC Corp.";
- case "EMiT": return "EMiT Conception Eletronique";
- case "EMTEC": return "EMTEC Magnetics";
- case "EMULEX": return "Emulex";
- case "ENERGY-B": return "Energybeam Corporation";
- case "ENGENIO": return "Engenio Information Technologies, Inc.";
- case "ENMOTUS": return "Enmotus Inc";
- case "Entacore": return "Entacore";
- case "EPOS": return "EPOS Technologies Ltd.";
- case "EPSON": return "Epson";
- case "EQLOGIC": return "EqualLogic";
- case "Eris/RSI": return "RSI Systems, Inc.";
- case "ETERNE": return "EterneData Technology Co.,Ltd.(China PRC.)";
- case "EuroLogc": return "Eurologic Systems Limited";
- case "evolve": return "Evolution Technologies, Inc";
- case "EXABYTE": return "Exabyte Corp.";
- case "EXATEL": return "Exatelecom Co., Ltd.";
- case "EXAVIO": return "Exavio, Inc.";
- case "Exsequi": return "Exsequi Ltd";
- case "Exxotest": return "Annecy Electronique";
- case "FAIRHAVN": return "Fairhaven Health, LLC";
- case "FALCON": return "FalconStor, Inc.";
- case "FDS": return "Formation Data Systems";
- case "FFEILTD": return "FujiFilm Electonic Imaging Ltd";
- case "Fibxn": return "Fiberxon, Inc.";
- case "FID": return "First International Digital, Inc.";
- case "FILENET": return "FileNet Corp.";
- case "FirmFact": return "Firmware Factory Ltd";
- case "FLYFISH": return "Flyfish Technologies";
- case "FOXCONN": return "Foxconn Technology Group";
- case "FRAMDRV": return "FRAMEDRIVE Corp.";
- case "FREECION": return "Nable Communications, Inc.";
- case "FRESHDTK": return "FreshDetect GmbH";
- case "FSC": return "Fujitsu Siemens Computers";
- case "FTPL": return "Frontline Technologies Pte Ltd";
- case "FUJI": return "Fuji Electric Co., Ltd. (Japan)";
- case "FUJIFILM": return "Fuji Photo Film, Co., Ltd.";
- case "FUJITSU": return "Fujitsu";
- case "FUNAI": return "Funai Electric Co., Ltd.";
- case "FUSIONIO": return "Fusion-io Inc.";
- case "FUTURED": return "Future Domain Corp.";
- case "G&D": return "Giesecke & Devrient GmbH";
- case "G.TRONIC": return "Globaltronic - Electronica e Telecomunicacoes, S.A.";
- case "Gadzoox": return "Gadzoox Networks, Inc.";
- case "Gammaflx": return "Gammaflux L.P.";
- case "GDI": return "Generic Distribution International";
- case "GEMALTO": return "gemalto";
- case "Gen_Dyn": return "General Dynamics";
- case "Generic": return "Generic Technology Co., Ltd.";
- case "GENSIG": return "General Signal Networks";
- case "GEO": return "Green Energy Options Ltd";
- case "GIGATAPE": return "GIGATAPE GmbH";
- case "GIGATRND": return "GigaTrend Incorporated";
- case "Global": return "Global Memory Test Consortium";
- case "Gnutek": return "Gnutek Ltd.";
- case "Goidelic": return "Goidelic Precision, Inc.";
- case "GoldKey": return "GoldKey Security Corporation";
- case "GoldStar": return "LG Electronics Inc.";
- case "GOOGLE": return "Google, Inc.";
- case "GORDIUS": return "Gordius";
- case "GOULD": return "Gould";
- case "HAGIWARA": return "Hagiwara Sys-Com Co., Ltd.";
- case "HAPP3": return "Inventec Multimedia and Telecom co., ltd";
- case "HDS": return "Horizon Data Systems, Inc.";
- case "Helldyne": return "Helldyne, Inc";
- case "Heydays": return "Mazo Technology Co., Ltd.";
- case "HGST": return "HGST a Western Digital Company";
- case "HI-TECH": return "HI-TECH Software Pty. Ltd.";
- case "HITACHI": return "Hitachi America Ltd or Nissei Sangyo America Ltd";
- case "HL-DT-ST": return "Hitachi-LG Data Storage, Inc.";
- case "HONEYWEL": return "Honeywell Inc.";
- case "Hoptroff": return "HexWax Ltd";
- case "HORIZONT": return "Horizontigo Software";
- case "HP": return "Hewlett Packard";
- case "HPE": return "Hewlett Packard Enterprise";
- case "HPI": return "HP Inc.";
- case "HPQ": return "Hewlett Packard";
- case "HUALU": return "CHINA HUALU GROUP CO., LTD";
- case "HUASY": return "Huawei Symantec Technologies Co., Ltd.";
- case "HYLINX": return "Hylinx Ltd.";
- case "HYUNWON": return "HYUNWON inc";
- case "i-cubed": return "i-cubed ltd.";
- case "IBM": return "International Business Machines";
- case "Icefield": return "Icefield Tools Corporation";
- case "Iceweb": return "Iceweb Storage Corp";
- case "ICL": return "ICL";
- case "ICP": return "ICP vortex Computersysteme GmbH";
- case "IDE": return "International Data Engineering, Inc.";
- case "IDG": return "Interface Design Group";
- case "IET": return "ISCSI ENTERPRISE TARGET";
- case "IFT": return "Infortrend Technology, Inc.";
- case "IGR": return "Intergraph Corp.";
- case "IMAGINE": return "Imagine Communications Corp.";
- case "IMAGO": return "IMAGO SOFTWARE SL";
- case "IMATION": return "Imation";
- case "IMPLTD": return "Integrated Micro Products Ltd.";
- case "IMPRIMIS": return "Imprimis Technology Inc.";
- case "INCIPNT": return "Incipient Technologies Inc.";
- case "INCITS": return "InterNational Committee for Information Technology";
- case "INDCOMP": return "Industrial Computing Limited";
- case "Indigita": return "Indigita Corporation";
- case "INFOCORE": return "InfoCore";
- case "INITIO": return "Initio Corporation";
- case "INRANGE": return "INRANGE Technologies Corporation";
- case "Insight": return "L-3 Insight Technology Inc";
- case "INSITE": return "Insite Peripherals";
- case "integrix": return "Integrix, Inc.";
- case "INTEL": return "Intel Corporation";
- case "Intransa": return "Intransa, Inc.";
- case "IOC": return "I/O Concepts, Inc.";
- case "iofy": return "iofy Corporation";
- case "IOMEGA": return "Iomega";
- case "IOT": return "IO Turbine, Inc.";
- case "iPaper": return "intelliPaper, LLC";
- case "iqstor": return "iQstor Networks, Inc.";
- case "iQue": return "iQue";
- case "ISi": return "Information Storage inc.";
- case "Isilon": return "Isilon Systems, Inc.";
- case "ISO": return "International Standards Organization";
- case "iStor": return "iStor Networks, Inc.";
- case "ITC": return "International Tapetronics Corporation";
- case "iTwin": return "iTwin Pte Ltd";
- case "IVIVITY": return "iVivity, Inc.";
- case "IVMMLTD": return "InnoVISION Multimedia Ltd.";
- case "JABIL001": return "Jabil Circuit";
- case "JETWAY": return "Jetway Information Co., Ltd";
- case "JMR": return "JMR Electronics Inc.";
- case "JOFEMAR": return "Jofemar";
- case "JOLLYLOG": return "Jolly Logic";
- case "JPC Inc.": return "JPC Inc.";
- case "JSCSI": return "jSCSI Project";
- case "Juniper": return "Juniper Networks";
- case "JVC": return "JVC Information Products Co.";
- case "KASHYA": return "Kashya, Inc.";
- case "KENNEDY": return "Kennedy Company";
- case "KENWOOD": return "KENWOOD Corporation";
- case "KEWL": return "Shanghai KEWL Imp&Exp Co., Ltd.";
- case "Key Tech": return "Key Technologies, Inc";
- case "KMNRIO": return "Kaminario Technologies Ltd.";
- case "KODAK": return "Eastman Kodak";
- case "KONAN": return "Konan";
- case "koncepts": return "koncepts International Ltd.";
- case "KONICA": return "Konica Japan";
- case "KOVE": return "KOVE";
- case "KSCOM": return "KSCOM Co. Ltd.,";
- case "KUDELSKI": return "Nagravision SA - Kudelski Group";
- case "Kyocera": return "Kyocera Corporation";
- case "Lapida": return "Gonmalo Electronics";
- case "LAPINE": return "Lapine Technology";
- case "LASERDRV": return "LaserDrive Limited";
- case "LASERGR": return "Lasergraphics, Inc.";
- case "LeapFrog": return "LeapFrog Enterprises, Inc.";
- case "LEFTHAND": return "LeftHand Networks";
- case "Leica": return "Leica Camera AG";
- case "Lexar": return "Lexar Media, Inc.";
- case "LEYIO": return "LEYIO";
- case "LG": return "LG Electronics Inc.";
- case "LGE": return "LG Electronics Inc.";
- case "LIBNOVA": return "LIBNOVA, SL Digital Preservation Systems";
- case "LION": return "Lion Optics Corporation";
- case "LMS": return "Laser Magnetic Storage International Company";
- case "LoupTech": return "Loup Technologies, Inc.";
- case "LSI": return "LSI Corp. (was LSI Logic Corp.)";
- case "LSILOGIC": return "LSI Logic Storage Systems, Inc.";
- case "LTO-CVE": return "Linear Tape - Open, Compliance Verification Entity";
- case "LUXPRO": return "Luxpro Corporation";
- case "MacroSAN": return "MacroSAN Technologies Co., Ltd.";
- case "Malakite": return "Malachite Technologies (New VID is: Sandial)";
- case "MarcBoon": return "marcboon.com";
- case "Marner": return "Marner Storage Technologies, Inc.";
- case "MARVELL": return "Marvell Semiconductor, Inc.";
- case "Matrix": return "Matrix Orbital Corp.";
- case "MATSHITA": return "Matsushita";
- case "MAXELL": return "Hitachi Maxell, Ltd.";
- case "MAXIM-IC": return "Maxim Integrated Products";
- case "MaxOptix": return "Maxoptix Corp.";
- case "MAXSTRAT": return "Maximum Strategy, Inc.";
- case "MAXTOR": return "Maxtor Corp.";
- case "MaXXan": return "MaXXan Systems, Inc.";
- case "MAYCOM": return "maycom Co., Ltd.";
- case "MBEAT": return "K-WON C&C Co.,Ltd";
- case "MCC": return "Measurement Computing Corporation";
- case "McDATA": return "McDATA Corporation";
- case "MCUBE": return "Mcube Technology Co., Ltd.";
- case "MDI": return "Micro Design International, Inc.";
- case "MEADE": return "Meade Instruments Corporation";
- case "mediamat": return "mediamatic";
- case "MegaElec": return "Mega Electronics Ltd";
- case "MEII": return "Mountain Engineering II, Inc.";
- case "MELA": return "Mitsubishi Electronics America";
- case "MELCO": return "Mitsubishi Electric (Japan)";
- case "mellanox": return "Mellanox Technologies Ltd.";
- case "MEMOREX": return "Memorex Telex Japan Ltd.";
- case "MEMREL": return "Memrel Corporation";
- case "MEMTECH": return "MemTech Technology";
- case "Mendocin": return "Mendocino Software";
- case "MendoCno": return "Mendocino Software";
- case "MERIDATA": return "Oy Meridata Finland Ltd";
- case "METHODEI": return "Methode Electronics India pvt ltd";
- case "METRUM": return "Metrum, Inc.";
- case "MHTL": return "Matsunichi Hi-Tech Limited";
- case "MICROBTX": return "Microbotics Inc.";
- case "Microchp": return "Microchip Technology, Inc.";
- case "MICROLIT": return "Microlite Corporation";
- case "MICRON": return "Micron Technology, Inc.";
- case "MICROP": return "Micropolis";
- case "MICROTEK": return "Microtek Storage Corp";
- case "Minitech": return "Minitech (UK) Limited";
- case "Minolta": return "Minolta Corporation";
- case "MINSCRIB": return "Miniscribe";
- case "MiraLink": return "MiraLink Corporation";
- case "Mirifica": return "Mirifica s.r.l.";
- case "MITSUMI": return "Mitsumi Electric Co., Ltd.";
- case "MKM": return "Mitsubishi Kagaku Media Co., LTD.";
- case "Mobii": return "Mobii Systems (Pty.) Ltd.";
- case "MOL": return "Petrosoft Sdn. Bhd.";
- case "MOSAID": return "Mosaid Technologies Inc.";
- case "MOTOROLA": return "Motorola";
- case "MP-400": return "Daiwa Manufacturing Limited";
- case "MPC": return "MPC Corporation";
- case "MPCCORP": return "MPC Computers";
- case "MPEYE": return "Touchstone Technology Co., Ltd";
- case "MPIO": return "DKT Co.,Ltd";
- case "MPM": return "Mitsubishi Paper Mills, Ltd.";
- case "MPMan": return "MPMan.com, Inc.";
- case "MSFT": return "Microsoft Corporation";
- case "MSI": return "Micro-Star International Corp.";
- case "MST": return "Morning Star Technologies, Inc.";
- case "MSystems": return "M-Systems Flash Disk Pioneers";
- case "MTI": return "MTI Technology Corporation";
- case "MTNGATE": return "MountainGate Data Systems";
- case "MXI": return "Memory Experts International";
- case "nac": return "nac Image Technology Inc.";
- case "NAGRA": return "Nagravision SA - Kudelski Group";
- case "NAI": return "North Atlantic Industries";
- case "NAKAMICH": return "Nakamichi Corporation";
- case "NatInst": return "National Instruments";
- case "NatSemi": return "National Semiconductor Corp.";
- case "NCITS": return "InterNational Committee for Information Technology Standards (INCITS)";
- case "NCL": return "NCL America";
- case "NCR": return "NCR Corporation";
- case "NDBTECH": return "NDB Technologie Inc.";
- case "Neartek": return "Neartek, Inc.";
- case "NEC": return "NEC";
- case "NETAPP": return "NetApp, Inc. (was Network Appliance)";
- case "NetBSD": return "The NetBSD Foundation";
- case "Netcom": return "Netcom Storage";
- case "NETENGIN": return "NetEngine, Inc.";
- case "NEWISYS": return "Newisys Data Storage";
- case "Newtech": return "Newtech Co., Ltd.";
- case "NEXSAN": return "Nexsan Technologies, Ltd.";
- case "NFINIDAT": return "Infinidat Ltd.";
- case "NHR": return "NH Research, Inc.";
- case "Nike": return "Nike, Inc.";
- case "Nimble": return "Nimble Storage";
- case "NISCA": return "NISCA Inc.";
- case "NISHAN": return "Nishan Systems Inc.";
- case "Nitz": return "Nitz Associates, Inc.";
- case "NKK": return "NKK Corp.";
- case "NRC": return "Nakamichi Research Corporation";
- case "NSD": return "Nippon Systems Development Co.,Ltd.";
- case "NSM": return "NSM Jukebox GmbH";
- case "nStor": return "nStor Technologies, Inc.";
- case "NT": return "Northern Telecom";
- case "NUCONNEX": return "NuConnex";
- case "NUSPEED": return "NuSpeed, Inc.";
- case "NVIDIA": return "NVIDIA Corporation";
- case "NVMe": return "NVM Express Working Group";
- case "OAI": return "Optical Access International";
- case "OCE": return "Oce Graphics";
- case "ODS": return "ShenZhen DCS Group Co.,Ltd";
- case "OHDEN": return "Ohden Co., Ltd.";
- case "OKI": return "OKI Electric Industry Co.,Ltd (Japan)";
- case "Olidata": return "Olidata S.p.A.";
- case "OMI": return "Optical Media International";
- case "OMNIFI": return "Rockford Corporation - Omnifi Media";
- case "OMNIS": return "OMNIS Company (FRANCE)";
- case "Ophidian": return "Ophidian Designs";
- case "opslag": return "Tyrone Systems";
- case "Optelec": return "Optelec BV";
- case "Optiarc": return "Sony Optiarc Inc.";
- case "OPTIMEM": return "Cipher/Optimem";
- case "OPTOTECH": return "Optotech";
- case "ORACLE": return "Oracle Corporation";
- case "ORANGE": return "Orange Micro, Inc.";
- case "ORCA": return "Orca Technology";
- case "Origin": return "Origin Energy";
- case "OSI": return "Optical Storage International";
- case "OSNEXUS": return "OS NEXUS, Inc.";
- case "OTL": return "OTL Engineering";
- case "OVERLAND": return "Overland Storage Inc.";
- case "pacdigit": return "Pacific Digital Corp";
- case "Packard": return "Parkard Bell";
- case "Panasas": return "Panasas, Inc.";
- case "PARALAN": return "Paralan Corporation";
- case "PASCOsci": return "Pasco Scientific";
- case "PATHLGHT": return "Pathlight Technology, Inc.";
- case "PCS": return "Pro Charging Systems, LLC";
- case "PerStor": return "Perstor";
- case "PERTEC": return "Pertec Peripherals Corporation";
- case "PFTI": return "Performance Technology Inc.";
- case "PFU": return "PFU Limited";
- case "Phigment": return "Phigment Technologies";
- case "PHILIPS": return "Philips Electronics";
- case "PICO": return "Packard Instrument Company";
- case "PIK": return "TECHNILIENT & MCS";
- case "Pillar": return "Pillar Data Systems";
- case "PIONEER": return "Pioneer Electronic Corp.";
- case "Pirus": return "Pirus Networks";
- case "PIVOT3": return "Pivot3, Inc.";
- case "PLASMON": return "Plasmon Data";
- case "Pliant": return "Pliant Technology, Inc.";
- case "PMCSIERA": return "PMC-Sierra";
- case "PME": return "Precision Measurement Engineering";
- case "PNNMed": return "PNN Medical SA";
- case "POKEN": return "Poken SA";
- case "POLYTRON": return "PT. HARTONO ISTANA TEKNOLOGI";
- case "PRAIRIE": return "PrairieTek";
- case "PREPRESS": return "PrePRESS Solutions";
- case "PRESOFT": return "PreSoft Architects";
- case "PRESTON": return "Preston Scientific";
- case "PRIAM": return "Priam";
- case "PRIMAGFX": return "Primagraphics Ltd";
- case "PRIMOS": return "Primos";
- case "PROCOM": return "Procom Technology";
- case "PROLIFIC": return "Prolific Technology Inc.";
- case "PROMISE": return "PROMISE TECHNOLOGY, Inc";
- case "PROSTOR": return "ProStor Systems, Inc.";
- case "PROSUM": return "PROSUM";
- case "PROWARE": return "Proware Technology Corp.";
- case "PTI": return "Peripheral Technology Inc.";
- case "PTICO": return "Pacific Technology International";
- case "PURE": return "PURE Storage";
- case "Qi-Hardw": return "Qi Hardware";
- case "QIC": return "Quarter-Inch Cartridge Drive Standards, Inc.";
- case "QLogic": return "QLogic Corporation";
- case "QNAP": return "QNAP Systems";
- case "Qsan": return "QSAN Technology, Inc.";
- case "QUALSTAR": return "Qualstar";
- case "QUANTEL": return "Quantel Ltd.";
- case "QUANTUM": return "Quantum Corp.";
- case "QUIX": return "Quix Computerware AG";
- case "R-BYTE": return "R-Byte, Inc.";
- case "RACALREC": return "Racal Recorders";
- case "RADITEC": return "Radikal Technologies Deutschland GmbH";
- case "RADSTONE": return "Radstone Technology";
- case "RAIDINC": return "RAID Inc.";
- case "RASSYS": return "Rasilient Systems Inc.";
- case "RASVIA": return "Rasvia Systems, Inc.";
- case "rave-mp": return "Go Video";
- case "RDKMSTG": return "MMS Dipl. Ing. Rolf-Dieter Klein";
- case "RDStor": return "Rorke China";
- case "Readboy": return "Readboy Ltd Co.";
- case "Realm": return "Realm Systems";
- case "realtek": return "Realtek Semiconductor Corp.";
- case "REDUXIO": return "Reduxio Systems Ltd.";
- case "rehanltd": return "Rehan Electronics Ltd";
- case "REKA": return "REKA HEALTH PTE LTD";
- case "RELDATA": return "RELDATA Inc";
- case "RENAGmbH": return "RENA GmbH";
- case "ReThinkM": return "RETHINK MEDICAL, INC";
- case "Revivio": return "Revivio, Inc.";
- case "RGBLaser": return "RGB Lasersysteme GmbH";
- case "RGI": return "Raster Graphics, Inc.";
- case "RHAPSODY": return "Rhapsody Networks, Inc.";
- case "RHS": return "Racal-Heim Systems GmbH";
- case "RICOH": return "Ricoh";
- case "RODIME": return "Rodime";
- case "Rorke": return "RD DATA Technology (ShenZhen) Limited";
- case "Royaltek": return "RoyalTek company Ltd.";
- case "RPS": return "RPS";
- case "RTI": return "Reference Technology";
- case "S-D": return "Sauer-Danfoss";
- case "S-flex": return "Storageflex Inc";
- case "S-SYSTEM": return "S-SYSTEM";
- case "S1": return "storONE";
- case "SAMSUNG": return "Samsung Electronics Co., Ltd.";
- case "SAN": return "Storage Area Networks, Ltd.";
- case "Sandial": return "Sandial Systems, Inc.";
- case "SanDisk": return "SanDisk Corporation";
- case "SANKYO": return "Sankyo Seiki";
- case "SANRAD": return "SANRAD Inc.";
- case "SANYO": return "SANYO Electric Co., Ltd.";
- case "SC.Net": return "StorageConnections.Net";
- case "SCALE": return "Scale Computing, Inc.";
- case "SCIENTEK": return "SCIENTEK CORP";
- case "SCInc.": return "Storage Concepts, Inc.";
- case "SCREEN": return "Dainippon Screen Mfg. Co., Ltd.";
- case "SDI": return "Storage Dimensions, Inc.";
- case "SDS": return "Solid Data Systems";
- case "SEAC": return "SeaChange International, Inc.";
- case "SEAGATE": return "Seagate";
- case "SEAGRAND": return "SEAGRAND In Japan";
- case "Seanodes": return "Seanodes";
- case "Sec. Key": return "SecureKey Technologies Inc.";
- case "SEQUOIA": return "Sequoia Advanced Technologies, Inc.";
- case "SGI": return "Silicon Graphics International";
- case "Shannon": return "Shannon Systems Co., Ltd.";
- case "Shinko": return "Shinko Electric Co., Ltd.";
- case "SIEMENS": return "Siemens";
- case "SigmaTel": return "SigmaTel, Inc.";
- case "SII": return "Seiko Instruments Inc.";
- case "SIMPLE": return "SimpleTech, Inc.";
- case "SIVMSD": return "IMAGO SOFTWARE SL";
- case "SKhynix": return "SK hynix Inc.";
- case "SLCNSTOR": return "SiliconStor, Inc.";
- case "SLI": return "Sierra Logic, Inc.";
- case "SMCI": return "Super Micro Computer, Inc.";
- case "SmrtStor": return "Smart Storage Systems";
- case "SMS": return "Scientific Micro Systems/OMTI";
- case "SMSC": return "SMSC Storage, Inc.";
- case "SMX": return "Smartronix, Inc.";
- case "SNYSIDE": return "Sunnyside Computing Inc.";
- case "SoftLock": return "Softlock Digital Security Provider";
- case "SolidFir": return "SolidFire, Inc.";
- case "SONIC": return "Sonic Solutions";
- case "SoniqCas": return "SoniqCast";
- case "SONY": return "Sony Corporation Japan";
- case "SOUL": return "Soul Storage Technology (Wuxi) Co., Ltd";
- case "SPD": return "Storage Products Distribution, Inc.";
- case "SPECIAL": return "Special Computing Co.";
- case "SPECTRA": return "Spectra Logic, a Division of Western Automation Labs, Inc.";
- case "SPERRY": return "Sperry";
- case "Spintso": return "Spintso International AB";
- case "STARBORD": return "Starboard Storage Systems, Inc.";
- case "STARWIND": return "StarWind Software, Inc.";
- case "STEC": return "STEC, Inc.";
- case "Sterling": return "Sterling Diagnostic Imaging, Inc.";
- case "STK": return "Storage Technology Corporation";
- case "STNWOOD": return "Stonewood Group";
- case "STONEFLY": return "StoneFly Networks, Inc.";
- case "STOR": return "StorageNetworks, Inc.";
- case "STORAPP": return "StorageApps, Inc.";
- case "STORCIUM": return "Intelligent Systems Services Inc.";
- case "STORCOMP": return "Storage Computer Corporation";
- case "STORM": return "Storm Technology, Inc.";
- case "StorMagc": return "StorMagic";
- case "Stratus": return "Stratus Technologies";
- case "StrmLgc": return "StreamLogic Corp.";
- case "SUMITOMO": return "Sumitomo Electric Industries, Ltd.";
- case "SUN": return "Sun Microsystems, Inc.";
- case "SUNCORP": return "SunCorporation";
- case "suntx": return "Suntx System Co., Ltd";
- case "SUSE": return "SUSE Linux";
- case "Swinxs": return "Swinxs BV";
- case "SYMANTEC": return "Symantec Corporation";
- case "SYMBIOS": return "Symbios Logic Inc.";
- case "SYMWAVE": return "Symwave, Inc.";
- case "SYNCSORT": return "Syncsort Incorporated";
- case "SYNERWAY": return "Synerway";
- case "SYNOLOGY": return "Synology, Inc.";
- case "SyQuest": return "SyQuest Technology, Inc.";
- case "SYSGEN": return "Sysgen";
- case "T-MITTON": return "Transmitton England";
- case "T-MOBILE": return "T-Mobile USA, Inc.";
- case "T11": return "INCITS Technical Committee T11";
- case "TALARIS": return "Talaris Systems, Inc.";
- case "TALLGRAS": return "Tallgrass Technologies";
- case "TANDBERG": return "Tandberg Data A/S";
- case "TANDEM": return "Tandem";
- case "TANDON": return "Tandon";
- case "TCL": return "TCL Shenzhen ASIC MIcro-electronics Ltd";
- case "TDK": return "TDK Corporation";
- case "TEAC": return "TEAC Japan";
- case "TECOLOTE": return "Tecolote Designs";
- case "TEGRA": return "Tegra Varityper";
- case "Teilch": return "Teilch";
- case "Tek": return "Tektronix";
- case "TELLERT": return "Tellert Elektronik GmbH";
- case "TENTIME": return "Laura Technologies, Inc.";
- case "TFDATACO": return "TimeForge";
- case "TGEGROUP": return "TGE Group Co.,LTD.";
- case "Thecus": return "Thecus Technology Corp.";
- case "TI-DSG": return "Texas Instruments";
- case "TiGi": return "TiGi Corporation";
- case "TILDESGN": return "Tildesign bv";
- case "Tite": return "Tite Technology Limited";
- case "TKS Inc.": return "TimeKeeping Systems, Inc.";
- case "TLMKS": return "Telemakus LLC";
- case "TMS": return "Texas Memory Systems, Inc.";
- case "TMS100": return "TechnoVas";
- case "TOLISGRP": return "The TOLIS Group";
- case "TOSHIBA": return "Toshiba Japan";
- case "TOYOU": return "TOYOU FEIJI ELECTRONICS CO.,LTD.";
- case "Tracker": return "Tracker, LLC";
- case "TRIOFLEX": return "Trioflex Oy";
- case "TRIPACE": return "Tripace";
- case "TRLogger": return "TrueLogger Ltd.";
- case "TROIKA": return "Troika Networks, Inc.";
- case "TRULY": return "TRULY Electronics MFG. LTD.";
- case "TRUSTED": return "Trusted Data Corporation";
- case "TSSTcorp": return "Toshiba Samsung Storage Technology Corporation";
- case "TZM": return "TZ Medical";
- case "UD-DVR": return "Bigstone Project.";
- case "UDIGITAL": return "United Digital Limited";
- case "UIT": return "United Infomation Technology";
- case "ULTRA": return "UltraStor Corporation";
- case "UNISTOR": return "Unistor Networks, Inc.";
- case "UNISYS": return "Unisys";
- case "USCORE": return "Underscore, Inc.";
- case "USDC": return "US Design Corp.";
+ case "0B4C": return "MOOSIK Ltd.";
+ case "13FE": return "PHISON";
+ case "2AI": return "2AI (Automatisme et Avenir Informatique)";
+ case "3M": return "3M Company";
+ case "3nhtech": return "3NH Technologies";
+ case "3PARdata": return "3PARdata, Inc.";
+ case "A-Max": return "A-Max Technology Co., Ltd";
+ case "ABSOLUTE": return "Absolute Analysis";
+ case "ACARD": return "ACARD Technology Corp.";
+ case "Accusys": return "Accusys INC.";
+ case "Acer": return "Acer, Inc.";
+ case "ACL": return "Automated Cartridge Librarys, Inc.";
+ case "Actifio": return "Actifio";
+ case "Acuid": return "Acuid Corporation Ltd.";
+ case "AcuLab": return "AcuLab, Inc. (Tulsa, OK)";
+ case "ADAPTEC": return "Adaptec";
+ case "ADIC": return "Advanced Digital Information Corporation";
+ case "ADSI": return "Adaptive Data Systems, Inc. (a Western Digital subsidiary)";
+ case "ADTX": return "ADTX Co., Ltd.";
+ case "ADVA": return "ADVA Optical Networking AG";
+ case "AEM": return "AEM Performance Electronics";
+ case "AERONICS": return "Aeronics, Inc.";
+ case "AGFA": return "AGFA";
+ case "Agilent": return "Agilent Technologies";
+ case "AIC": return "Advanced Industrial Computer, Inc.";
+ case "AIPTEK": return "AIPTEK International Inc.";
+ case "Alcohol": return "Alcohol Soft";
+ case "ALCOR": return "Alcor Micro, Corp.";
+ case "AMCC": return "Applied Micro Circuits Corporation";
+ case "AMCODYNE": return "Amcodyne";
+ case "Amgeon": return "Amgeon LLC";
+ case "AMI": return "American Megatrends, Inc.";
+ case "AMPEX": return "Ampex Data Systems";
+ case "Amphenol": return "Amphenol";
+ case "Amtl": return "Tenlon Technology Co.,Ltd";
+ case "ANAMATIC": return "Anamartic Limited (England)";
+ case "Ancor": return "Ancor Communications, Inc.";
+ case "ANCOT": return "ANCOT Corp.";
+ case "ANDATACO": return "Andataco";
+ case "andiamo": return "Andiamo Systems, Inc.";
+ case "ANOBIT": return "Anobit";
+ case "ANRITSU": return "Anritsu Corporation";
+ case "ANTONIO": return "Antonio Precise Products Manufactory Ltd.";
+ case "AoT": return "Art of Technology AG";
+ case "APPLE": return "Apple Computer, Inc.";
+ case "ARCHIVE": return "Archive";
+ case "ARDENCE": return "Ardence Inc";
+ case "Areca": return "Areca Technology Corporation";
+ case "Arena": return "MaxTronic International Co., Ltd.";
+ case "Argent": return "Argent Data Systems, Inc.";
+ case "ARIO": return "Ario Data Networks, Inc.";
+ case "ARISTOS": return "Aristos Logic Corp.";
+ case "ARK": return "ARK Research Corporation";
+ case "ARL:UT@A": return "Applied Research Laboratories : University of Texas at Austin";
+ case "ARTECON": return "Artecon Inc.";
+ case "Artistic": return "Artistic Licence (UK) Ltd";
+ case "ARTON": return "Arton Int.";
+ case "ASACA": return "ASACA Corp.";
+ case "ASC": return "Advanced Storage Concepts, Inc.";
+ case "ASPEN": return "Aspen Peripherals";
+ case "AST": return "AST Research";
+ case "ASTEK": return "Astek Corporation";
+ case "ASTK": return "Alcatel STK A/S";
+ case "AStor": return "AccelStor, Inc.";
+ case "ASTUTE": return "Astute Networks, Inc.";
+ case "AT&T": return "AT&T";
+ case "ATA": return "SCSI / ATA Translator Software (Organization Not Specified)";
+ case "ATARI": return "Atari Corporation";
+ case "ATech": return "ATech electronics";
+ case "ATG CYG": return "ATG Cygnet Inc.";
+ case "ATL": return "Quantum|ATL Products";
+ case "ATTO": return "ATTO Technology Inc.";
+ case "ATTRATEC": return "Attratech Ltd liab. Co";
+ case "ATX": return "Alphatronix";
+ case "AURASEN": return "Aurasen Limited";
+ case "Avago": return "Avago Technologies";
+ case "AVC": return "AVC Technology Ltd";
+ case "AVIDVIDR": return "AVID Technologies, Inc.";
+ case "AVR": return "Advanced Vision Research";
+ case "AXSTOR": return "AXSTOR";
+ case "Axxana": return "Axxana Ltd.";
+ case "B*BRIDGE": return "Blockbridge Networks LLC";
+ case "BALLARD": return "Ballard Synergy Corp.";
+ case "Barco": return "Barco";
+ case "BAROMTEC": return "Barom Technologies Co., Ltd.";
+ case "Bassett": return "Bassett Electronic Systems Ltd";
+ case "BC Hydro": return "BC Hydro";
+ case "BDT": return "BDT AG";
+ case "BECEEM": return "Beceem Communications, Inc";
+ case "BENQ": return "BENQ Corporation.";
+ case "BERGSWD": return "Berg Software Design";
+ case "BEZIER": return "Bezier Systems, Inc.";
+ case "BHTi": return "Breece Hill Technologies";
+ case "biodata": return "Biodata Devices SL";
+ case "BIOS": return "BIOS Corporation";
+ case "BIR": return "Bio-Imaging Research, Inc.";
+ case "BiT": return "BiT Microsystems";
+ case "BITMICRO": return "BiT Microsystems, Inc.";
+ case "Blendlgy": return "Blendology Limited";
+ case "BLOOMBAS": return "Bloombase Technologies Limited";
+ case "BlueArc": return "BlueArc Corporation";
+ case "bluecog": return "bluecog";
+ case "BME-HVT": return "Broadband Infocommunicatons and Electromagnetic Theory Department";
+ case "BNCHMARK": return "Benchmark Tape Systems Corporation";
+ case "Bosch": return "Robert Bosch GmbH";
+ case "Botman": return "Botmanfamily Electronics";
+ case "BoxHill": return "Box Hill Systems Corporation";
+ case "BRDGWRKS": return "Bridgeworks Ltd.";
+ case "BREA": return "BREA Technologies, Inc.";
+ case "BREECE": return "Breece Hill LLC";
+ case "BreqLabs": return "BreqLabs Inc.";
+ case "Broadcom": return "Broadcom Corporation";
+ case "BROCADE": return "Brocade Communications Systems, Incorporated";
+ case "BUFFALO": return "BUFFALO INC.";
+ case "BULL": return "Bull Peripherals Corp.";
+ case "BUSLOGIC": return "BusLogic Inc.";
+ case "BVIRTUAL": return "B-Virtual N.V.";
+ case "CACHEIO": return "CacheIO LLC";
+ case "CalComp": return "CalComp, A Lockheed Company";
+ case "CALCULEX": return "CALCULEX, Inc.";
+ case "CALIPER": return "Caliper (California Peripheral Corp.)";
+ case "CAMBEX": return "Cambex Corporation";
+ case "CAMEOSYS": return "Cameo Systems Inc.";
+ case "CANDERA": return "Candera Inc.";
+ case "CAPTION": return "CAPTION BANK";
+ case "CAST": return "Advanced Storage Tech";
+ case "CATALYST": return "Catalyst Enterprises";
+ case "CCDISK": return "iSCSI Cake";
+ case "CDC": return "Control Data or MPI";
+ case "CDP": return "Columbia Data Products";
+ case "Celsia": return "A M Bromley Limited";
+ case "CenData": return "Central Data Corporation";
+ case "Cereva": return "Cereva Networks Inc.";
+ case "CERTANCE": return "Certance";
+ case "Chantil": return "Chantil Technology";
+ case "CHEROKEE": return "Cherokee Data Systems";
+ case "CHINON": return "Chinon";
+ case "CHRISTMA": return "Christmann Informationstechnik + Medien GmbH & Co KG";
+ case "CIE&YED": return "YE Data, C.Itoh Electric Corp.";
+ case "CIPHER": return "Cipher Data Products";
+ case "Ciprico": return "Ciprico, Inc.";
+ case "CIRRUSL": return "Cirrus Logic Inc.";
+ case "CISCO": return "Cisco Systems, Inc.";
+ case "CLEARSKY": return "ClearSky Data, Inc.";
+ case "CLOVERLF": return "Cloverleaf Communications, Inc";
+ case "CLS": return "Celestica";
+ case "CMD": return "CMD Technology Inc.";
+ case "CMTechno": return "CMTech";
+ case "CNGR SFW": return "Congruent Software, Inc.";
+ case "CNSi": return "Chaparral Network Storage, Inc.";
+ case "CNT": return "Computer Network Technology";
+ case "COBY": return "Coby Electronics Corporation, USA";
+ case "COGITO": return "Cogito";
+ case "COMAY": return "Corerise Electronics";
+ case "COMPAQ": return "Compaq Computer Corporation";
+ case "COMPELNT": return "Compellent Technologies, Inc.";
+ case "COMPORT": return "Comport Corp.";
+ case "COMPSIG": return "Computer Signal Corporation";
+ case "COMPTEX": return "Comptex Pty Limited";
+ case "CONNER": return "Conner Peripherals";
+ case "COPANSYS": return "COPAN SYSTEMS INC";
+ case "CORAID": return "Coraid, Inc";
+ case "CORE": return "Core International, Inc.";
+ case "CORERISE": return "Corerise Electronics";
+ case "COVOTE": return "Covote GmbH & Co KG";
+ case "COWON": return "COWON SYSTEMS, Inc.";
+ case "CPL": return "Cross Products Ltd";
+ case "CPU TECH": return "CPU Technology, Inc.";
+ case "CREO": return "Creo Products Inc.";
+ case "CROSFLD": return "Crosfield Electronics";
+ case "CROSSRDS": return "Crossroads Systems, Inc.";
+ case "crosswlk": return "Crosswalk, Inc.";
+ case "CSCOVRTS": return "Cisco - Veritas";
+ case "CSM, INC": return "Computer SM, Inc.";
+ case "Cunuqui": return "CUNUQUI SLU";
+ case "CYBERNET": return "Cybernetics";
+ case "Cygnal": return "Dekimo";
+ case "CYPRESS": return "Cypress Semiconductor Corp.";
+ case "D Bit": return "Digby's Bitpile, Inc. DBA D Bit";
+ case "DALSEMI": return "Dallas Semiconductor";
+ case "DANEELEC": return "Dane-Elec";
+ case "DANGER": return "Danger Inc.";
+ case "DAT-MG": return "DAT Manufacturers Group";
+ case "Data Com": return "Data Com Information Systems Pty. Ltd.";
+ case "DATABOOK": return "Databook, Inc.";
+ case "DATACOPY": return "Datacopy Corp.";
+ case "DataCore": return "DataCore Software Corporation";
+ case "DataG": return "DataGravity";
+ case "DATAPT": return "Datapoint Corp.";
+ case "DATARAM": return "Dataram Corporation";
+ case "DATC": return "Datum Champion Technology Co., Ltd";
+ case "DAVIS": return "Daviscomms (S) Pte Ltd";
+ case "DCS": return "ShenZhen DCS Group Co.,Ltd";
+ case "DDN": return "DataDirect Networks, Inc.";
+ case "DDRDRIVE": return "DDRdrive LLC";
+ case "DE": return "Dimension Engineering LLC";
+ case "DEC": return "Digital Equipment Corporation";
+ case "DEI": return "Digital Engineering, Inc.";
+ case "DELL": return "Dell, Inc.";
+ case "Dell(tm)": return "Dell, Inc";
+ case "DELPHI": return "Delphi Data Div. of Sparks Industries, Inc.";
+ case "DENON": return "Denon/Nippon Columbia";
+ case "DenOptix": return "DenOptix, Inc.";
+ case "DEST": return "DEST Corp.";
+ case "DFC": return "DavioFranke.com";
+ case "DFT": return "Data Fault Tolerance System CO.,LTD.";
+ case "DGC": return "Data General Corp.";
+ case "DIGIDATA": return "Digi-Data Corporation";
+ case "DigiIntl": return "Digi International";
+ case "Digital": return "Digital Equipment Corporation";
+ case "DILOG": return "Distributed Logic Corp.";
+ case "DISC": return "Document Imaging Systems Corp.";
+ case "DiscSoft": return "Disc Soft Ltd";
+ case "DLNET": return "Driveline";
+ case "DNS": return "Data and Network Security";
+ case "DNUK": return "Digital Networks Uk Ltd";
+ case "DotHill": return "Dot Hill Systems Corp.";
+ case "DP": return "Dell, Inc.";
+ case "DPT": return "Distributed Processing Technology";
+ case "Drewtech": return "Drew Technologies, Inc.";
+ case "DROBO": return "Data Robotics, Inc.";
+ case "DSC": return "DigitalStream Corporation";
+ case "DSI": return "Data Spectrum, Inc.";
+ case "DSM": return "Deterner Steuerungs- und Maschinenbau GmbH & Co.";
+ case "DSNET": return "Cleversafe, Inc.";
+ case "DT": return "Double-Take Software, INC.";
+ case "DTC QUME": return "Data Technology Qume";
+ case "DXIMAGIN": return "DX Imaging";
+ case "E-Motion": return "E-Motion LLC";
+ case "EARTHLAB": return "EarthLabs";
+ case "EarthLCD": return "Earth Computer Technologies, Inc.";
+ case "ECCS": return "ECCS, Inc.";
+ case "ECMA": return "European Computer Manufacturers Association";
+ case "EDS": return "Embedded Data Systems";
+ case "EIM": return "InfoCore";
+ case "ELE Intl": return "ELE International";
+ case "ELEGANT": return "Elegant Invention, LLC";
+ case "Elektron": return "Elektron Music Machines MAV AB";
+ case "elipsan": return "Elipsan UK Ltd.";
+ case "Elms": return "Elms Systems Corporation";
+ case "ELSE": return "ELSE Ltd.";
+ case "ELSEC": return "Littlemore Scientific";
+ case "EMASS": return "EMASS, Inc.";
+ case "EMC": return "EMC Corp.";
+ case "EMiT": return "EMiT Conception Eletronique";
+ case "EMTEC": return "EMTEC Magnetics";
+ case "EMULEX": return "Emulex";
+ case "ENERGY-B": return "Energybeam Corporation";
+ case "ENGENIO": return "Engenio Information Technologies, Inc.";
+ case "ENMOTUS": return "Enmotus Inc";
+ case "Entacore": return "Entacore";
+ case "EPOS": return "EPOS Technologies Ltd.";
+ case "EPSON": return "Epson";
+ case "EQLOGIC": return "EqualLogic";
+ case "Eris/RSI": return "RSI Systems, Inc.";
+ case "ETERNE": return "EterneData Technology Co.,Ltd.(China PRC.)";
+ case "EuroLogc": return "Eurologic Systems Limited";
+ case "evolve": return "Evolution Technologies, Inc";
+ case "EXABYTE": return "Exabyte Corp.";
+ case "EXATEL": return "Exatelecom Co., Ltd.";
+ case "EXAVIO": return "Exavio, Inc.";
+ case "Exsequi": return "Exsequi Ltd";
+ case "Exxotest": return "Annecy Electronique";
+ case "FAIRHAVN": return "Fairhaven Health, LLC";
+ case "FALCON": return "FalconStor, Inc.";
+ case "FDS": return "Formation Data Systems";
+ case "FFEILTD": return "FujiFilm Electonic Imaging Ltd";
+ case "Fibxn": return "Fiberxon, Inc.";
+ case "FID": return "First International Digital, Inc.";
+ case "FILENET": return "FileNet Corp.";
+ case "FirmFact": return "Firmware Factory Ltd";
+ case "FLYFISH": return "Flyfish Technologies";
+ case "FOXCONN": return "Foxconn Technology Group";
+ case "FRAMDRV": return "FRAMEDRIVE Corp.";
+ case "FREECION": return "Nable Communications, Inc.";
+ case "FRESHDTK": return "FreshDetect GmbH";
+ case "FSC": return "Fujitsu Siemens Computers";
+ case "FTPL": return "Frontline Technologies Pte Ltd";
+ case "FUJI": return "Fuji Electric Co., Ltd. (Japan)";
+ case "FUJIFILM": return "Fuji Photo Film, Co., Ltd.";
+ case "FUJITSU": return "Fujitsu";
+ case "FUNAI": return "Funai Electric Co., Ltd.";
+ case "FUSIONIO": return "Fusion-io Inc.";
+ case "FUTURED": return "Future Domain Corp.";
+ case "G&D": return "Giesecke & Devrient GmbH";
+ case "G.TRONIC": return "Globaltronic - Electronica e Telecomunicacoes, S.A.";
+ case "Gadzoox": return "Gadzoox Networks, Inc.";
+ case "Gammaflx": return "Gammaflux L.P.";
+ case "GDI": return "Generic Distribution International";
+ case "GEMALTO": return "gemalto";
+ case "Gen_Dyn": return "General Dynamics";
+ case "Generic": return "Generic Technology Co., Ltd.";
+ case "GENSIG": return "General Signal Networks";
+ case "GEO": return "Green Energy Options Ltd";
+ case "GIGATAPE": return "GIGATAPE GmbH";
+ case "GIGATRND": return "GigaTrend Incorporated";
+ case "Global": return "Global Memory Test Consortium";
+ case "Gnutek": return "Gnutek Ltd.";
+ case "Goidelic": return "Goidelic Precision, Inc.";
+ case "GoldKey": return "GoldKey Security Corporation";
+ case "GoldStar": return "LG Electronics Inc.";
+ case "GOOGLE": return "Google, Inc.";
+ case "GORDIUS": return "Gordius";
+ case "GOULD": return "Gould";
+ case "HAGIWARA": return "Hagiwara Sys-Com Co., Ltd.";
+ case "HAPP3": return "Inventec Multimedia and Telecom co., ltd";
+ case "HDS": return "Horizon Data Systems, Inc.";
+ case "Helldyne": return "Helldyne, Inc";
+ case "Heydays": return "Mazo Technology Co., Ltd.";
+ case "HGST": return "HGST a Western Digital Company";
+ case "HI-TECH": return "HI-TECH Software Pty. Ltd.";
+ case "HITACHI": return "Hitachi America Ltd or Nissei Sangyo America Ltd";
+ case "HL-DT-ST": return "Hitachi-LG Data Storage, Inc.";
+ case "HONEYWEL": return "Honeywell Inc.";
+ case "Hoptroff": return "HexWax Ltd";
+ case "HORIZONT": return "Horizontigo Software";
+ case "HP": return "Hewlett Packard";
+ case "HPE": return "Hewlett Packard Enterprise";
+ case "HPI": return "HP Inc.";
+ case "HPQ": return "Hewlett Packard";
+ case "HUALU": return "CHINA HUALU GROUP CO., LTD";
+ case "HUASY": return "Huawei Symantec Technologies Co., Ltd.";
+ case "HYLINX": return "Hylinx Ltd.";
+ case "HYUNWON": return "HYUNWON inc";
+ case "i-cubed": return "i-cubed ltd.";
+ case "IBM": return "International Business Machines";
+ case "Icefield": return "Icefield Tools Corporation";
+ case "Iceweb": return "Iceweb Storage Corp";
+ case "ICL": return "ICL";
+ case "ICP": return "ICP vortex Computersysteme GmbH";
+ case "IDE": return "International Data Engineering, Inc.";
+ case "IDG": return "Interface Design Group";
+ case "IET": return "ISCSI ENTERPRISE TARGET";
+ case "IFT": return "Infortrend Technology, Inc.";
+ case "IGR": return "Intergraph Corp.";
+ case "IMAGINE": return "Imagine Communications Corp.";
+ case "IMAGO": return "IMAGO SOFTWARE SL";
+ case "IMATION": return "Imation";
+ case "IMPLTD": return "Integrated Micro Products Ltd.";
+ case "IMPRIMIS": return "Imprimis Technology Inc.";
+ case "INCIPNT": return "Incipient Technologies Inc.";
+ case "INCITS": return "InterNational Committee for Information Technology";
+ case "INDCOMP": return "Industrial Computing Limited";
+ case "Indigita": return "Indigita Corporation";
+ case "INFOCORE": return "InfoCore";
+ case "INITIO": return "Initio Corporation";
+ case "INRANGE": return "INRANGE Technologies Corporation";
+ case "Insight": return "L-3 Insight Technology Inc";
+ case "INSITE": return "Insite Peripherals";
+ case "integrix": return "Integrix, Inc.";
+ case "INTEL": return "Intel Corporation";
+ case "Intransa": return "Intransa, Inc.";
+ case "IOC": return "I/O Concepts, Inc.";
+ case "iofy": return "iofy Corporation";
+ case "IOMEGA": return "Iomega";
+ case "IOT": return "IO Turbine, Inc.";
+ case "iPaper": return "intelliPaper, LLC";
+ case "iqstor": return "iQstor Networks, Inc.";
+ case "iQue": return "iQue";
+ case "ISi": return "Information Storage inc.";
+ case "Isilon": return "Isilon Systems, Inc.";
+ case "ISO": return "International Standards Organization";
+ case "iStor": return "iStor Networks, Inc.";
+ case "ITC": return "International Tapetronics Corporation";
+ case "iTwin": return "iTwin Pte Ltd";
+ case "IVIVITY": return "iVivity, Inc.";
+ case "IVMMLTD": return "InnoVISION Multimedia Ltd.";
+ case "JABIL001": return "Jabil Circuit";
+ case "JETWAY": return "Jetway Information Co., Ltd";
+ case "JMR": return "JMR Electronics Inc.";
+ case "JOFEMAR": return "Jofemar";
+ case "JOLLYLOG": return "Jolly Logic";
+ case "JPC Inc.": return "JPC Inc.";
+ case "JSCSI": return "jSCSI Project";
+ case "Juniper": return "Juniper Networks";
+ case "JVC": return "JVC Information Products Co.";
+ case "KASHYA": return "Kashya, Inc.";
+ case "KENNEDY": return "Kennedy Company";
+ case "KENWOOD": return "KENWOOD Corporation";
+ case "KEWL": return "Shanghai KEWL Imp&Exp Co., Ltd.";
+ case "Key Tech": return "Key Technologies, Inc";
+ case "KMNRIO": return "Kaminario Technologies Ltd.";
+ case "KODAK": return "Eastman Kodak";
+ case "KONAN": return "Konan";
+ case "koncepts": return "koncepts International Ltd.";
+ case "KONICA": return "Konica Japan";
+ case "KOVE": return "KOVE";
+ case "KSCOM": return "KSCOM Co. Ltd.,";
+ case "KUDELSKI": return "Nagravision SA - Kudelski Group";
+ case "Kyocera": return "Kyocera Corporation";
+ case "Lapida": return "Gonmalo Electronics";
+ case "LAPINE": return "Lapine Technology";
+ case "LASERDRV": return "LaserDrive Limited";
+ case "LASERGR": return "Lasergraphics, Inc.";
+ case "LeapFrog": return "LeapFrog Enterprises, Inc.";
+ case "LEFTHAND": return "LeftHand Networks";
+ case "Leica": return "Leica Camera AG";
+ case "Lexar": return "Lexar Media, Inc.";
+ case "LEYIO": return "LEYIO";
+ case "LG": return "LG Electronics Inc.";
+ case "LGE": return "LG Electronics Inc.";
+ case "LIBNOVA": return "LIBNOVA, SL Digital Preservation Systems";
+ case "LION": return "Lion Optics Corporation";
+ case "LMS": return "Laser Magnetic Storage International Company";
+ case "LoupTech": return "Loup Technologies, Inc.";
+ case "LSI": return "LSI Corp. (was LSI Logic Corp.)";
+ case "LSILOGIC": return "LSI Logic Storage Systems, Inc.";
+ case "LTO-CVE": return "Linear Tape - Open, Compliance Verification Entity";
+ case "LUXPRO": return "Luxpro Corporation";
+ case "MacroSAN": return "MacroSAN Technologies Co., Ltd.";
+ case "Malakite": return "Malachite Technologies (New VID is: Sandial)";
+ case "MarcBoon": return "marcboon.com";
+ case "Marner": return "Marner Storage Technologies, Inc.";
+ case "MARVELL": return "Marvell Semiconductor, Inc.";
+ case "Matrix": return "Matrix Orbital Corp.";
+ case "MATSHITA": return "Matsushita";
+ case "MAXELL": return "Hitachi Maxell, Ltd.";
+ case "MAXIM-IC": return "Maxim Integrated Products";
+ case "MaxOptix": return "Maxoptix Corp.";
+ case "MAXSTRAT": return "Maximum Strategy, Inc.";
+ case "MAXTOR": return "Maxtor Corp.";
+ case "MaXXan": return "MaXXan Systems, Inc.";
+ case "MAYCOM": return "maycom Co., Ltd.";
+ case "MBEAT": return "K-WON C&C Co.,Ltd";
+ case "MCC": return "Measurement Computing Corporation";
+ case "McDATA": return "McDATA Corporation";
+ case "MCUBE": return "Mcube Technology Co., Ltd.";
+ case "MDI": return "Micro Design International, Inc.";
+ case "MEADE": return "Meade Instruments Corporation";
+ case "mediamat": return "mediamatic";
+ case "MegaElec": return "Mega Electronics Ltd";
+ case "MEII": return "Mountain Engineering II, Inc.";
+ case "MELA": return "Mitsubishi Electronics America";
+ case "MELCO": return "Mitsubishi Electric (Japan)";
+ case "mellanox": return "Mellanox Technologies Ltd.";
+ case "MEMOREX": return "Memorex Telex Japan Ltd.";
+ case "MEMREL": return "Memrel Corporation";
+ case "MEMTECH": return "MemTech Technology";
+ case "Mendocin": return "Mendocino Software";
+ case "MendoCno": return "Mendocino Software";
+ case "MERIDATA": return "Oy Meridata Finland Ltd";
+ case "METHODEI": return "Methode Electronics India pvt ltd";
+ case "METRUM": return "Metrum, Inc.";
+ case "MHTL": return "Matsunichi Hi-Tech Limited";
+ case "MICROBTX": return "Microbotics Inc.";
+ case "Microchp": return "Microchip Technology, Inc.";
+ case "MICROLIT": return "Microlite Corporation";
+ case "MICRON": return "Micron Technology, Inc.";
+ case "MICROP": return "Micropolis";
+ case "MICROTEK": return "Microtek Storage Corp";
+ case "Minitech": return "Minitech (UK) Limited";
+ case "Minolta": return "Minolta Corporation";
+ case "MINSCRIB": return "Miniscribe";
+ case "MiraLink": return "MiraLink Corporation";
+ case "Mirifica": return "Mirifica s.r.l.";
+ case "MITSUMI": return "Mitsumi Electric Co., Ltd.";
+ case "MKM": return "Mitsubishi Kagaku Media Co., LTD.";
+ case "Mobii": return "Mobii Systems (Pty.) Ltd.";
+ case "MOL": return "Petrosoft Sdn. Bhd.";
+ case "MOSAID": return "Mosaid Technologies Inc.";
+ case "MOTOROLA": return "Motorola";
+ case "MP-400": return "Daiwa Manufacturing Limited";
+ case "MPC": return "MPC Corporation";
+ case "MPCCORP": return "MPC Computers";
+ case "MPEYE": return "Touchstone Technology Co., Ltd";
+ case "MPIO": return "DKT Co.,Ltd";
+ case "MPM": return "Mitsubishi Paper Mills, Ltd.";
+ case "MPMan": return "MPMan.com, Inc.";
+ case "MSFT": return "Microsoft Corporation";
+ case "MSI": return "Micro-Star International Corp.";
+ case "MST": return "Morning Star Technologies, Inc.";
+ case "MSystems": return "M-Systems Flash Disk Pioneers";
+ case "MTI": return "MTI Technology Corporation";
+ case "MTNGATE": return "MountainGate Data Systems";
+ case "MXI": return "Memory Experts International";
+ case "nac": return "nac Image Technology Inc.";
+ case "NAGRA": return "Nagravision SA - Kudelski Group";
+ case "NAI": return "North Atlantic Industries";
+ case "NAKAMICH": return "Nakamichi Corporation";
+ case "NatInst": return "National Instruments";
+ case "NatSemi": return "National Semiconductor Corp.";
+ case "NCITS": return "InterNational Committee for Information Technology Standards (INCITS)";
+ case "NCL": return "NCL America";
+ case "NCR": return "NCR Corporation";
+ case "NDBTECH": return "NDB Technologie Inc.";
+ case "Neartek": return "Neartek, Inc.";
+ case "NEC": return "NEC";
+ case "NETAPP": return "NetApp, Inc. (was Network Appliance)";
+ case "NetBSD": return "The NetBSD Foundation";
+ case "Netcom": return "Netcom Storage";
+ case "NETENGIN": return "NetEngine, Inc.";
+ case "NEWISYS": return "Newisys Data Storage";
+ case "Newtech": return "Newtech Co., Ltd.";
+ case "NEXSAN": return "Nexsan Technologies, Ltd.";
+ case "NFINIDAT": return "Infinidat Ltd.";
+ case "NHR": return "NH Research, Inc.";
+ case "Nike": return "Nike, Inc.";
+ case "Nimble": return "Nimble Storage";
+ case "NISCA": return "NISCA Inc.";
+ case "NISHAN": return "Nishan Systems Inc.";
+ case "Nitz": return "Nitz Associates, Inc.";
+ case "NKK": return "NKK Corp.";
+ case "NRC": return "Nakamichi Research Corporation";
+ case "NSD": return "Nippon Systems Development Co.,Ltd.";
+ case "NSM": return "NSM Jukebox GmbH";
+ case "nStor": return "nStor Technologies, Inc.";
+ case "NT": return "Northern Telecom";
+ case "NUCONNEX": return "NuConnex";
+ case "NUSPEED": return "NuSpeed, Inc.";
+ case "NVIDIA": return "NVIDIA Corporation";
+ case "NVMe": return "NVM Express Working Group";
+ case "OAI": return "Optical Access International";
+ case "OCE": return "Oce Graphics";
+ case "ODS": return "ShenZhen DCS Group Co.,Ltd";
+ case "OHDEN": return "Ohden Co., Ltd.";
+ case "OKI": return "OKI Electric Industry Co.,Ltd (Japan)";
+ case "Olidata": return "Olidata S.p.A.";
+ case "OMI": return "Optical Media International";
+ case "OMNIFI": return "Rockford Corporation - Omnifi Media";
+ case "OMNIS": return "OMNIS Company (FRANCE)";
+ case "Ophidian": return "Ophidian Designs";
+ case "opslag": return "Tyrone Systems";
+ case "Optelec": return "Optelec BV";
+ case "Optiarc": return "Sony Optiarc Inc.";
+ case "OPTIMEM": return "Cipher/Optimem";
+ case "OPTOTECH": return "Optotech";
+ case "ORACLE": return "Oracle Corporation";
+ case "ORANGE": return "Orange Micro, Inc.";
+ case "ORCA": return "Orca Technology";
+ case "Origin": return "Origin Energy";
+ case "OSI": return "Optical Storage International";
+ case "OSNEXUS": return "OS NEXUS, Inc.";
+ case "OTL": return "OTL Engineering";
+ case "OVERLAND": return "Overland Storage Inc.";
+ case "pacdigit": return "Pacific Digital Corp";
+ case "Packard": return "Parkard Bell";
+ case "Panasas": return "Panasas, Inc.";
+ case "PARALAN": return "Paralan Corporation";
+ case "PASCOsci": return "Pasco Scientific";
+ case "PATHLGHT": return "Pathlight Technology, Inc.";
+ case "PCS": return "Pro Charging Systems, LLC";
+ case "PerStor": return "Perstor";
+ case "PERTEC": return "Pertec Peripherals Corporation";
+ case "PFTI": return "Performance Technology Inc.";
+ case "PFU": return "PFU Limited";
+ case "Phigment": return "Phigment Technologies";
+ case "PHILIPS": return "Philips Electronics";
+ case "PICO": return "Packard Instrument Company";
+ case "PIK": return "TECHNILIENT & MCS";
+ case "Pillar": return "Pillar Data Systems";
+ case "PIONEER": return "Pioneer Electronic Corp.";
+ case "Pirus": return "Pirus Networks";
+ case "PIVOT3": return "Pivot3, Inc.";
+ case "PLASMON": return "Plasmon Data";
+ case "Pliant": return "Pliant Technology, Inc.";
+ case "PMCSIERA": return "PMC-Sierra";
+ case "PME": return "Precision Measurement Engineering";
+ case "PNNMed": return "PNN Medical SA";
+ case "POKEN": return "Poken SA";
+ case "POLYTRON": return "PT. HARTONO ISTANA TEKNOLOGI";
+ case "PRAIRIE": return "PrairieTek";
+ case "PREPRESS": return "PrePRESS Solutions";
+ case "PRESOFT": return "PreSoft Architects";
+ case "PRESTON": return "Preston Scientific";
+ case "PRIAM": return "Priam";
+ case "PRIMAGFX": return "Primagraphics Ltd";
+ case "PRIMOS": return "Primos";
+ case "PROCOM": return "Procom Technology";
+ case "PROLIFIC": return "Prolific Technology Inc.";
+ case "PROMISE": return "PROMISE TECHNOLOGY, Inc";
+ case "PROSTOR": return "ProStor Systems, Inc.";
+ case "PROSUM": return "PROSUM";
+ case "PROWARE": return "Proware Technology Corp.";
+ case "PTI": return "Peripheral Technology Inc.";
+ case "PTICO": return "Pacific Technology International";
+ case "PURE": return "PURE Storage";
+ case "Qi-Hardw": return "Qi Hardware";
+ case "QIC": return "Quarter-Inch Cartridge Drive Standards, Inc.";
+ case "QLogic": return "QLogic Corporation";
+ case "QNAP": return "QNAP Systems";
+ case "Qsan": return "QSAN Technology, Inc.";
+ case "QUALSTAR": return "Qualstar";
+ case "QUANTEL": return "Quantel Ltd.";
+ case "QUANTUM": return "Quantum Corp.";
+ case "QUIX": return "Quix Computerware AG";
+ case "R-BYTE": return "R-Byte, Inc.";
+ case "RACALREC": return "Racal Recorders";
+ case "RADITEC": return "Radikal Technologies Deutschland GmbH";
+ case "RADSTONE": return "Radstone Technology";
+ case "RAIDINC": return "RAID Inc.";
+ case "RASSYS": return "Rasilient Systems Inc.";
+ case "RASVIA": return "Rasvia Systems, Inc.";
+ case "rave-mp": return "Go Video";
+ case "RDKMSTG": return "MMS Dipl. Ing. Rolf-Dieter Klein";
+ case "RDStor": return "Rorke China";
+ case "Readboy": return "Readboy Ltd Co.";
+ case "Realm": return "Realm Systems";
+ case "realtek": return "Realtek Semiconductor Corp.";
+ case "REDUXIO": return "Reduxio Systems Ltd.";
+ case "rehanltd": return "Rehan Electronics Ltd";
+ case "REKA": return "REKA HEALTH PTE LTD";
+ case "RELDATA": return "RELDATA Inc";
+ case "RENAGmbH": return "RENA GmbH";
+ case "ReThinkM": return "RETHINK MEDICAL, INC";
+ case "Revivio": return "Revivio, Inc.";
+ case "RGBLaser": return "RGB Lasersysteme GmbH";
+ case "RGI": return "Raster Graphics, Inc.";
+ case "RHAPSODY": return "Rhapsody Networks, Inc.";
+ case "RHS": return "Racal-Heim Systems GmbH";
+ case "RICOH": return "Ricoh";
+ case "RODIME": return "Rodime";
+ case "Rorke": return "RD DATA Technology (ShenZhen) Limited";
+ case "Royaltek": return "RoyalTek company Ltd.";
+ case "RPS": return "RPS";
+ case "RTI": return "Reference Technology";
+ case "S-D": return "Sauer-Danfoss";
+ case "S-flex": return "Storageflex Inc";
+ case "S-SYSTEM": return "S-SYSTEM";
+ case "S1": return "storONE";
+ case "SAMSUNG": return "Samsung Electronics Co., Ltd.";
+ case "SAN": return "Storage Area Networks, Ltd.";
+ case "Sandial": return "Sandial Systems, Inc.";
+ case "SanDisk": return "SanDisk Corporation";
+ case "SANKYO": return "Sankyo Seiki";
+ case "SANRAD": return "SANRAD Inc.";
+ case "SANYO": return "SANYO Electric Co., Ltd.";
+ case "SC.Net": return "StorageConnections.Net";
+ case "SCALE": return "Scale Computing, Inc.";
+ case "SCIENTEK": return "SCIENTEK CORP";
+ case "SCInc.": return "Storage Concepts, Inc.";
+ case "SCREEN": return "Dainippon Screen Mfg. Co., Ltd.";
+ case "SDI": return "Storage Dimensions, Inc.";
+ case "SDS": return "Solid Data Systems";
+ case "SEAC": return "SeaChange International, Inc.";
+ case "SEAGATE": return "Seagate";
+ case "SEAGRAND": return "SEAGRAND In Japan";
+ case "Seanodes": return "Seanodes";
+ case "Sec. Key": return "SecureKey Technologies Inc.";
+ case "SEQUOIA": return "Sequoia Advanced Technologies, Inc.";
+ case "SGI": return "Silicon Graphics International";
+ case "Shannon": return "Shannon Systems Co., Ltd.";
+ case "Shinko": return "Shinko Electric Co., Ltd.";
+ case "SIEMENS": return "Siemens";
+ case "SigmaTel": return "SigmaTel, Inc.";
+ case "SII": return "Seiko Instruments Inc.";
+ case "SIMPLE": return "SimpleTech, Inc.";
+ case "SIVMSD": return "IMAGO SOFTWARE SL";
+ case "SKhynix": return "SK hynix Inc.";
+ case "SLCNSTOR": return "SiliconStor, Inc.";
+ case "SLI": return "Sierra Logic, Inc.";
+ case "SMCI": return "Super Micro Computer, Inc.";
+ case "SmrtStor": return "Smart Storage Systems";
+ case "SMS": return "Scientific Micro Systems/OMTI";
+ case "SMSC": return "SMSC Storage, Inc.";
+ case "SMX": return "Smartronix, Inc.";
+ case "SNYSIDE": return "Sunnyside Computing Inc.";
+ case "SoftLock": return "Softlock Digital Security Provider";
+ case "SolidFir": return "SolidFire, Inc.";
+ case "SONIC": return "Sonic Solutions";
+ case "SoniqCas": return "SoniqCast";
+ case "SONY": return "Sony Corporation Japan";
+ case "SOUL": return "Soul Storage Technology (Wuxi) Co., Ltd";
+ case "SPD": return "Storage Products Distribution, Inc.";
+ case "SPECIAL": return "Special Computing Co.";
+ case "SPECTRA": return "Spectra Logic, a Division of Western Automation Labs, Inc.";
+ case "SPERRY": return "Sperry";
+ case "Spintso": return "Spintso International AB";
+ case "STARBORD": return "Starboard Storage Systems, Inc.";
+ case "STARWIND": return "StarWind Software, Inc.";
+ case "STEC": return "STEC, Inc.";
+ case "Sterling": return "Sterling Diagnostic Imaging, Inc.";
+ case "STK": return "Storage Technology Corporation";
+ case "STNWOOD": return "Stonewood Group";
+ case "STONEFLY": return "StoneFly Networks, Inc.";
+ case "STOR": return "StorageNetworks, Inc.";
+ case "STORAPP": return "StorageApps, Inc.";
+ case "STORCIUM": return "Intelligent Systems Services Inc.";
+ case "STORCOMP": return "Storage Computer Corporation";
+ case "STORM": return "Storm Technology, Inc.";
+ case "StorMagc": return "StorMagic";
+ case "Stratus": return "Stratus Technologies";
+ case "StrmLgc": return "StreamLogic Corp.";
+ case "SUMITOMO": return "Sumitomo Electric Industries, Ltd.";
+ case "SUN": return "Sun Microsystems, Inc.";
+ case "SUNCORP": return "SunCorporation";
+ case "suntx": return "Suntx System Co., Ltd";
+ case "SUSE": return "SUSE Linux";
+ case "Swinxs": return "Swinxs BV";
+ case "SYMANTEC": return "Symantec Corporation";
+ case "SYMBIOS": return "Symbios Logic Inc.";
+ case "SYMWAVE": return "Symwave, Inc.";
+ case "SYNCSORT": return "Syncsort Incorporated";
+ case "SYNERWAY": return "Synerway";
+ case "SYNOLOGY": return "Synology, Inc.";
+ case "SyQuest": return "SyQuest Technology, Inc.";
+ case "SYSGEN": return "Sysgen";
+ case "T-MITTON": return "Transmitton England";
+ case "T-MOBILE": return "T-Mobile USA, Inc.";
+ case "T11": return "INCITS Technical Committee T11";
+ case "TALARIS": return "Talaris Systems, Inc.";
+ case "TALLGRAS": return "Tallgrass Technologies";
+ case "TANDBERG": return "Tandberg Data A/S";
+ case "TANDEM": return "Tandem";
+ case "TANDON": return "Tandon";
+ case "TCL": return "TCL Shenzhen ASIC MIcro-electronics Ltd";
+ case "TDK": return "TDK Corporation";
+ case "TEAC": return "TEAC Japan";
+ case "TECOLOTE": return "Tecolote Designs";
+ case "TEGRA": return "Tegra Varityper";
+ case "Teilch": return "Teilch";
+ case "Tek": return "Tektronix";
+ case "TELLERT": return "Tellert Elektronik GmbH";
+ case "TENTIME": return "Laura Technologies, Inc.";
+ case "TFDATACO": return "TimeForge";
+ case "TGEGROUP": return "TGE Group Co.,LTD.";
+ case "Thecus": return "Thecus Technology Corp.";
+ case "TI-DSG": return "Texas Instruments";
+ case "TiGi": return "TiGi Corporation";
+ case "TILDESGN": return "Tildesign bv";
+ case "Tite": return "Tite Technology Limited";
+ case "TKS Inc.": return "TimeKeeping Systems, Inc.";
+ case "TLMKS": return "Telemakus LLC";
+ case "TMS": return "Texas Memory Systems, Inc.";
+ case "TMS100": return "TechnoVas";
+ case "TOLISGRP": return "The TOLIS Group";
+ case "TOSHIBA": return "Toshiba Japan";
+ case "TOYOU": return "TOYOU FEIJI ELECTRONICS CO.,LTD.";
+ case "Tracker": return "Tracker, LLC";
+ case "TRIOFLEX": return "Trioflex Oy";
+ case "TRIPACE": return "Tripace";
+ case "TRLogger": return "TrueLogger Ltd.";
+ case "TROIKA": return "Troika Networks, Inc.";
+ case "TRULY": return "TRULY Electronics MFG. LTD.";
+ case "TRUSTED": return "Trusted Data Corporation";
+ case "TSSTcorp": return "Toshiba Samsung Storage Technology Corporation";
+ case "TZM": return "TZ Medical";
+ case "UD-DVR": return "Bigstone Project.";
+ case "UDIGITAL": return "United Digital Limited";
+ case "UIT": return "United Infomation Technology";
+ case "ULTRA": return "UltraStor Corporation";
+ case "UNISTOR": return "Unistor Networks, Inc.";
+ case "UNISYS": return "Unisys";
+ case "USCORE": return "Underscore, Inc.";
+ case "USDC": return "US Design Corp.";
case "Top VASCO": return "Vasco Data Security";
- case "VDS": return "Victor Data Systems Co., Ltd.";
- case "VELDANA": return "VELDANA MEDICAL SA";
- case "VENTANA": return "Ventana Medical Systems";
- case "Verari": return "Verari Systems, Inc.";
- case "VERBATIM": return "Verbatim Corporation";
- case "Vercet": return "Vercet LLC";
- case "VERITAS": return "VERITAS Software Corporation";
- case "Vexata": return "Vexata Inc";
- case "VEXCEL": return "VEXCEL IMAGING GmbH";
- case "VICOMSL1": return "Vicom Systems, Inc.";
- case "VicomSys": return "Vicom Systems, Inc.";
- case "VIDEXINC": return "Videx, Inc.";
- case "VIOLIN": return "Violin Memory, Inc.";
- case "VIRIDENT": return "Virident Systems, Inc.";
- case "VITESSE": return "Vitesse Semiconductor Corporation";
- case "VIXEL": return "Vixel Corporation";
- case "VLS": return "Van Lent Systems BV";
- case "VMAX": return "VMAX Technologies Corp.";
- case "VMware": return "VMware Inc.";
- case "Vobis": return "Vobis Microcomputer AG";
- case "VOLTAIRE": return "Voltaire Ltd.";
- case "VRC": return "Vermont Research Corp.";
- case "VRugged": return "Vanguard Rugged Storage";
- case "VTGadget": return "Vermont Gadget Company";
- case "Waitec": return "Waitec NV";
- case "WangDAT": return "WangDAT";
- case "WANGTEK": return "Wangtek";
- case "Wasabi": return "Wasabi Systems";
- case "WAVECOM": return "Wavecom";
- case "WD": return "Western Digital Corporation";
- case "WDC": return "Western Digital Corporation";
- case "WDIGTL": return "Western Digital";
- case "WDTI": return "Western Digital Technologies, Inc.";
- case "WEARNES": return "Wearnes Technology Corporation";
- case "WeeraRes": return "Weera Research Pte Ltd";
- case "Wildflwr": return "Wildflower Technologies, Inc.";
- case "WSC0001": return "Wisecom, Inc.";
- case "X3": return "InterNational Committee for Information Technology Standards (INCITS)";
- case "XEBEC": return "Xebec Corporation";
- case "XENSRC": return "XenSource, Inc.";
- case "Xerox": return "Xerox Corporation";
- case "XIOtech": return "XIOtech Corporation";
- case "XIRANET": return "Xiranet Communications GmbH";
- case "XIV": return "XIV";
- case "XtremIO": return "XtremIO";
- case "XYRATEX": return "Xyratex";
- case "YINHE": return "NUDT Computer Co.";
- case "YIXUN": return "Yixun Electronic Co.,Ltd.";
- case "YOTTA": return "YottaYotta, Inc.";
- case "Zarva": return "Zarva Digital Technology Co., Ltd.";
- case "ZETTA": return "Zetta Systems, Inc.";
- case "ZTE": return "ZTE Corporation";
- case "ZVAULT": return "Zetavault";
- default: return scsiVendorString;
+ case "VDS": return "Victor Data Systems Co., Ltd.";
+ case "VELDANA": return "VELDANA MEDICAL SA";
+ case "VENTANA": return "Ventana Medical Systems";
+ case "Verari": return "Verari Systems, Inc.";
+ case "VERBATIM": return "Verbatim Corporation";
+ case "Vercet": return "Vercet LLC";
+ case "VERITAS": return "VERITAS Software Corporation";
+ case "Vexata": return "Vexata Inc";
+ case "VEXCEL": return "VEXCEL IMAGING GmbH";
+ case "VICOMSL1": return "Vicom Systems, Inc.";
+ case "VicomSys": return "Vicom Systems, Inc.";
+ case "VIDEXINC": return "Videx, Inc.";
+ case "VIOLIN": return "Violin Memory, Inc.";
+ case "VIRIDENT": return "Virident Systems, Inc.";
+ case "VITESSE": return "Vitesse Semiconductor Corporation";
+ case "VIXEL": return "Vixel Corporation";
+ case "VLS": return "Van Lent Systems BV";
+ case "VMAX": return "VMAX Technologies Corp.";
+ case "VMware": return "VMware Inc.";
+ case "Vobis": return "Vobis Microcomputer AG";
+ case "VOLTAIRE": return "Voltaire Ltd.";
+ case "VRC": return "Vermont Research Corp.";
+ case "VRugged": return "Vanguard Rugged Storage";
+ case "VTGadget": return "Vermont Gadget Company";
+ case "Waitec": return "Waitec NV";
+ case "WangDAT": return "WangDAT";
+ case "WANGTEK": return "Wangtek";
+ case "Wasabi": return "Wasabi Systems";
+ case "WAVECOM": return "Wavecom";
+ case "WD": return "Western Digital Corporation";
+ case "WDC": return "Western Digital Corporation";
+ case "WDIGTL": return "Western Digital";
+ case "WDTI": return "Western Digital Technologies, Inc.";
+ case "WEARNES": return "Wearnes Technology Corporation";
+ case "WeeraRes": return "Weera Research Pte Ltd";
+ case "Wildflwr": return "Wildflower Technologies, Inc.";
+ case "WSC0001": return "Wisecom, Inc.";
+ case "X3": return "InterNational Committee for Information Technology Standards (INCITS)";
+ case "XEBEC": return "Xebec Corporation";
+ case "XENSRC": return "XenSource, Inc.";
+ case "Xerox": return "Xerox Corporation";
+ case "XIOtech": return "XIOtech Corporation";
+ case "XIRANET": return "Xiranet Communications GmbH";
+ case "XIV": return "XIV";
+ case "XtremIO": return "XtremIO";
+ case "XYRATEX": return "Xyratex";
+ case "YINHE": return "NUDT Computer Co.";
+ case "YIXUN": return "Yixun Electronic Co.,Ltd.";
+ case "YOTTA": return "YottaYotta, Inc.";
+ case "Zarva": return "Zarva Digital Technology Co., Ltd.";
+ case "ZETTA": return "Zetta Systems, Inc.";
+ case "ZTE": return "ZTE Corporation";
+ case "ZVAULT": return "Zetavault";
+ default: return scsiVendorString;
}
}
}
diff --git a/SecureDigital/CID.cs b/SecureDigital/CID.cs
index 257e441b9..a5e6025a7 100644
--- a/SecureDigital/CID.cs
+++ b/SecureDigital/CID.cs
@@ -41,13 +41,13 @@ namespace DiscImageChef.Decoders.SecureDigital
[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
public class CID
{
- public byte Manufacturer;
+ public byte Manufacturer;
public string ApplicationID;
public string ProductName;
- public byte ProductRevision;
- public uint ProductSerialNumber;
+ public byte ProductRevision;
+ public uint ProductSerialNumber;
public ushort ManufacturingDate;
- public byte CRC;
+ public byte CRC;
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
@@ -79,16 +79,16 @@ namespace DiscImageChef.Decoders.SecureDigital
CID cid = new CID
{
- Manufacturer = response[0],
- ProductRevision = response[8],
+ Manufacturer = response[0],
+ ProductRevision = response[8],
ProductSerialNumber = BitConverter.ToUInt32(response, 9),
- ManufacturingDate = (ushort)(((response[13] & 0x0F) << 4) + response[14]),
- CRC = (byte)((response[15] & 0xFE) >> 1)
+ ManufacturingDate = (ushort)(((response[13] & 0x0F) << 4) + response[14]),
+ CRC = (byte)((response[15] & 0xFE) >> 1)
};
byte[] tmp = new byte[2];
Array.Copy(response, 1, tmp, 0, 2);
cid.ApplicationID = StringHandlers.CToString(tmp);
- tmp = new byte[5];
+ tmp = new byte[5];
Array.Copy(response, 3, tmp, 0, 5);
cid.ProductName = StringHandlers.CToString(tmp);
@@ -109,7 +109,8 @@ namespace DiscImageChef.Decoders.SecureDigital
cid.ProductRevision & 0x0F).AppendLine();
sb.AppendFormat("\tProduct serial number: {0}", cid.ProductSerialNumber).AppendLine();
sb.AppendFormat("\tDevice manufactured month {0} of {1}", (cid.ManufacturingDate & 0xF00) >> 8,
- (cid.ManufacturingDate & 0xFF) + 2000).AppendLine();
+ (cid.ManufacturingDate & 0xFF) + 2000)
+ .AppendLine();
sb.AppendFormat("\tCID CRC: 0x{0:X2}", cid.CRC).AppendLine();
return sb.ToString();
diff --git a/SecureDigital/CSD.cs b/SecureDigital/CSD.cs
index 2f76c0e39..cc7e5cd0d 100644
--- a/SecureDigital/CSD.cs
+++ b/SecureDigital/CSD.cs
@@ -41,35 +41,35 @@ namespace DiscImageChef.Decoders.SecureDigital
[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
public class CSD
{
- public byte Structure;
- public byte TAAC;
- public byte NSAC;
- public byte Speed;
+ public byte Structure;
+ public byte TAAC;
+ public byte NSAC;
+ public byte Speed;
public ushort Classes;
- public byte ReadBlockLength;
- public bool ReadsPartialBlocks;
- public bool WriteMisalignment;
- public bool ReadMisalignment;
- public bool DSRImplemented;
- public uint Size;
- public byte ReadCurrentAtVddMin;
- public byte ReadCurrentAtVddMax;
- public byte WriteCurrentAtVddMin;
- public byte WriteCurrentAtVddMax;
- public byte SizeMultiplier;
- public bool EraseBlockEnable;
- public byte EraseSectorSize;
- public byte WriteProtectGroupSize;
- public bool WriteProtectGroupEnable;
- public byte WriteSpeedFactor;
- public byte WriteBlockLength;
- public bool WritesPartialBlocks;
- public bool FileFormatGroup;
- public bool Copy;
- public bool PermanentWriteProtect;
- public bool TemporaryWriteProtect;
- public byte FileFormat;
- public byte CRC;
+ public byte ReadBlockLength;
+ public bool ReadsPartialBlocks;
+ public bool WriteMisalignment;
+ public bool ReadMisalignment;
+ public bool DSRImplemented;
+ public uint Size;
+ public byte ReadCurrentAtVddMin;
+ public byte ReadCurrentAtVddMax;
+ public byte WriteCurrentAtVddMin;
+ public byte WriteCurrentAtVddMax;
+ public byte SizeMultiplier;
+ public bool EraseBlockEnable;
+ public byte EraseSectorSize;
+ public byte WriteProtectGroupSize;
+ public bool WriteProtectGroupEnable;
+ public byte WriteSpeedFactor;
+ public byte WriteBlockLength;
+ public bool WritesPartialBlocks;
+ public bool FileFormatGroup;
+ public bool Copy;
+ public bool PermanentWriteProtect;
+ public bool TemporaryWriteProtect;
+ public byte FileFormat;
+ public byte CRC;
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
@@ -100,39 +100,40 @@ namespace DiscImageChef.Decoders.SecureDigital
CSD csd = new CSD
{
- Structure = (byte)((response[0] & 0xC0) >> 6),
- TAAC = response[1],
- NSAC = response[2],
- Speed = response[3],
- Classes = (ushort)((response[4] << 4) + ((response[5] & 0xF0) >> 4)),
- ReadBlockLength = (byte)(response[5] & 0x0F),
- ReadsPartialBlocks = (response[6] & 0x80) == 0x80,
- WriteMisalignment = (response[6] & 0x40) == 0x40,
- ReadMisalignment = (response[6] & 0x20) == 0x20,
- DSRImplemented = (response[6] & 0x10) == 0x10,
- EraseBlockEnable = (response[10] & 0x40) == 0x40,
- EraseSectorSize = (byte)(((response[10] & 0x3F) << 1) + ((response[11] & 0x80) >> 7)),
- WriteProtectGroupSize = (byte)(response[11] & 0x7F),
- WriteProtectGroupEnable = (response[12] & 0x80) == 0x80,
- WriteSpeedFactor = (byte)((response[12] & 0x1C) >> 2),
- WriteBlockLength = (byte)(((response[12] & 0x03) << 2) + ((response[13] & 0xC0) >> 6)),
- WritesPartialBlocks = (response[13] & 0x20) == 0x20,
- FileFormatGroup = (response[14] & 0x80) == 0x80,
- Copy = (response[14] & 0x40) == 0x40,
- PermanentWriteProtect = (response[14] & 0x20) == 0x20,
- TemporaryWriteProtect = (response[14] & 0x10) == 0x10,
- FileFormat = (byte)((response[14] & 0x0C) >> 2),
- CRC = (byte)((response[15] & 0xFE) >> 1)
+ Structure = (byte)((response[0] & 0xC0) >> 6),
+ TAAC = response[1],
+ NSAC = response[2],
+ Speed = response[3],
+ Classes = (ushort)((response[4] << 4) + ((response[5] & 0xF0) >> 4)),
+ ReadBlockLength = (byte)(response[5] & 0x0F),
+ ReadsPartialBlocks = (response[6] & 0x80) == 0x80,
+ WriteMisalignment = (response[6] & 0x40) == 0x40,
+ ReadMisalignment = (response[6] & 0x20) == 0x20,
+ DSRImplemented = (response[6] & 0x10) == 0x10,
+ EraseBlockEnable = (response[10] & 0x40) == 0x40,
+ EraseSectorSize = (byte)(((response[10] & 0x3F) << 1) + ((response[11] & 0x80) >> 7)),
+ WriteProtectGroupSize = (byte)(response[11] & 0x7F),
+ WriteProtectGroupEnable = (response[12] & 0x80) == 0x80,
+ WriteSpeedFactor = (byte)((response[12] & 0x1C) >> 2),
+ WriteBlockLength = (byte)(((response[12] & 0x03) << 2) + ((response[13] & 0xC0) >> 6)),
+ WritesPartialBlocks = (response[13] & 0x20) == 0x20,
+ FileFormatGroup = (response[14] & 0x80) == 0x80,
+ Copy = (response[14] & 0x40) == 0x40,
+ PermanentWriteProtect = (response[14] & 0x20) == 0x20,
+ TemporaryWriteProtect = (response[14] & 0x10) == 0x10,
+ FileFormat = (byte)((response[14] & 0x0C) >> 2),
+ CRC = (byte)((response[15] & 0xFE) >> 1)
};
if(csd.Structure == 0)
{
- csd.Size = (ushort)(((response[6] & 0x03) << 10) + (response[7] << 2) + ((response[8] & 0xC0) >> 6));
- csd.ReadCurrentAtVddMin = (byte)((response[8] & 0x38) >> 3);
- csd.ReadCurrentAtVddMax = (byte)(response[8] & 0x07);
+ csd.Size =
+ (ushort)(((response[6] & 0x03) << 10) + (response[7] << 2) + ((response[8] & 0xC0) >> 6));
+ csd.ReadCurrentAtVddMin = (byte)((response[8] & 0x38) >> 3);
+ csd.ReadCurrentAtVddMax = (byte)(response[8] & 0x07);
csd.WriteCurrentAtVddMin = (byte)((response[9] & 0xE0) >> 5);
csd.WriteCurrentAtVddMax = (byte)((response[9] & 0x1C) >> 2);
- csd.SizeMultiplier = (byte)(((response[9] & 0x03) << 1) + ((response[10] & 0x80) >> 7));
+ csd.SizeMultiplier = (byte)(((response[9] & 0x03) << 1) + ((response[10] & 0x80) >> 7));
}
else csd.Size = (uint)(((response[7] & 0x3F) << 16) + (response[8] << 8) + response[9]);
@@ -145,7 +146,7 @@ namespace DiscImageChef.Decoders.SecureDigital
double unitFactor = 0;
double multiplier = 0;
- string unit = "";
+ string unit = "";
StringBuilder sb = new StringBuilder();
sb.AppendLine("SecureDigital Device Specific Data Register:");
@@ -162,35 +163,35 @@ namespace DiscImageChef.Decoders.SecureDigital
switch(csd.TAAC & 0x07)
{
case 0:
- unit = "ns";
+ unit = "ns";
unitFactor = 1;
break;
case 1:
- unit = "ns";
+ unit = "ns";
unitFactor = 10;
break;
case 2:
- unit = "ns";
+ unit = "ns";
unitFactor = 100;
break;
case 3:
- unit = "μs";
+ unit = "μs";
unitFactor = 1;
break;
case 4:
- unit = "μs";
+ unit = "μs";
unitFactor = 10;
break;
case 5:
- unit = "μs";
+ unit = "μs";
unitFactor = 100;
break;
case 6:
- unit = "ms";
+ unit = "ms";
unitFactor = 1;
break;
case 7:
- unit = "ms";
+ unit = "ms";
unitFactor = 10;
break;
}
@@ -268,7 +269,7 @@ namespace DiscImageChef.Decoders.SecureDigital
unitFactor = 100;
break;
default:
- unit = "unknown";
+ unit = "unknown";
unitFactor = 0;
break;
}
@@ -329,7 +330,9 @@ namespace DiscImageChef.Decoders.SecureDigital
sb.AppendFormat("\tDevice's transfer speed: {0}{1}", result, unit).AppendLine();
unit = "";
- for(int cl = 0, mask = 1; cl <= 11; cl++, mask <<= 1) if((csd.Classes & mask) == mask) unit += $" {cl}";
+ for(int cl = 0, mask = 1; cl <= 11; cl++, mask <<= 1)
+ if((csd.Classes & mask) == mask)
+ unit += $" {cl}";
sb.AppendFormat("\tDevice support command classes {0}", unit).AppendLine();
sb.AppendFormat("\tRead block length is {0} bytes", Math.Pow(2, csd.ReadBlockLength)).AppendLine();
@@ -347,7 +350,8 @@ namespace DiscImageChef.Decoders.SecureDigital
sb.AppendFormat("\tDevice has {0} blocks", (int)result).AppendLine();
result = (csd.Size + 1) * Math.Pow(2, csd.SizeMultiplier + 2) * Math.Pow(2, csd.ReadBlockLength);
- if(result > 1073741824) sb.AppendFormat("\tDevice has {0} GiB", result / 1073741824.0).AppendLine();
+ if(result > 1073741824)
+ sb.AppendFormat("\tDevice has {0} GiB", result / 1073741824.0).AppendLine();
else if(result > 1048576) sb.AppendFormat("\tDevice has {0} MiB", result / 1048576.0).AppendLine();
else if(result > 1024) sb.AppendFormat("\tDevice has {0} KiB", result / 1024.0).AppendLine();
else sb.AppendFormat("\tDevice has {0} bytes", result).AppendLine();
diff --git a/SecureDigital/OCR.cs b/SecureDigital/OCR.cs
index 2c387dfce..0b29a4713 100644
--- a/SecureDigital/OCR.cs
+++ b/SecureDigital/OCR.cs
@@ -67,20 +67,20 @@ namespace DiscImageChef.Decoders.SecureDigital
{
return new OCR
{
- PowerUp = (response & 0x80000000) == 0x80000000,
- CCS = (response & 0x40000000) == 0x40000000,
- UHS = (response & 0x20000000) == 0x20000000,
- OneEight = (response & 0x01000000) == 0x01000000,
- ThreeFive = (response & 0x00800000) == 0x00800000,
- ThreeFour = (response & 0x00400000) == 0x00400000,
+ PowerUp = (response & 0x80000000) == 0x80000000,
+ CCS = (response & 0x40000000) == 0x40000000,
+ UHS = (response & 0x20000000) == 0x20000000,
+ OneEight = (response & 0x01000000) == 0x01000000,
+ ThreeFive = (response & 0x00800000) == 0x00800000,
+ ThreeFour = (response & 0x00400000) == 0x00400000,
ThreeThree = (response & 0x00200000) == 0x00200000,
- ThreeTwo = (response & 0x00100000) == 0x00100000,
- ThreeOne = (response & 0x00080000) == 0x00080000,
- ThreeZero = (response & 0x00040000) == 0x00040000,
- TwoNine = (response & 0x00020000) == 0x00020000,
- TwoEight = (response & 0x00010000) == 0x00010000,
- TwoSeven = (response & 0x00008000) == 0x00008000,
- LowPower = (response & 0x00000080) == 0x00000080
+ ThreeTwo = (response & 0x00100000) == 0x00100000,
+ ThreeOne = (response & 0x00080000) == 0x00080000,
+ ThreeZero = (response & 0x00040000) == 0x00040000,
+ TwoNine = (response & 0x00020000) == 0x00020000,
+ TwoEight = (response & 0x00010000) == 0x00010000,
+ TwoSeven = (response & 0x00008000) == 0x00008000,
+ LowPower = (response & 0x00000080) == 0x00000080
};
}
diff --git a/SecureDigital/SCR.cs b/SecureDigital/SCR.cs
index 5e9b38a3b..3c4f9a9df 100644
--- a/SecureDigital/SCR.cs
+++ b/SecureDigital/SCR.cs
@@ -42,16 +42,16 @@ namespace DiscImageChef.Decoders.SecureDigital
[SuppressMessage("ReSharper", "NotAccessedField.Global")]
public class SCR
{
- public byte Structure;
- public byte Spec;
- public bool DataStatusAfterErase;
- public byte Security;
- public byte BusWidth;
- public bool Spec3;
- public byte ExtendedSecurity;
- public bool Spec4;
- public byte SpecX;
- public byte CommandSupport;
+ public byte Structure;
+ public byte Spec;
+ public bool DataStatusAfterErase;
+ public byte Security;
+ public byte BusWidth;
+ public bool Spec3;
+ public byte ExtendedSecurity;
+ public bool Spec4;
+ public byte SpecX;
+ public byte CommandSupport;
public byte[] ManufacturerReserved;
}
@@ -79,16 +79,16 @@ namespace DiscImageChef.Decoders.SecureDigital
SCR scr = new SCR
{
- Structure = (byte)((response[0] & 0xF0) >> 4),
- Spec = (byte)(response[0] & 0x0F),
- DataStatusAfterErase = (response[1] & 0x80) == 0x80,
- Security = (byte)((response[1] & 0x70) >> 4),
- BusWidth = (byte)(response[1] & 0x0F),
- Spec3 = (response[2] & 0x80) == 0x80,
- ExtendedSecurity = (byte)((response[2] & 0x78) >> 3),
- Spec4 = (response[2] & 0x04) == 0x04,
- SpecX = (byte)(((response[2] & 0x03) << 2) + ((response[3] & 0xC0) >> 6)),
- CommandSupport = (byte)(response[3] & 0x0F),
+ Structure = (byte)((response[0] & 0xF0) >> 4),
+ Spec = (byte)(response[0] & 0x0F),
+ DataStatusAfterErase = (response[1] & 0x80) == 0x80,
+ Security = (byte)((response[1] & 0x70) >> 4),
+ BusWidth = (byte)(response[1] & 0x0F),
+ Spec3 = (response[2] & 0x80) == 0x80,
+ ExtendedSecurity = (byte)((response[2] & 0x78) >> 3),
+ Spec4 = (response[2] & 0x04) == 0x04,
+ SpecX = (byte)(((response[2] & 0x03) << 2) + ((response[3] & 0xC0) >> 6)),
+ CommandSupport = (byte)(response[3] & 0x0F),
ManufacturerReserved = new byte[4]
};
Array.Copy(response, 4, scr.ManufacturerReserved, 0, 4);
@@ -119,8 +119,8 @@ namespace DiscImageChef.Decoders.SecureDigital
sb.AppendLine("\tDevice follows SecureDigital Physical Layer Specification version 5.xx");
else
sb
- .AppendFormat("\tDevice follows SecureDigital Physical Layer Specification with unknown version {0}.{1}.{2}.{3}",
- scr.Spec, scr.Spec3, scr.Spec4, scr.SpecX).AppendLine();
+ .AppendFormat("\tDevice follows SecureDigital Physical Layer Specification with unknown version {0}.{1}.{2}.{3}",
+ scr.Spec, scr.Spec3, scr.Spec4, scr.SpecX).AppendLine();
switch(scr.Security)
{
case 0:
diff --git a/SecureDigital/VendorString.cs b/SecureDigital/VendorString.cs
index 545e0f532..dbea02c6c 100644
--- a/SecureDigital/VendorString.cs
+++ b/SecureDigital/VendorString.cs
@@ -39,7 +39,7 @@ namespace DiscImageChef.Decoders.SecureDigital
switch(sdVendorId)
{
case 0xAA: return "QEMU";
- default: return $"Unknown manufacturer ID 0x{sdVendorId:X2}";
+ default: return $"Unknown manufacturer ID 0x{sdVendorId:X2}";
}
}
}
diff --git a/Sega/CD.cs b/Sega/CD.cs
index 57b3af001..862c7ddf0 100644
--- a/Sega/CD.cs
+++ b/Sega/CD.cs
@@ -49,9 +49,11 @@ namespace DiscImageChef.Decoders.Sega
public struct IPBin
{
/// Must be "SEGADISCSYSTEM " or "SEGADATADISC " or "SEGAOS "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] SegaHardwareID;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] SegaHardwareID;
/// 0x010, Varies
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)] public byte[] volume_name;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
+ public byte[] volume_name;
/// 0x01B, 0x00
public byte spare_space1;
/// 0x01C, Volume version in BCD. <100 = Prerelease.
@@ -59,7 +61,8 @@ namespace DiscImageChef.Decoders.Sega
/// 0x01E, Bit 0 = 1 => CD-ROM. Rest should be 0.
public ushort volume_type;
/// 0x020, Unknown, varies!
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)] public byte[] system_name;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
+ public byte[] system_name;
/// 0x02B, 0x00
public byte spare_space2;
/// 0x02C, Should be 1
@@ -83,33 +86,46 @@ namespace DiscImageChef.Decoders.Sega
/// 0x04C, System program work RAM size in bytes
public uint sp_work_ram_size;
/// 0x050, MMDDYYYY
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] release_date;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] release_date;
/// 0x058, Seems to be all 0x20s
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public byte[] unknown1;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
+ public byte[] unknown1;
/// 0x05F, 0x00 ?
public byte spare_space4;
/// 0x060, System Reserved Area
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 160)] public byte[] system_reserved;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 160)]
+ public byte[] system_reserved;
/// 0x100, Hardware ID
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] hardware_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] hardware_id;
/// 0x113 or 0x110, "SEGA" or "T-xx"
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] public byte[] developer_code;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
+ public byte[] developer_code;
/// 0x118, Another release date, this with month in letters?
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] release_date2;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] release_date2;
/// 0x120, Domestic version of the game title
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] public byte[] domestic_title;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]
+ public byte[] domestic_title;
/// 0x150, Overseas version of the game title
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] public byte[] overseas_title;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]
+ public byte[] overseas_title;
/// 0x180, Official product code
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 13)] public byte[] product_code;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 13)]
+ public byte[] product_code;
/// 0x190, Supported peripherals, see above
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] peripherals;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] peripherals;
/// 0x1A0, 0x20
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] spare_space6;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] spare_space6;
/// 0x1B0, Inside here should be modem information, but I need to get a modem-enabled game
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public byte[] spare_space7;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
+ public byte[] spare_space7;
/// 0x1F0, Region codes, space-filled
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] region_codes;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] region_codes;
}
public static IPBin? DecodeIPBin(byte[] ipbin_sector)
@@ -129,15 +145,15 @@ namespace DiscImageChef.Decoders.Sega
Encoding.ASCII.GetString(ipbin.system_name));
DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.volume_version = \"{0:X}\"",
ipbin.volume_version);
- DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.volume_type = 0x{0:X8}", ipbin.volume_type);
+ DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.volume_type = 0x{0:X8}", ipbin.volume_type);
DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.system_version = 0x{0:X8}", ipbin.system_version);
- DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.ip_address = 0x{0:X8}", ipbin.ip_address);
- DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.ip_loadsize = {0}", ipbin.ip_loadsize);
+ DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.ip_address = 0x{0:X8}", ipbin.ip_address);
+ DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.ip_loadsize = {0}", ipbin.ip_loadsize);
DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.ip_entry_address = 0x{0:X8}",
ipbin.ip_entry_address);
DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.ip_work_ram_size = {0}", ipbin.ip_work_ram_size);
- DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.sp_address = 0x{0:X8}", ipbin.sp_address);
- DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.sp_loadsize = {0}", ipbin.sp_loadsize);
+ DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.sp_address = 0x{0:X8}", ipbin.sp_address);
+ DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.sp_loadsize = {0}", ipbin.sp_loadsize);
DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.sp_entry_address = 0x{0:X8}",
ipbin.sp_entry_address);
DicConsole.DebugWriteLine("ISO9660 plugin", "segacd_ipbin.sp_work_ram_size = {0}", ipbin.sp_work_ram_size);
@@ -178,8 +194,8 @@ namespace DiscImageChef.Decoders.Sega
IPBinInformation.AppendLine("--------------------------------");
// Decoding all data
- DateTime ipbindate = DateTime.MinValue;
- CultureInfo provider = CultureInfo.InvariantCulture;
+ DateTime ipbindate = DateTime.MinValue;
+ CultureInfo provider = CultureInfo.InvariantCulture;
try { ipbindate = DateTime.ParseExact(Encoding.ASCII.GetString(ipbin.release_date), "MMddyyyy", provider); }
catch
{
@@ -188,12 +204,12 @@ namespace DiscImageChef.Decoders.Sega
ipbindate = DateTime.ParseExact(Encoding.ASCII.GetString(ipbin.release_date2), "yyyy.MMM",
provider);
}
-#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
+ #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
{
// ignored
}
-#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
+ #pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
}
/*
diff --git a/Sega/Dreamcast.cs b/Sega/Dreamcast.cs
index 163faa44c..bae1c659c 100644
--- a/Sega/Dreamcast.cs
+++ b/Sega/Dreamcast.cs
@@ -48,15 +48,18 @@ namespace DiscImageChef.Decoders.Sega
public struct IPBin
{
/// Must be "SEGA SEGAKATANA "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] SegaHardwareID;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] SegaHardwareID;
/// 0x010, "SEGA ENTERPRISES"
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] maker_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] maker_id;
/// 0x020, CRC of product_no and product_version
public uint dreamcast_crc;
/// 0x024, " "
public byte spare_space1;
/// 0x025, "GD-ROM"
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] dreamcast_media;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
+ public byte[] dreamcast_media;
/// 0x02B, Disc number
public byte disc_no;
/// 0x02C, '/'
@@ -64,29 +67,40 @@ namespace DiscImageChef.Decoders.Sega
/// 0x02D, Total number of discs
public byte disc_total_nos;
/// 0x02E, " "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] spare_space2;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] spare_space2;
/// 0x030, Region codes, space-filled
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] region_codes;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] region_codes;
/// 0x038, Supported peripherals, bitwise
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public byte[] peripherals;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
+ public byte[] peripherals;
/// 0x03F, ' '
public byte spare_space3;
/// 0x040, Product number
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public byte[] product_no;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
+ public byte[] product_no;
/// 0x04A, Product version
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] product_version;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
+ public byte[] product_version;
/// 0x050, YYYYMMDD
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] release_date;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] release_date;
/// 0x058, " "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] spare_space4;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] spare_space4;
/// 0x060, Usually "1ST_READ.BIN" or "0WINCE.BIN "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] boot_filename;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
+ public byte[] boot_filename;
/// 0x06C, " "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] spare_space5;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
+ public byte[] spare_space5;
/// 0x070, Game producer, space-filled
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] producer;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] producer;
/// 0x080, Game name, space-filled
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] product_name;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
+ public byte[] product_name;
}
public static IPBin? DecodeIPBin(byte[] ipbin_sector)
@@ -148,7 +162,7 @@ namespace DiscImageChef.Decoders.Sega
IPBinInformation.AppendLine("--------------------------------");
// Decoding all data
- DateTime ipbindate;
+ DateTime ipbindate;
CultureInfo provider = CultureInfo.InvariantCulture;
ipbindate = DateTime.ParseExact(Encoding.ASCII.GetString(ipbin.release_date), "yyyyMMdd", provider);
IPBinInformation.AppendFormat("Product name: {0}", Encoding.ASCII.GetString(ipbin.product_name))
diff --git a/Sega/Saturn.cs b/Sega/Saturn.cs
index c7f24280d..159b13566 100644
--- a/Sega/Saturn.cs
+++ b/Sega/Saturn.cs
@@ -48,17 +48,23 @@ namespace DiscImageChef.Decoders.Sega
public struct IPBin
{
/// Must be "SEGA SEGASATURN "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] SegaHardwareID;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] SegaHardwareID;
/// 0x010, "SEGA ENTERPRISES"
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] maker_id;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] maker_id;
/// 0x020, Product number
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public byte[] product_no;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
+ public byte[] product_no;
/// 0x02A, Product version
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] product_version;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
+ public byte[] product_version;
/// 0x030, YYYYMMDD
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] release_date;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] release_date;
/// 0x038, "CD-"
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] saturn_media;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public byte[] saturn_media;
/// 0x03B, Disc number
public byte disc_no;
/// // 0x03C, '/'
@@ -66,13 +72,17 @@ namespace DiscImageChef.Decoders.Sega
/// // 0x03D, Total number of discs
public byte disc_total_nos;
/// 0x03E, " "
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] spare_space1;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
+ public byte[] spare_space1;
/// 0x040, Region codes, space-filled
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] region_codes;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] region_codes;
/// 0x050, Supported peripherals, see above
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] peripherals;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public byte[] peripherals;
/// 0x060, Game name, space-filled
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 112)] public byte[] product_name;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 112)]
+ public byte[] product_name;
}
public static IPBin? DecodeIPBin(byte[] ipbin_sector)
@@ -128,7 +138,7 @@ namespace DiscImageChef.Decoders.Sega
IPBinInformation.AppendLine("--------------------------------");
// Decoding all data
- DateTime ipbindate;
+ DateTime ipbindate;
CultureInfo provider = CultureInfo.InvariantCulture;
ipbindate = DateTime.ParseExact(Encoding.ASCII.GetString(ipbin.release_date), "yyyyMMdd", provider);
IPBinInformation.AppendFormat("Product name: {0}", Encoding.ASCII.GetString(ipbin.product_name))
diff --git a/Xbox/DMI.cs b/Xbox/DMI.cs
index 07bd14ca7..808178abb 100644
--- a/Xbox/DMI.cs
+++ b/Xbox/DMI.cs
@@ -50,8 +50,13 @@ namespace DiscImageChef.Decoders.Xbox
if(BitConverter.ToUInt32(dmi, 4) != 1) return false;
// Catalogue number is two letters, five numbers, one letter
- for(int i = 12; i < 14; i++) if(dmi[i] < 0x41 || dmi[i] > 0x5A) return false;
- for(int i = 14; i < 19; i++) if(dmi[i] < 0x30 || dmi[i] > 0x39) return false;
+ for(int i = 12; i < 14; i++)
+ if(dmi[i] < 0x41 || dmi[i] > 0x5A)
+ return false;
+
+ for(int i = 14; i < 19; i++)
+ if(dmi[i] < 0x30 || dmi[i] > 0x39)
+ return false;
if(dmi[19] < 0x41 || dmi[19] > 0x5A) return false;
@@ -159,10 +164,10 @@ namespace DiscImageChef.Decoders.Xbox
XboxDMI dmi = new XboxDMI
{
DataLength = (ushort)((response[0] << 8) + response[1]),
- Reserved1 = response[2],
- Reserved2 = response[3],
- Version = BitConverter.ToUInt32(response, 4),
- Timestamp = BitConverter.ToInt64(response, 20)
+ Reserved1 = response[2],
+ Reserved2 = response[3],
+ Version = BitConverter.ToUInt32(response, 4),
+ Timestamp = BitConverter.ToInt64(response, 20)
};
byte[] tmp = new byte[8];
@@ -180,11 +185,11 @@ namespace DiscImageChef.Decoders.Xbox
Xbox360DMI dmi = new Xbox360DMI
{
DataLength = (ushort)((response[0] << 8) + response[1]),
- Reserved1 = response[2],
- Reserved2 = response[3],
- Version = BitConverter.ToUInt32(response, 4),
- Timestamp = BitConverter.ToInt64(response, 20),
- MediaID = new byte[16]
+ Reserved1 = response[2],
+ Reserved2 = response[3],
+ Version = BitConverter.ToUInt32(response, 4),
+ Timestamp = BitConverter.ToInt64(response, 20),
+ MediaID = new byte[16]
};
Array.Copy(response, 36, dmi.MediaID, 0, 16);
@@ -199,8 +204,8 @@ namespace DiscImageChef.Decoders.Xbox
{
if(dmi == null) return null;
- XboxDMI decoded = dmi.Value;
- StringBuilder sb = new StringBuilder();
+ XboxDMI decoded = dmi.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("Catalogue number: ");
for(int i = 0; i < 2; i++) sb.AppendFormat("{0}", decoded.CatalogNumber[i]);
@@ -221,8 +226,8 @@ namespace DiscImageChef.Decoders.Xbox
{
if(dmi == null) return null;
- Xbox360DMI decoded = dmi.Value;
- StringBuilder sb = new StringBuilder();
+ Xbox360DMI decoded = dmi.Value;
+ StringBuilder sb = new StringBuilder();
sb.Append("Catalogue number: ");
for(int i = 0; i < 2; i++) sb.AppendFormat("{0}", decoded.CatalogNumber[i]);
diff --git a/Xbox/SS.cs b/Xbox/SS.cs
index dd77bfbe8..ac1cfeab3 100644
--- a/Xbox/SS.cs
+++ b/Xbox/SS.cs
@@ -228,35 +228,38 @@ namespace DiscImageChef.Decoders.Xbox
SecuritySector ss = new SecuritySector
{
- DiskCategory = (DiskCategory)((response[0] & 0xF0) >> 4),
- PartVersion = (byte)(response[0] & 0x0F),
- DiscSize = (DVDSize)((response[1] & 0xF0) >> 4),
- MaximumRate = (MaximumRateField)(response[1] & 0x0F),
- Reserved3 = (response[2] & 0x80) == 0x80,
- Layers = (byte)((response[2] & 0x60) >> 5),
- TrackPath = (response[2] & 0x08) == 0x08,
- LayerType = (LayerTypeFieldMask)(response[2] & 0x07),
+ DiskCategory = (DiskCategory)((response[0] & 0xF0) >> 4),
+ PartVersion = (byte)(response[0] & 0x0F),
+ DiscSize = (DVDSize)((response[1] & 0xF0) >> 4),
+ MaximumRate = (MaximumRateField)(response[1] & 0x0F),
+ Reserved3 = (response[2] & 0x80) == 0x80,
+ Layers = (byte)((response[2] & 0x60) >> 5),
+ TrackPath = (response[2] & 0x08) == 0x08,
+ LayerType = (LayerTypeFieldMask)(response[2] & 0x07),
LinearDensity = (LinearDensityField)((response[3] & 0xF0) >> 4),
- TrackDensity = (TrackDensityField)(response[3] & 0x0F),
- DataAreaStartPSN = (uint)((response[4] << 24) + (response[5] << 16) + (response[6] << 8) + response[7]),
- DataAreaEndPSN = (uint)((response[8] << 24) + (response[9] << 16) + (response[10] << 8) + response[11]),
- Layer0EndPSN = (uint)((response[12] << 24) + (response[13] << 16) + (response[14] << 8) + response[15]),
- Unknown1 = response[27],
- Unknown2 = new byte[28],
- Unknown3 = new byte[436],
- Unknown4 = new byte[4],
- Unknown5 = new byte[43],
+ TrackDensity = (TrackDensityField)(response[3] & 0x0F),
+ DataAreaStartPSN =
+ (uint)((response[4] << 24) + (response[5] << 16) + (response[6] << 8) + response[7]),
+ DataAreaEndPSN =
+ (uint)((response[8] << 24) + (response[9] << 16) + (response[10] << 8) + response[11]),
+ Layer0EndPSN =
+ (uint)((response[12] << 24) + (response[13] << 16) + (response[14] << 8) + response[15]),
+ Unknown1 = response[27],
+ Unknown2 = new byte[28],
+ Unknown3 = new byte[436],
+ Unknown4 = new byte[4],
+ Unknown5 = new byte[43],
ChallengeTableVersion = response[768],
- NoChallengeEntries = response[769],
- ChallengeEntries = new ChallengeEntry[23],
- Unknown6 = response[1023],
- Unknown7 = new byte[48],
- Unknown8 = new byte[16],
- Unknown9 = new byte[16],
- Unknown10 = new byte[303],
- Unknown11 = new byte[104],
- Extents = new SecuritySectorExtent[23],
- ExtentsCopy = new SecuritySectorExtent[23]
+ NoChallengeEntries = response[769],
+ ChallengeEntries = new ChallengeEntry[23],
+ Unknown6 = response[1023],
+ Unknown7 = new byte[48],
+ Unknown8 = new byte[16],
+ Unknown9 = new byte[16],
+ Unknown10 = new byte[303],
+ Unknown11 = new byte[104],
+ Extents = new SecuritySectorExtent[23],
+ ExtentsCopy = new SecuritySectorExtent[23]
};
Array.Copy(response, 256, ss.Unknown2, 0, 28);
@@ -267,19 +270,19 @@ namespace DiscImageChef.Decoders.Xbox
for(int i = 0; i < 23; i++)
ss.ChallengeEntries[i] = new ChallengeEntry
{
- Level = response[770 + i * 11 + 0],
+ Level = response[770 + i * 11 + 0],
ChallengeId = response[770 + i * 11 + 1],
ChallengeValue =
(uint)((response[770 + i * 11 + 2] << 24) + (response[770 + i * 11 + 3] << 16) +
- (response[770 + i * 11 + 4] << 8) + response[770 + i * 11 + 5]),
+ (response[770 + i * 11 + 4] << 8) + response[770 + i * 11 + 5]),
ResponseModifier = response[770 + i * 11 + 6],
ResponseValue = (uint)((response[770 + i * 11 + 7] << 24) + (response[770 + i * 11 + 8] << 16) +
- (response[770 + i * 11 + 9] << 8) + response[770 + i * 11 + 10])
+ (response[770 + i * 11 + 9] << 8) + response[770 + i * 11 + 10])
};
- Array.Copy(response, 1052, ss.Unknown7, 0, 48);
- Array.Copy(response, 1120, ss.Unknown8, 0, 16);
- Array.Copy(response, 1180, ss.Unknown9, 0, 16);
+ Array.Copy(response, 1052, ss.Unknown7, 0, 48);
+ Array.Copy(response, 1120, ss.Unknown8, 0, 16);
+ Array.Copy(response, 1180, ss.Unknown9, 0, 16);
Array.Copy(response, 1208, ss.Unknown10, 0, 303);
Array.Copy(response, 1528, ss.Unknown11, 0, 104);
for(int i = 0; i < 23; i++)
@@ -316,7 +319,7 @@ namespace DiscImageChef.Decoders.Xbox
if(ss == null) return null;
SecuritySector decoded = ss.Value;
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = new StringBuilder();
string sizeString;
switch(decoded.DiscSize)
@@ -376,7 +379,7 @@ namespace DiscImageChef.Decoders.Xbox
}
sb.AppendFormat("Disc has {0} layers", decoded.Layers + 1).AppendLine();
- if(decoded.TrackPath && decoded.Layers == 1) sb.AppendLine("Layers are in parallel track path");
+ if(decoded.TrackPath && decoded.Layers == 1) sb.AppendLine("Layers are in parallel track path");
else if(!decoded.TrackPath && decoded.Layers == 1) sb.AppendLine("Layers are in opposite track path");
switch(decoded.LinearDensity)
@@ -437,7 +440,8 @@ namespace DiscImageChef.Decoders.Xbox
if(decoded.Layers == 1 && !decoded.TrackPath)
sb.AppendFormat("Layer 0 ends at PSN {0:X}h", decoded.Layer0EndPSN).AppendLine();
}
- else sb.AppendLine("Disc is empty");
+ else
+ sb.AppendLine("Disc is empty");
else sb.AppendLine("Disc is empty");
sb.AppendLine("Challenges:");