diff --git a/CICMMetadata b/CICMMetadata index ab5967fcf..3df79256d 160000 --- a/CICMMetadata +++ b/CICMMetadata @@ -1 +1 @@ -Subproject commit ab5967fcfff5c05ce34c66a5a530ce394aac6276 +Subproject commit 3df79256d41193469126aedf9723021b7477a057 diff --git a/DiscImageChef.CommonTypes/ChangeLog b/DiscImageChef.CommonTypes/ChangeLog index 0281a4d4b..a40db0177 100644 --- a/DiscImageChef.CommonTypes/ChangeLog +++ b/DiscImageChef.CommonTypes/ChangeLog @@ -1,3 +1,8 @@ +2016-10-12 Natalia Portillo + + * MediaTypeFromSCSI.cs: Added DDS-2, DDS-3, DDS-4 with no + medium type code. + 2016-08-21 Natalia Portillo * MediaType.cs: Added missing NEC and SHARP floppy types. diff --git a/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs b/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs index fe5e76711..39f6660b3 100644 --- a/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs +++ b/DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs @@ -639,6 +639,12 @@ namespace DiscImageChef.CommonTypes return MediaType.QIC120; case 0x10: return MediaType.QIC150; + case 0x24: + return MediaType.DDS2; + case 0x25: + return MediaType.DDS3; + case 0x26: + return MediaType.DDS4; case 0x28: return MediaType.IBM3490E; case 0x40: diff --git a/DiscImageChef.Devices/ChangeLog b/DiscImageChef.Devices/ChangeLog index db39e5f8a..c48cfdde2 100644 --- a/DiscImageChef.Devices/ChangeLog +++ b/DiscImageChef.Devices/ChangeLog @@ -1,3 +1,11 @@ +2016-10-12 Natalia Portillo + + * SPC.cs: Added REQUEST SENSE command. + + * SSC.cs: Added SPACE command. + + * Enums.cs: Added enumeration for SPACE command codes. + 2016-10-10 Natalia Portillo * SPC.cs: Corrected buffer size for MODE SENSE (6) diff --git a/DiscImageChef.Devices/Device/ScsiCommands/SPC.cs b/DiscImageChef.Devices/Device/ScsiCommands/SPC.cs index 0b413b6e8..298d493a7 100644 --- a/DiscImageChef.Devices/Device/ScsiCommands/SPC.cs +++ b/DiscImageChef.Devices/Device/ScsiCommands/SPC.cs @@ -774,6 +774,34 @@ namespace DiscImageChef.Devices return sense; } + + public bool RequestSense(out byte[] buffer, uint timeout, out double duration) + { + return RequestSense(false, out buffer, timeout, out duration); + } + + public bool RequestSense(bool descriptor, out byte[] buffer, uint timeout, out double duration) + { + byte[] senseBuffer = new byte[32]; + byte[] cdb = new byte[6]; + buffer = new byte[252]; + bool sense; + + cdb[0] = (byte)ScsiCommands.RequestSense; + if(descriptor) + cdb[1] = 0x01; + cdb[2] = 0; + cdb[3] = 0; + cdb[4] = (byte)buffer.Length; + cdb[5] = 0; + + lastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.In, out duration, out sense); + error = lastError != 0; + + DicConsole.DebugWriteLine("SCSI Device", "REQUEST SENSE took {0} ms.", duration); + + return sense; + } } } diff --git a/DiscImageChef.Devices/Device/ScsiCommands/SSC.cs b/DiscImageChef.Devices/Device/ScsiCommands/SSC.cs index 47961d3c1..baeb01b51 100644 --- a/DiscImageChef.Devices/Device/ScsiCommands/SSC.cs +++ b/DiscImageChef.Devices/Device/ScsiCommands/SSC.cs @@ -978,6 +978,28 @@ namespace DiscImageChef.Devices return sense; } + + public bool Space(out byte[] senseBuffer, SscSpaceCodes code, int count, uint timeout, out double duration) + { + senseBuffer = new byte[32]; + byte[] cdb = new byte[6]; + byte[] buffer = new byte[0]; + bool sense; + byte[] count_b = BitConverter.GetBytes(count); + + cdb[0] = (byte)ScsiCommands.Space; + cdb[1] = (byte)((byte)code & 0x0F); + cdb[2] = count_b[2]; + cdb[3] = count_b[1]; + cdb[4] = count_b[0]; + + lastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, ScsiDirection.None, out duration, out sense); + error = lastError != 0; + + DicConsole.DebugWriteLine("SCSI Device", "SPACE took {0} ms.", duration); + + return sense; + } } } diff --git a/DiscImageChef.Devices/Enums.cs b/DiscImageChef.Devices/Enums.cs index c76f416f5..76565b865 100644 --- a/DiscImageChef.Devices/Enums.cs +++ b/DiscImageChef.Devices/Enums.cs @@ -3432,5 +3432,28 @@ namespace DiscImageChef.Devices /// Half = 7 } + + // TODO: Check obsoletes + public enum SscSpaceCodes : byte + { + /// + /// Logical blocks + /// + LogicalBlock = 0, + /// + /// Filemarks + /// + Filemark = 1, + /// + /// Sequential filemarks + /// + SequentialFilemark = 2, + /// + /// End-of-data + /// + EndOfData = 3, + Obsolete1 = 4, + Obsolete2 = 5 + } } diff --git a/DiscImageChef.Metadata/ChangeLog b/DiscImageChef.Metadata/ChangeLog index b11241aad..ef4f38002 100644 --- a/DiscImageChef.Metadata/ChangeLog +++ b/DiscImageChef.Metadata/ChangeLog @@ -1,3 +1,7 @@ +2016-10-12 Natalia Portillo + + * MediaType.cs: Added support for DDS, DDS-2, DDS-3, DDS-4. + 2016-08-09 Natalia Portillo * DiscImageChef.Metadata.csproj: Bumped version to 3.2.99.2. diff --git a/DiscImageChef.Metadata/MediaType.cs b/DiscImageChef.Metadata/MediaType.cs index e8c7137f5..b9fb4fc81 100644 --- a/DiscImageChef.Metadata/MediaType.cs +++ b/DiscImageChef.Metadata/MediaType.cs @@ -679,6 +679,22 @@ namespace DiscImageChef.Metadata DiscType = "HDD"; DiscSubType = "Priam DataTower"; break; + case CommonTypes.MediaType.DDS1: + DiscType = "DDS"; + DiscSubType = "DDS"; + break; + case CommonTypes.MediaType.DDS2: + DiscType = "DDS"; + DiscSubType = "DDS-2"; + break; + case CommonTypes.MediaType.DDS3: + DiscType = "DDS"; + DiscSubType = "DDS-3"; + break; + case CommonTypes.MediaType.DDS4: + DiscType = "DDS"; + DiscSubType = "DDS-4"; + break; default: DiscType = "Unknown"; DiscSubType = "Unknown";