diff --git a/ChangeLog b/ChangeLog index 38475b2..7480dda 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-11-02 Natalia Portillo + + * DiscImageChef.Decoders.csproj: + * SCSI/DiscStructureCapabilities.cs: + Added READ DISC STRUCTURE. + 2015-11-01 Natalia Portillo * SCSI/MMC/Features.cs: diff --git a/DiscImageChef.Decoders.csproj b/DiscImageChef.Decoders.csproj index 2514e0f..29cc15c 100644 --- a/DiscImageChef.Decoders.csproj +++ b/DiscImageChef.Decoders.csproj @@ -81,6 +81,7 @@ + diff --git a/SCSI/DiscStructureCapabilities.cs b/SCSI/DiscStructureCapabilities.cs new file mode 100644 index 0000000..e7824b4 --- /dev/null +++ b/SCSI/DiscStructureCapabilities.cs @@ -0,0 +1,86 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : DiscStructureCapabilities.cs +// Version : 1.0 +// Author(s) : Natalia Portillo +// +// Component : Component +// +// Revision : $Revision$ +// Last change by : $Author$ +// Date : $Date$ +// +// --[ Description ] ---------------------------------------------------------- +// +// Description +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2011-2015 Claunia.com +// ****************************************************************************/ +// //$Id$ +using System; +using System.Collections.Generic; + +namespace DiscImageChef.Decoders.SCSI +{ + public static class DiscStructureCapabilities + { + public struct Capability + { + /// + /// READ/SEND DISC STRUCTURE format code + /// + public byte FormatCode; + /// + /// Supported in SEND DISC STRUCTURE + /// + public bool SDS; + /// + /// Supported in READ DISC STRUCTURE + /// + public bool RDS; + } + + public static Capability[] Decode(byte[] response) + { + ushort len = (ushort)((response[0] << 8) + response[1]); + + if (len + 2 != response.Length) + return null; + + List caps = new List(); + + uint offset = 4; + + while (offset < response.Length) + { + Capability cap = new Capability(); + cap.FormatCode = response[offset]; + cap.SDS = (response[offset + 1] & 0x80) == 0x80; + cap.RDS = (response[offset + 1] & 0x40) == 0x40; + caps.Add(cap); + offset += 4; + } + + return caps.ToArray(); + } + } +} +