diff --git a/ChangeLog b/ChangeLog index 6a6a3f275..c04454bfc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-11-01 Natalia Portillo + + * SCSI/MMC/Features.cs: + * DiscImageChef.Decoders.csproj: + Added feature structures from MMC-1. + 2015-10-31 Natalia Portillo * SCSI/Modes.cs: diff --git a/DiscImageChef.Decoders.csproj b/DiscImageChef.Decoders.csproj index 3d6b4c348..2514e0fe9 100644 --- a/DiscImageChef.Decoders.csproj +++ b/DiscImageChef.Decoders.csproj @@ -80,6 +80,7 @@ + diff --git a/SCSI/MMC/Features.cs b/SCSI/MMC/Features.cs new file mode 100644 index 000000000..a0001191c --- /dev/null +++ b/SCSI/MMC/Features.cs @@ -0,0 +1,1170 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : Features.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; + + +namespace DiscImageChef.Decoders.SCSI.MMC +{ + + /// + /// MMC Feature enumeration + /// + public enum FeatureNumber : ushort + { + /// + /// Lists all profiles + /// + ProfileList = 0x0000, + /// + /// Mandatory behaviour + /// + Core = 0x0001, + /// + /// Operational changes + /// + Morphing = 0x0002, + /// + /// Removable medium + /// + Removable = 0x0003, + /// + /// Ability to control write protection status + /// + WriteProtect = 0x0004, + /// + /// Ability to read sectors with random addressing + /// + RandomRead = 0x0010, + /// + /// Reads on OSTA Multi-Read + /// + MultiRead = 0x001D, + /// + /// Able to read CD structures + /// + CDRead = 0x001E, + /// + /// Able to read DVD structures + /// + DVDRead = 0x001F, + /// + /// Ability to write sectors with random addressing + /// + RandomWrite = 0x0020, + /// + /// Ability to sequentially write + /// + IncrementalWrite = 0x0021, + /// + /// Support for media that requires erase before write + /// + SectorErasable = 0x0022, + /// + /// Supports formatting media + /// + Formattable = 0x0023, + /// + /// Ability to provide defect-free space + /// + HardwareDefectMgmt = 0x0024, + /// + /// Supports for write-once media in random order + /// + WriteOnce = 0x0025, + /// + /// Supports for media that shall be written from blocking boundaries + /// + RestrictedOverwrite = 0x0026, + /// + /// Supports high speed CD-RW + /// + CDRWCAV = 0x0027, + /// + /// Read and optionally write MRW + /// + MRW = 0x0028, + /// + /// Ability to control RECOVERED ERROR reporting + /// + EnDefectReport = 0x0029, + /// + /// Ability to recognize, read and optionally write DVD+RW + /// + DVDRWPlus = 0x002A, + /// + /// Ability to read DVD+R + /// + DVDRPlus = 0x002B, + /// + /// Ability to write CD in Track-at-Once + /// + CDTAO = 0x002D, + /// + /// Ability to write CD in Session-at-Once or RAW + /// + CDMastering = 0x002E, + /// + /// Ability to write DVD structures + /// + DVDRWrite = 0x002F, + /// + /// Ability to read DDCD + /// + DDCD = 0x0030, + /// + /// Ability to write DDCD-R + /// + DDCDR = 0x0031, + /// + /// Ability to write DDCD-RW + /// + DDCDRW = 0x0032, + /// + /// Ability to record in layer jump mode + /// + LayerJump = 0x0033, + /// + /// Ability to perform Layer Jump recording on Rigid Restricted Overwrite + /// + LJRigid = 0x0034, + /// + /// Ability to stop the long immediate operation + /// + StopLong = 0x0035, + /// + /// Ability to report CD-RW media sub-types supported for write + /// + CDRWMediaWrite = 0x0037, + /// + /// Logical block overwrite service on BD-R formatted as SRM+POW + /// + BDRPOW = 0x0038, + /// + /// Ability to read DVD+RW DL + /// + DVDRWDLPlus = 0x003A, + /// + /// Ability to read DVD+R DL + /// + DVDRDLPlus = 0x003B, + /// + /// Ability to read BD discs + /// + BDRead = 0x0040, + /// + /// Ability to write BD discs + /// + BDWrite = 0x0041, + /// + /// Timely, Safe Recording + /// + TSR = 0x0042, + /// + /// Ability to read HD DVD + /// + HDDVDRead = 0x0050, + /// + /// Ability to write HD DVD + /// + HDDVDWrite = 0x0051, + /// + /// Ability to write HD DVD-RW fragmented + /// + HDDVDRWFragment = 0x0052, + /// + /// Supports some Hybrid Discs + /// + Hybrid = 0x0080, + /// + /// Host and device directed power management + /// + PowerMgmt = 0x0100, + /// + /// Supports S.M.A.R.T. + /// + SMART = 0x0101, + /// + /// Single machanism multiple disc changer + /// + Changer = 0x0102, + /// + /// Ability to play CD audio to an analogue output + /// + CDAudioExt = 0x0103, + /// + /// Ability to accept new microcode + /// + MicrocodeUpgrade = 0x0104, + /// + /// Ability to respond to all commands within a specific time + /// + Timeout = 0x0105, + /// + /// Supports DVD CSS/CPPM + /// + CSS = 0x0106, + /// + /// Ability to read and write using host requested performance parameters + /// + RTS = 0x0107, + /// + /// Drive has a unique identifier + /// + DriveSerial = 0x0108, + /// + /// Ability to return unique Media Serial Number + /// + MediaSerial = 0x0109, + /// + /// Ability to read and/or write DCBs + /// + DCBs = 0x010A, + /// + /// Supports DVD CPRM + /// + CPRM = 0x010B, + /// + /// Firmware creation date report + /// + FirmwareInfo = 0x010C, + /// + /// Ability to decode and optionally encode AACS + /// + AACS = 0x010D, + /// + /// Ability to perform DVD CSS managed recording + /// + CSSManagedRec = 0x010E, + /// + /// Ability to decode and optionally encode VCPS + /// + VCPS = 0x0110, + /// + /// Supports SecurDisc + /// + SecurDisc = 0x0113, + /// + /// TCG Optical Security Subsystem Class + /// + OSSC = 0x0142 + } + + /// + /// MMC Profile enumeration + /// + public enum ProfileNumber : ushort + { + /// + /// Not to use + /// + Reserved = 0x0000, + /// + /// Non-removable disk profile + /// + NonRemovable = 0x0001, + /// + /// Rewritable with removable media + /// + Removable = 0x0002, + /// + /// Magneto-Optical with sector erase + /// + MOErasable = 0x0003, + /// + /// Optical write once + /// + OpticalWORM = 0x0004, + /// + /// Advance Storage - Magneto-Optical + /// + ASMO = 0x0005, + /// + /// Read-only Compact Disc + /// + CDROM = 0x0008, + /// + /// Write-once Compact Disc + /// + CDR = 0x0009, + /// + /// Re-writable Compact Disc + /// + CDRW = 0x000A, + /// + /// Read-only DVD + /// + DVDROM = 0x0010, + /// + /// Write-once sequentially recorded DVD-R + /// + DVDRSeq = 0x0011, + /// + /// DVD-RAM + /// + DVDRAM = 0x0012, + /// + /// Restricted overwrite DVD-RW + /// + DVDRWRes = 0x0013, + /// + /// Sequential recording DVD-RW + /// + DVDRWSeq = 0x0014, + /// + /// Sequential recording DVD-R DL + /// + DVDRDLSeq = 0x0015, + /// + /// Layer jump recording DVD-R DL + /// + DVDRDLJump = 0x0016, + /// + /// DVD+RW DL + /// + DVDRWDL = 0x0017, + /// + /// DVD-Download + /// + DVDDownload = 0x0018, + /// + /// DVD+RW + /// + DVDRWPlus = 0x001A, + /// + /// DVD+R + /// + DVDRPlus = 0x001B, + /// + /// DDCD-ROM + /// + DDCDROM = 0x0020, + /// + /// DDCD-R + /// + DDCDR = 0x0021, + /// + /// DDCD-RW + /// + DDCDRW = 0x0022, + /// + /// DVD+RW DL + /// + DVDRWDLPlus = 0x002A, + /// + /// DVD+R DL + /// + DVDRDLPlus = 0x002B, + /// + /// BD-ROM + /// + BDROM = 0x0040, + /// + /// BD-R SRM + /// + BDRSeq = 0x0041, + /// + /// BD-R RRM + /// + BDRRdm = 0x0042, + /// + /// BD-RE + /// + BDRE = 0x0043, + /// + /// HD DVD-ROM + /// + HDDVDROM = 0x0050, + /// + /// HD DVD-R + /// + HDDVDR = 0x0051, + /// + /// HD DVD-RAM + /// + HDDVDRAM = 0x0052, + /// + /// HD DVD-RW + /// + HDDVDRW = 0x0053, + /// + /// HD DVD-R DL + /// + HDDVDRDL = 0x0058, + /// + /// HD DVD-RW DL + /// + HDDVDRWDL = 0x005A, + /// + /// Drive does not conform to any profiles + /// + Unconforming = 0xFFFF + } + + public enum PhysicalInterfaces : uint + { + /// + /// Unspecified physical interface + /// + Unspecified = 0, + /// + /// SCSI + /// + SCSI = 1, + /// + /// ATAPI + /// + ATAPI = 2, + /// + /// IEEE-1394/1995 + /// + IEEE1394 = 3, + /// + /// IEEE-1394A + /// + IEEE1394A = 4, + /// + /// Fibre Channel + /// + FC = 5, + /// + /// IEEE-1394B + /// + IEEE1394B = 6, + /// + /// Serial ATAPI + /// + SerialATAPI = 7, + /// + /// USB + /// + USB = 8, + /// + /// Vendor unique + /// + Vendor = 0xFFFF + } + + public struct Profile + { + public ProfileNumber Number; + public bool Current; + } + + /// + /// Profile List Feature (0000h) + /// + public struct Feature_0000 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// All supported profiles + /// + public Profile[] Profiles; + } + + /// + /// Core Feature (0001h) + /// + public struct Feature_0001 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Currently in-use physical interface standard + /// + public PhysicalInterfaces PhysicalInterfaceStandard; + } + + /// + /// Morphing Feature (0002h) + /// + public struct Feature_0002 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Supports asynchronous GET EVENT/STATUS NOTIFICATION + /// + public bool Async; + } + + /// + /// Removable Medium Feature (0003h) + /// + public struct Feature_0003 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Mechanism type + /// + public byte LoadingMechanismType; + /// + /// Device can eject medium + /// + public bool Eject; + /// + /// Device starts in medium ejection/insertion allow + /// + public bool PreventJumper; + /// + /// Medium is currently locked + /// + public bool Lock; + } + + /// + /// Random Readable Feature (0010h) + /// + public struct Feature_0010 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Bytes per logical block + /// + public uint LogicalBlockSize; + /// + /// Number of logical blocks per device readable unit + /// + public ushort Blocking; + /// + /// Read/Write Error Recovery page is present + /// + public bool PP; + } + + /// + /// Multi-Read Feature (001Dh) + /// + public struct Feature_001D + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// CD Read Feature (001Eh) + /// + public struct Feature_001E + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Supports C2 Error Pointers + /// + public bool C2; + /// + /// Can read CD-Text with READ TOC/PMA/ATIP + /// + public bool CDText; + } + + /// + /// DVD Feature (001Fh) + /// + public struct Feature_001F + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// Random Writable Feature (0020h) + /// + public struct Feature_0020 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Last logical block address + /// + public uint LastLBA; + /// + /// Bytes per logical block + /// + public uint LogicalBlockSize; + /// + /// Number of logical blocks per device readable unit + /// + public ushort Blocking; + /// + /// Read/Write Error Recovery page is present + /// + public bool PP; + } + + /// + /// Incremental Streaming Writable Feature (0021h) + /// + public struct Feature_0021 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Bitmask of supported data types + /// + public ushort DataTypeSupported; + /// + /// Logical blocks per link + /// + public byte[] LinkSizes; + } + + /// + /// Sector Erasable Feature (0022h) + /// + public struct Feature_0022 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// Formattable Feature (0023h) + /// + public struct Feature_0023 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// Defect Management Feature (0024h) + /// + public struct Feature_0024 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// Write Once Feature (0025h) + /// + public struct Feature_0025 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Last logical block address + /// + public uint LastLBA; + /// + /// Number of logical blocks per device readable unit + /// + public ushort Blocking; + /// + /// Read/Write Error Recovery page is present + /// + public bool PP; + } + + /// + /// Restricted Overwrite Feature (0026h) + /// + public struct Feature_0026 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// CD Track at Once Feature (002Dh) + /// + public struct Feature_002D + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Can perform test writes + /// + public bool TestWrite; + /// + /// Supports overwriting a TAO track with another + /// + public bool CDRW; + /// + /// Can write R-W subchannels with user provided data + /// + public bool RWSubchannel; + /// + /// Bitmask of supported data types + /// + public ushort DataTypeSupported; + } + + /// + /// CD Mastering (Session at Once) Feature (002Eh) + /// + public struct Feature_002E + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Can write in Session at Once + /// + public bool SAO; + /// + /// Can write multi-session in RAW + /// + public bool RAWMS; + /// + /// Can write in RAW + /// + public bool RAW; + /// + /// Can perform test writes + /// + public bool TestWrite; + /// + /// Can overwrite previously recorded data + /// + public bool CDRW; + /// + /// Can write R-W subchannels with user provided data + /// + public bool RW; + /// + /// Maximum length of a Cue Sheet for Session at Once + /// + public uint MaxCueSheet; + } + + /// + /// DVD-R Write Feature (002Fh) + /// + public struct Feature_002F + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Buffer Under-run protection + /// + public bool BUF; + /// + /// Test write + /// + public bool TestWrite; + } + + /// + /// Power Management Feature (0100h) + /// + public struct Feature_0100 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// Embedded Changer Feature (0102h) + /// + public struct Feature_0102 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Side change capable + /// + public bool SCC; + /// + /// Supports Disc Present + /// + public bool SDP; + } + + /// + /// CD Audio External Play Feature (0103h) + /// + public struct Feature_0103 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// Supports SCAN command + /// + public bool Scan; + /// + /// Separate Channel Mute + /// + public bool SCM; + /// + /// Separate Volume + /// + public bool SV; + } + + /// + /// Microcode Upgrade Feature (0104h) + /// + public struct Feature_0104 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// Time-Out Feature (0105h) + /// + public struct Feature_0105 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// DVD-CSS Feature (0106h) + /// + public struct Feature_0106 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// CSS version + /// + public byte CSSVersion; + } + + /// + /// Real Time Streaming Feature (0107h) + /// + public struct Feature_0107 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + } + + /// + /// Logical Unit serial number (0108h) + /// + public struct Feature_0108 + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + /// + /// LUN serial number + /// + public string Serial; + } + + /// + /// Disc Control Blocks Feature (010Ah) + /// + public struct Feature_010A + { + /// + /// Feature version + /// + public byte Version; + /// + /// Feature is persistent + /// + public bool Persistent; + /// + /// Feature is currently in use + /// + public bool Current; + public uint[] DCBs; + } + + public static class Features + { + } +} +