// /*************************************************************************** // Aaru Data Preservation Suite // ---------------------------------------------------------------------------- // // Filename : Images.cs // Author(s) : Natalia Portillo // // Component : Disc image plugins. // // --[ Description ] ---------------------------------------------------------- // // Defines enumerations to be used by disc image plugins. // // --[ License ] -------------------------------------------------------------- // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // ---------------------------------------------------------------------------- // Copyright © 2011-2025 Natalia Portillo // Copyright © 2020-2025 Rebecca Wallander // ****************************************************************************/ // ReSharper disable UnusedMember.Global using System; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; namespace Aaru.CommonTypes.Enums; /// Track (as partitioning element) types. public enum TrackType : byte { /// Audio track Audio = 0, /// Data track (not any of the below defined ones) Data = 1, /// Data track, compact disc mode 1 [Description("MODE 1")] CdMode1 = 2, /// Data track, compact disc mode 2, formless [Description("MODE 2 (Formless)")] CdMode2Formless = 3, /// Data track, compact disc mode 2, form 1 [Description("MODE 2 FORM 1")] CdMode2Form1 = 4, /// Data track, compact disc mode 2, form 2 [Description("MODE 2 FORM 2")] CdMode2Form2 = 5 } /// Type of subchannel in track public enum TrackSubchannelType : byte { /// Track does not has subchannel dumped, or it's not a CD None = 0, /// Subchannel is packed and error corrected Packed = 1, /// Subchannel is interleaved Raw = 2, /// Subchannel is packed and comes interleaved with main channel in same file PackedInterleaved = 3, /// Subchannel is interleaved and comes interleaved with main channel in same file RawInterleaved = 4, /// Only Q subchannel is stored as 16 bytes Q16 = 5, /// Only Q subchannel is stored as 16 bytes and comes interleaved with main channel in same file Q16Interleaved = 6 } /// Metadata present for each sector (aka, "tag"). public enum SectorTagType { /// Apple's Sony GCR sector tags, 12 bytes [Description("Sony GCR sector tags")] AppleSonyTag = 0, /// Sync frame from CD sector, 12 bytes [Description("Sync frame")] CdSectorSync = 1, /// CD sector header, 4 bytes [Description("Sector header")] CdSectorHeader = 2, /// CD mode 2 sector subheader [Description("MODE 2 Subheader")] CdSectorSubHeader = 3, /// CD sector EDC, 4 bytes [Description("Error Detection Code")] CdSectorEdc = 4, /// CD sector ECC P, 172 bytes [Description("Error Correction Code P")] CdSectorEccP = 5, /// CD sector ECC Q, 104 bytes [Description("Error Correction Code Q")] CdSectorEccQ = 6, /// CD sector ECC (P and Q), 276 bytes [Description("Error Correction Code")] CdSectorEcc = 7, /// CD sector subchannel, 96 bytes [Description("Subchannel")] CdSectorSubchannel = 8, /// CD track ISRC, string, 12 bytes [Description("International Standard Recording Code")] CdTrackIsrc = 9, /// CD track text, string, 13 bytes [Description("Track text")] CdTrackText = 10, /// CD track flags, 1 byte [Description("Track flags")] CdTrackFlags = 11, /// DVD sector copyright information [Description("Copyright Management Information")] DvdSectorCmi = 12, /// Floppy address mark (contents depend on underlying floppy format) [Description("Address mark")] FloppyAddressMark = 13, /// DVD sector title key, 5 bytes [Description("Title key")] DvdSectorTitleKey = 14, /// Decrypted DVD sector title key, 5 bytes [Description("Title key (Decrypted)")] DvdTitleKeyDecrypted = 15, /// DVD sector information, 1 bytes [Description("Sector information")] DvdSectorInformation = 16, /// DVD sector number, 3 bytes [Description("Sector number")] DvdSectorNumber = 17, /// DVD sector ID error detection, 2 bytes [Description("ID error detection")] DvdSectorIed = 18, /// DVD sector EDC, 4 bytes [Description("Error Detection Code")] DvdSectorEdc = 19, /// Apple's Profile sector tag, 20 bytes [Description("Profile sector tag")] AppleProfileTag = 20, /// Priam Data Tower sector tag, 24 bytes [Description("Priam Data Tower sector tag")] PriamDataTowerTag = 21 } /// Metadata present for each media. [SuppressMessage("ReSharper", "InconsistentNaming")] public enum MediaTagType { /// CD table of contents [Description("Table of contents")] CD_TOC = 0, /// CD session information [Description("Session information")] CD_SessionInfo = 1, /// CD full table of contents [Description("Full table of contents")] CD_FullTOC = 2, /// CD PMA [Description("Program Memory Area")] CD_PMA = 3, /// CD Address-Time-In-Pregroove [Description("Address-Time-In-Pregroove")] CD_ATIP = 4, /// CD-Text [Description("CD-Text")] CD_TEXT = 5, /// CD Media Catalogue Number [Description("Media Catalogue Number")] CD_MCN = 6, /// DVD/HD DVD Physical Format Information [Description("Physical Format Information")] DVD_PFI = 7, /// DVD Lead-in Copyright Management Information [Description("Lead-in Copyright Management Information")] DVD_CMI = 8, /// DVD disc key [Description("Disc key")] DVD_DiscKey = 9, /// DVD/HD DVD Burst Cutting Area [Description("Burst Cutting Area")] DVD_BCA = 10, /// DVD/HD DVD Lead-in Disc Manufacturer Information [Description("Lead-in Disc Manufacturer Information")] DVD_DMI = 11, /// Media identifier [Description("Media identifier")] DVD_MediaIdentifier = 12, /// Media key block [Description("Media key block")] DVD_MKB = 13, /// DVD-RAM/HD DVD-RAM DDS information [Description("DDS information")] DVDRAM_DDS = 14, /// DVD-RAM/HD DVD-RAM Medium status [Description("Medium status")] DVDRAM_MediumStatus = 15, /// DVD-RAM/HD DVD-RAM Spare area information [Description("Spare area information")] DVDRAM_SpareArea = 16, /// DVD-R/-RW/HD DVD-R RMD in last border-out [Description("RMD in last border-out")] DVDR_RMD = 17, /// Pre-recorded information from DVD-R/-RW lead-in [Description("Pre-recorded information from lead-in")] DVDR_PreRecordedInfo = 18, /// DVD-R/-RW/HD DVD-R media identifier [Description("Media identifier")] DVDR_MediaIdentifier = 19, /// DVD-R/-RW/HD DVD-R physical format information [Description("Physical format information")] DVDR_PFI = 20, /// ADIP information [Description("ADIP information")] DVD_ADIP = 21, /// HD DVD Lead-in copyright protection information [Description("Lead-in copyright protection information")] HDDVD_CPI = 22, /// HD DVD-R Medium Status [Description("Medium Status")] HDDVD_MediumStatus = 23, /// DVD+/-R DL Layer capacity [Description("Layer capacity")] DVDDL_LayerCapacity = 24, /// DVD-R DL Middle Zone start address [Description("Middle Zone start address")] DVDDL_MiddleZoneAddress = 25, /// DVD-R DL Jump Interval Size [Description("Jump Interval Size")] DVDDL_JumpIntervalSize = 26, /// DVD-R DL Start LBA of the manual layer jump [Description("Start LBA of the manual layer jump")] DVDDL_ManualLayerJumpLBA = 27, /// Blu-ray Disc Information [Description("Disc Information")] BD_DI = 28, /// Blu-ray Burst Cutting Area [Description("Burst Cutting Area")] BD_BCA = 29, /// Blu-ray Disc Definition Structure [Description("Disc Definition Structure")] BD_DDS = 30, /// Blu-ray Cartridge Status [Description("Cartridge Status")] BD_CartridgeStatus = 31, /// Blu-ray Status of Spare Area [Description("Status of Spare Area")] BD_SpareArea = 32, /// AACS volume identifier [Description("Volume identifier")] AACS_VolumeIdentifier = 33, /// AACS pre-recorded media serial number [Description("Pre-recorded media serial number")] AACS_SerialNumber = 34, /// AACS media identifier [Description("Media identifier")] AACS_MediaIdentifier = 35, /// Lead-in AACS media key block [Description("Lead-in media key block")] AACS_MKB = 36, /// AACS data keys [Description("AACS Data keys")] AACS_DataKeys = 37, /// LBA extents flagged for bus encryption by AACS [Description("LBA extents flagged for bus encryption")] AACS_LBAExtents = 38, /// CPRM media key block in Lead-in [Description("CPRM media key block in Lead-in")] AACS_CPRM_MKB = 39, /// Recognized layer formats in hybrid discs [Description("Recognized layer formats in hybrid discs")] Hybrid_RecognizedLayers = 40, /// Disc write protection status [Description("Write protection status")] MMC_WriteProtection = 41, /// Disc standard information [Description("Standard information")] MMC_DiscInformation = 42, /// Disc track resources information [Description("Track resources information")] MMC_TrackResourcesInformation = 43, /// BD-R Pseudo-overwrite information [Description("Pseudo-overwrite information")] MMC_POWResourcesInformation = 44, /// SCSI INQUIRY response [Description("INQUIRY response")] SCSI_INQUIRY = 45, /// SCSI MODE PAGE 2Ah [Description("MODE PAGE 2Ah")] SCSI_MODEPAGE_2A = 46, /// ATA IDENTIFY DEVICE response [Description("IDENTIFY DEVICE response")] ATA_IDENTIFY = 47, /// ATA IDENTIFY PACKET DEVICE response [Description("IDENTIFY PACKET DEVICE response")] ATAPI_IDENTIFY = 48, /// PCMCIA/CardBus Card Information Structure [Description("Card Information Structure")] PCMCIA_CIS = 49, /// SecureDigital CID [Description("SD Card Information Data")] SD_CID = 50, /// SecureDigital CSD [Description("SD Card Specific Data")] SD_CSD = 51, /// SecureDigital SCR [Description("SD Specific Conditions Register")] SD_SCR = 52, /// SecureDigital OCR [Description("Operating Conditions Register")] SD_OCR = 53, /// MultiMediaCard CID [Description("MMC Card Information Data")] MMC_CID = 54, /// MultiMediaCard CSD [Description("MMC Card Specific Data")] MMC_CSD = 55, /// MultiMediaCard OCR [Description("MMC Operating Conditions Register")] MMC_OCR = 56, /// MultiMediaCard Extended CSD [Description("MMC Extended CSD")] MMC_ExtendedCSD = 57, /// Xbox Security Sector [Description("Xbox Security Sector")] Xbox_SecuritySector = 58, /// /// On floppy disks, data in last cylinder usually in a different format that contains duplication or /// manufacturing information /// [Description("Lead-Out")] Floppy_LeadOut = 59, /// DVD Disc Control Blocks [Description("Disc Control Blocks")] DCB = 60, /// Compact Disc First Track Pregap [Description("First Track Pregap")] CD_FirstTrackPregap = 61, /// Compact Disc Lead-out [Description("Lead-out")] CD_LeadOut = 62, /// SCSI MODE SENSE (6) [Description("MODE SENSE (6)")] SCSI_MODESENSE_6 = 63, /// SCSI MODE SENSE (10) [Description("MODE SENSE (10)")] SCSI_MODESENSE_10 = 64, /// USB descriptors [Description("USB descriptors")] USB_Descriptors = 65, /// XGD unlocked DMI [Description("Unlocked DMI")] Xbox_DMI = 66, /// XDG unlocked PFI [Description("Unlocked PFI")] Xbox_PFI = 67, /// Compact Disc Lead-in [Description("Lead-in")] CD_LeadIn = 68, /// 8 bytes response that seems to define type of MiniDisc [Description("MiniDisc type definition")] MiniDiscType = 69, /// 4 bytes response to vendor command D5h [Description("Vendor command D5h response")] MiniDiscD5 = 70, /// User TOC, contains fragments, track names, and can be from 1 to 3 sectors of 2336 bytes [Description("MD-DATA User TOC")] MiniDiscUTOC = 71, /// Not entirely clear kind of TOC that only appears on MD-DATA discs [Description("MD-DATA DTOC")] MiniDiscDTOC = 72, /// Decrypted DVD disc key [Description("Disc key (Decrypted)")] DVD_DiscKey_Decrypted = 73, /// Physical Format Information for the 2nd layer of dual-layer DVDs [Description("Physical Format Information (2nd Layer)")] DVD_PFI_2ndLayer = 74 } /// Enumeration of media types defined in metadata public enum MetadataMediaType : byte { /// Purely optical discs OpticalDisc = 0, /// Media that is physically block-based or abstracted like that BlockMedia = 1, /// Media that can be accessed by-byte or by-bit, like chips LinearMedia = 2, /// Media that can only store data when it is modulated to audio AudioMedia = 3 } /// CD flags bitmask [Flags] public enum CdFlags : byte { /// Track is quadraphonic. FourChannel = 0x08, /// Track is non-audio (data). DataTrack = 0x04, /// Track is copy protected. CopyPermitted = 0x02, /// Track has pre-emphasis. PreEmphasis = 0x01 } /// Status of a requested floppy sector [Flags] public enum FloppySectorStatus : byte { /// Both address mark and data checksums are correct. Correct = 0x01, /// Data checksum is incorrect. DataError = 0x02, /// Address mark checksum is incorrect. AddressMarkError = 0x04, /// There is another sector in the same track/head with same sector id. Duplicated = 0x08, /// Sector data section is not magnetized. Demagnetized = 0x10, /// Sector data section has a physically visible hole. Hole = 0x20, /// There is no address mark containing the requested sector id in the track/head. NotFound = 0x40 } /// Types of floppy disks public enum FloppyTypes : byte { /// 8" floppy Floppy, /// 5.25" floppy MiniFloppy, /// 3.5" floppy MicroFloppy, /// 3" floppy CompactFloppy, /// 5.25" twiggy FileWare, /// 2.5" quickdisk QuickDisk } /// Enumeration of floppy densities public enum FloppyDensities : byte { /// Standard coercivity (about 300Oe as found in 8" and 5.25"-double-density disks). Standard, /// Double density coercivity (about 600Oe as found in 5.25" HD and 3.5" DD disks). Double, /// High density coercivity (about 700Oe as found in 3.5" HD disks). High, /// Extended density coercivity (about 750Oe as found in 3.5" ED disks). Extended } /// Capabilities for optical media image formats [Flags] public enum OpticalImageCapabilities : ulong { /// Can store Red Book audio tracks? CanStoreAudioTracks = 0x01, /// Can store CD-V analogue video tracks? CanStoreVideoTracks = 0x02, /// Can store Yellow Book data tracks? CanStoreDataTracks = 0x04, /// Can store pregaps without needing to interpret the subchannel? CanStorePregaps = 0x08, /// Can store indexes without needing to interpret the subchannel? CanStoreIndexes = 0x10, /// Can store raw P to W subchannel data? CanStoreSubchannelRw = 0x20, /// Can store more than one session? CanStoreSessions = 0x40, /// Can store track ISRCs without needing to interpret the subchannel? CanStoreIsrc = 0x80, /// Can store Lead-In's CD-TEXT? CanStoreCdText = 0x100, /// Can store the MCN without needing to interpret the subchannel? CanStoreMcn = 0x200, /// Can store the whole 2352 bytes of a sector? CanStoreRawData = 0x400, // TODO: Implement /// Can store scrambled data? CanStoreScrambledData = 0x800, /// Can store only the user area of a sector (2048, 2324, etc)? CanStoreCookedData = 0x1000, /// Can store more than 1 track? CanStoreMultipleTracks = 0x2000, /// Can store more than 1 session in media that is not CD based (DVD et al)? CanStoreNotCdSessions = 0x4000, /// Can store more than 1 track in media that is not CD based (DVD et al)? CanStoreNotCdTracks = 0x8000, /// Can store hidden tracks with a type different from track 1? CanStoreHiddenTracks = 0x10000, /// Can store negative sectors (sectors before LBA 0)? CanStoreNegativeSectors = 0x20000, /// Can store overflow sectors (sectors after media reported size)? CanStoreOverflowSectors = 0x40000 } /// Enumeration of linear memory device types [SuppressMessage("ReSharper", "InconsistentNaming")] public enum LinearMemoryType { /// Unknown device type Unknown = 0, /// Read-only memory ROM = 1, /// Read-write memory, power-off persistent, used to save data SaveRAM = 2, /// Read-write volatile memory WorkRAM = 3, /// NOR flash memory NOR = 4, /// NAND flash memory NAND = 5, /// Memory mapper device Mapper = 6, /// Processor, CPU, DSP, etc Processor = 7, /// Programmable Array Logic PAL = 8, /// Generic Array Logic GAL = 9, /// Electronically Erasable Programmable Read Only Memory EEPROM = 10, /// Read-only memory, character CharacterROM = 11, /// Read-write volatile memory for character CharacterRAM = 12, /// Trainer, or hack Trainer = 13 }