diff --git a/ChangeLog b/ChangeLog index 28a56ba..e12c587 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-10-19 Natalia Portillo + + * SCSI/EVPD.cs: + * DiscImageChef.Decoders.csproj: + Implemented SCSI VPDs 0x00 to 0x80. + 2015-10-19 Natalia Portillo * ATA/Identify.cs: diff --git a/DiscImageChef.Decoders.csproj b/DiscImageChef.Decoders.csproj index 35bc740..3dda09b 100644 --- a/DiscImageChef.Decoders.csproj +++ b/DiscImageChef.Decoders.csproj @@ -78,6 +78,7 @@ + diff --git a/SCSI/EVPD.cs b/SCSI/EVPD.cs new file mode 100644 index 0000000..aec85cb --- /dev/null +++ b/SCSI/EVPD.cs @@ -0,0 +1,115 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : EVPD.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 DiscImageChef; + +namespace DiscImageChef.Decoders.SCSI +{ + public static class EVPD + { + /// + /// Decodes VPD page 0x00: Supported VPD pages + /// + /// A byte array containing all supported VPD pages. + /// Page 0x00. + public static byte[] DecodePage00(byte[] page) + { + if (page == null) + return null; + + if (page[1] != 0) + return null; + + if (page.Length != page[3] + 4) + return null; + + byte[] decoded = new byte[page.Length - 4]; + + Array.Copy(page, 4, decoded, 0, page.Length - 4); + + return decoded; + } + + /// + /// Decides VPD pages 0x01 to 0x7F: ASCII Information + /// + /// An ASCII string with the contents of the page. + /// Page 0x01-0x7F. + public static string DecodeASCIIPage(byte[] page) + { + if (page == null) + return null; + + if (page[1] == 0 || page[1] > 0x7F) + return null; + + if (page.Length != page[3] + 4) + return null; + + byte[] ascii = new byte[page[4]]; + + Array.Copy(page, 5, ascii, 0, page[4]); + + return StringHandlers.CToString(ascii); + } + + /// + /// Decodes VPD page 0x80: Unit Serial Number + /// + /// The unit serial number. + /// Page 0x80. + public static string DecodePage80(byte[] page) + { + if (page == null) + return null; + + if (page[1] != 0x80) + return null; + + if (page.Length != page[3] + 4) + return null; + + byte[] ascii = new byte[page.Length - 4]; + + Array.Copy(page, 4, ascii, 0, page.Length - 4); + + return StringHandlers.CToString(ascii); + } + } +} +