Added information from SCSI-3 SBC-1.

This commit is contained in:
2015-10-25 02:07:39 +00:00
parent a693b6ef6a
commit 113edb16f2
2 changed files with 145 additions and 80 deletions

View File

@@ -1,3 +1,8 @@
2015-10-25 Natalia Portillo <claunia@claunia.com>
* SCSI/Modes.cs:
Added information from SCSI-3 SBC-1.
2015-10-24 Natalia Portillo <claunia@claunia.com> 2015-10-24 Natalia Portillo <claunia@claunia.com>
* SCSI/Modes.cs: * SCSI/Modes.cs:

View File

@@ -111,6 +111,33 @@ namespace DiscImageChef.Decoders.SCSI
Tape24 = 0x44, Tape24 = 0x44,
#endregion Medium Types defined in SCSI-2 for Direct-Access devices #endregion Medium Types defined in SCSI-2 for Direct-Access devices
#region Medium Types defined in SCSI-3 SBC-1 for Optical devices
/// <summary>
/// Read-only medium
/// </summary>
ReadOnly = 0x01,
/// <summary>
/// Write-once Read-many medium
/// </summary>
WORM = 0x02,
/// <summary>
/// Erasable medium
/// </summary>
Erasable = 0x03,
/// <summary>
/// Combination of read-only and write-once medium
/// </summary>
RO_WORM = 0x04,
/// <summary>
/// Combination of read-only and erasable medium
/// </summary>
RO_RW = 0x05,
/// <summary>
/// Combination of write-once and erasable medium
/// </summary>
WORM_RW = 0x06,
#endregion Medium Types defined in SCSI-3 SBC-1 for Optical devices
#region Medium Types defined in SCSI-2 for MultiMedia devices #region Medium Types defined in SCSI-2 for MultiMedia devices
/// <summary> /// <summary>
/// 120 mm CD-ROM /// 120 mm CD-ROM
@@ -272,41 +299,41 @@ namespace DiscImageChef.Decoders.SCSI
#region Density Types defined in SCSI-2 for Optical devices #region Density Types defined in SCSI-2 for Optical devices
/// <summary> /// <summary>
/// 86 mm Read/Write single-sided optical disc with 12500 tracks /// ISO/IEC 10090: 86 mm Read/Write single-sided optical disc with 12500 tracks
/// </summary> /// </summary>
D660 = 0x01, ISO10090 = 0x01,
/// <summary> /// <summary>
/// 89 mm Read/Write double-sided optical disc with 12500 tracks /// 89 mm Read/Write double-sided optical disc with 12500 tracks
/// </summary> /// </summary>
D581 = 0x02, D581 = 0x02,
/// <summary> /// <summary>
/// 130 mm Read/Write double-sided optical disc with 18750 tracks /// ANSI X3.212: 130 mm Read/Write double-sided optical disc with 18750 tracks
/// </summary> /// </summary>
I607 = 0x03, X3_212 = 0x03,
/// <summary> /// <summary>
/// 130 mm Write-Once double-sided optical disc with 30000 tracks /// ANSI X3.191: 130 mm Write-Once double-sided optical disc with 30000 tracks
/// </summary> /// </summary>
D655 = 0x04, X3_191 = 0x04,
/// <summary> /// <summary>
/// 130 mm Write-Once double-sided optical disc with 20000 tracks /// ANSI X3.214: 130 mm Write-Once double-sided optical disc with 20000 tracks
/// </summary> /// </summary>
D659 = 0x05, X3_214 = 0x05,
/// <summary> /// <summary>
/// 130 mm Write-Once double-sided optical disc with 18750 tracks /// ANSI X3.211: 130 mm Write-Once double-sided optical disc with 18750 tracks
/// </summary> /// </summary>
D457 = 0x06, X3_211 = 0x06,
/// <summary> /// <summary>
/// 200 mm optical disc /// 200 mm optical disc
/// </summary> /// </summary>
D407 = 0x07, D407 = 0x07,
/// <summary> /// <summary>
/// 300 mm double-sided optical disc /// ISO/IEC 13614: 300 mm double-sided optical disc
/// </summary> /// </summary>
D408 = 0x08, ISO13614 = 0x08,
/// <summary> /// <summary>
/// 356 mm double-sided optical disc with 56350 tracks /// ANSI X3.200: 356 mm double-sided optical disc with 56350 tracks
/// </summary> /// </summary>
D456 = 0x09 X3_200 = 0x09
#endregion Density Types defined in SCSI-2 for Optical devices #endregion Density Types defined in SCSI-2 for Optical devices
} }
@@ -330,7 +357,7 @@ namespace DiscImageChef.Decoders.SCSI
public static ModeHeader? DecodeModeHeader6(byte[] modeResponse, PeripheralDeviceTypes deviceType) public static ModeHeader? DecodeModeHeader6(byte[] modeResponse, PeripheralDeviceTypes deviceType)
{ {
if (modeResponse.Length < modeResponse[0] + 1) if (modeResponse == null || modeResponse.Length < 4 || modeResponse.Length < modeResponse[0] + 1)
return null; return null;
ModeHeader header = new ModeHeader(); ModeHeader header = new ModeHeader();
@@ -394,6 +421,8 @@ namespace DiscImageChef.Decoders.SCSI
switch (deviceType) switch (deviceType)
{ {
case PeripheralDeviceTypes.DirectAccess: case PeripheralDeviceTypes.DirectAccess:
{
if (header.Value.MediumType != MediumTypes.Default)
{ {
sb.Append("Medium is "); sb.Append("Medium is ");
@@ -448,6 +477,7 @@ namespace DiscImageChef.Decoders.SCSI
sb.AppendFormat("Unknown medium type 0x{0:X2}", header.Value.MediumType).AppendLine(); sb.AppendFormat("Unknown medium type 0x{0:X2}", header.Value.MediumType).AppendLine();
break; break;
} }
}
if (header.Value.WriteProtected) if (header.Value.WriteProtected)
sb.AppendLine("Medium is write protected"); sb.AppendLine("Medium is write protected");
@@ -654,6 +684,36 @@ namespace DiscImageChef.Decoders.SCSI
} }
case PeripheralDeviceTypes.OpticalDevice: case PeripheralDeviceTypes.OpticalDevice:
{ {
if (header.Value.MediumType != MediumTypes.Default)
{
sb.Append("Medium is ");
switch (header.Value.MediumType)
{
case MediumTypes.ReadOnly:
sb.AppendLine("a Read-only optical");
break;
case MediumTypes.WORM:
sb.AppendLine("a Write-once Read-many optical");
break;
case MediumTypes.Erasable:
sb.AppendLine("a Erasable optical");
break;
case MediumTypes.RO_WORM:
sb.AppendLine("a combination of read-only and write-once optical");
break;
case MediumTypes.RO_RW:
sb.AppendLine("a combination of read-only and erasable optical");
break;
case MediumTypes.WORM_RW:
sb.AppendLine("a combination of write-once and erasable optical");
break;
default:
sb.AppendFormat("an unknown medium type 0x{0:X2}", header.Value.MediumType).AppendLine();
break;
}
}
if (header.Value.WriteProtected) if (header.Value.WriteProtected)
sb.AppendLine("Medium is write protected"); sb.AppendLine("Medium is write protected");
if (header.Value.EBC) if (header.Value.EBC)
@@ -668,32 +728,32 @@ namespace DiscImageChef.Decoders.SCSI
{ {
case DensityType.Default: case DensityType.Default:
break; break;
case DensityType.D660: case DensityType.ISO10090:
density = "86 mm Read/Write single-sided optical disc with 12500 tracks"; density = "ISO/IEC 10090: 86 mm Read/Write single-sided optical disc with 12500 tracks";
break; break;
case DensityType.D581: case DensityType.D581:
density = "89 mm Read/Write double-sided optical disc with 12500 tracks"; density = "89 mm Read/Write double-sided optical disc with 12500 tracks";
break; break;
case DensityType.I607: case DensityType.X3_212:
density = "130 mm Read/Write double-sided optical disc with 18750 tracks"; density = "ANSI X3.212: 130 mm Read/Write double-sided optical disc with 18750 tracks";
break; break;
case DensityType.D655: case DensityType.X3_191:
density = "130 mm Write-Once double-sided optical disc with 30000 tracks"; density = "ANSI X3.191: 130 mm Write-Once double-sided optical disc with 30000 tracks";
break; break;
case DensityType.D659: case DensityType.X3_214:
density = "130 mm Write-Once double-sided optical disc with 20000 tracks"; density = "ANSI X3.214: 130 mm Write-Once double-sided optical disc with 20000 tracks";
break; break;
case DensityType.D457: case DensityType.X3_211:
density = "130 mm Write-Once double-sided optical disc with 18750 tracks"; density = "ANSI X3.211: 130 mm Write-Once double-sided optical disc with 18750 tracks";
break; break;
case DensityType.D407: case DensityType.D407:
density = "200 mm optical disc"; density = "200 mm optical disc";
break; break;
case DensityType.D408: case DensityType.ISO13614:
density = "300 mm double-sided optical disc"; density = "ISO/IEC 13614: 300 mm double-sided optical disc";
break; break;
case DensityType.D456: case DensityType.X3_200:
density = "356 mm double-sided optical disc with 56350 tracks"; density = "ANSI X3.200: 356 mm double-sided optical disc with 56350 tracks";
break; break;
default: default:
density = String.Format("Unknown density code 0x{0:X2}", descriptor.Density); density = String.Format("Unknown density code 0x{0:X2}", descriptor.Density);