Files
Aaru/Aaru.Decoders/ATA/Identify.cs

2341 lines
111 KiB
C#
Raw Normal View History

2017-05-19 20:28:49 +01:00
// /***************************************************************************
2020-02-27 12:31:23 +00:00
// Aaru Data Preservation Suite
// ----------------------------------------------------------------------------
//
* LICENSE.MIT: * LICENSE.LGPL: Added LICENSE files for LGPL and MIT licenses. * DiscImageChef.Devices/Enums.cs: * DiscImageChef.Partitions/MBR.cs: * DiscImageChef.Partitions/RDB.cs: * DiscImageChef.DiscImages/GDI.cs: * DiscImageChef.Partitions/Sun.cs: * DiscImageChef.DiscImages/VHD.cs: * DiscImageChef.Partitions/GPT.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Partitions/NeXT.cs: * DiscImageChef.Devices/Command.cs: * DiscImageChef.DiscImages/Nero.cs: * DiscImageChef.Decoders/CD/PMA.cs: * DiscImageChef.Decoders/CD/TOC.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Helpers/PrintHex.cs: * DiscImageChef.Helpers/Swapping.cs: * DiscImageChef.Decoders/DVD/PRI.cs: * DiscImageChef.Decoders/DVD/DMI.cs: * DiscImageChef.Decoders/DVD/DDS.cs: * DiscImageChef.Decoders/DVD/RMD.cs: * DiscImageChef.Decoders/DVD/UDI.cs: * DiscImageChef.Partitions/Atari.cs: * DiscImageChef.Decoders/DVD/BCA.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Decoders/DVD/PFI.cs: * DiscImageChef.Decoders/CD/ATIP.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.DiscImages/CDRWin.cs: * DiscImageChef.DiscImages/CDRDAO.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef.Decoders/Xbox/DMI.cs: * DiscImageChef.Helpers/ArrayFill.cs: * DiscImageChef.Settings/Settings.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Decoders/DVD/CPRM.cs: * DiscImageChef.Decoders/DVD/ADIP.cs: * DiscImageChef.Decoders/CD/Enums.cs: * DiscImageChef.Decoders/DVD/AACS.cs: * DiscImageChef.Decoders/SCSI/EVPD.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Console/DicConsole.cs: * DiscImageChef.Decoders/DVD/Spare.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Decoders/DVD/Enums.cs: * DiscImageChef.Filesystems/Symbian.cs: * DiscImageChef.Decoders/SCSI/Types.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.DiscImages/TeleDisk.cs: * DiscImageChef.Decoders/SCSI/Sense.cs: * DiscImageChef.Decoders/CD/FullTOC.cs: * DiscImageChef.Decoders/Blu-ray/DI.cs: * DiscImageChef.Decoders/ATA/Errors.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Devices/Linux/Enums.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/Structs.cs: * DiscImageChef.DiscImages/Apple2MG.cs: * DiscImageChef.Decoders/SCSI/Modes.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.Partitions/AppleMap.cs: * DiscImageChef.Decoders/Floppy/ISO.cs: * DiscImageChef.Decoders/DVD/Layers.cs: * DiscImageChef.Decoders/CD/Session.cs: * DiscImageChef.Decoders/SCSI/Enums.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef.Helpers/DateHandlers.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.DiscImages/ImageInfo.cs: * DiscImageChef.Checksums/MD5Context.cs: * DiscImageChef.Devices/Linux/Extern.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Helpers/ArrayIsEmpty.cs: * DiscImageChef.Decoders/Blu-ray/BCA.cs: * DiscImageChef.Decoders/Blu-ray/DDS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Decoders/ATA/Identify.cs: * DiscImageChef.Devices/Linux/Command.cs: * DiscImageChef.Devices/FreeBSD/Enums.cs: * DiscImageChef.Decoders/SCSI/Inquiry.cs: * DiscImageChef.Metadata/DeviceReport.cs: * DiscImageChef.Decoders/Floppy/Amiga.cs: * DiscImageChef.Devices/Linux/Structs.cs: * DiscImageChef.Devices/Windows/Enums.cs: * DiscImageChef.Decoders/DVD/CSS&CPRM.cs: * DiscImageChef.Checksums/SHA1Context.cs: * DiscImageChef.DiscImages/DiskCopy42.cs: * DiscImageChef.Partitions/PartPlugin.cs: * DiscImageChef.CommonTypes/Partition.cs: * DiscImageChef.Decoders/Floppy/Enums.cs: * DiscImageChef.CommonTypes/MediaType.cs: * DiscImageChef.Decoders/Floppy/Apple2.cs: * DiscImageChef.Devices/Windows/Extern.cs: * DiscImageChef.Decoders/SCSI/MMC/CPRM.cs: * DiscImageChef.Helpers/StringHandlers.cs: * DiscImageChef.DiscImages/ImagePlugin.cs: * DiscImageChef.Checksums/CRC64Context.cs: * DiscImageChef.Checksums/CRC32Context.cs: * DiscImageChef.DiscImages/ZZZRawImage.cs: * DiscImageChef.Checksums/CRC16Context.cs: * DiscImageChef.Filesystems/LisaFS/Dir.cs: * DiscImageChef.Decoders/DVD/Cartridge.cs: * DiscImageChef.Decoders/Blu-ray/Spare.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Decoders/SCSI/MMC/AACS.cs: * DiscImageChef.Devices/FreeBSD/Extern.cs: * DiscImageChef.Devices/Device/Commands.cs: * DiscImageChef.Checksums/SHA384Context.cs: * DiscImageChef.Devices/FreeBSD/Command.cs: * DiscImageChef.Checksums/SHA512Context.cs: * DiscImageChef.Decoders/SCSI/MMC/Enums.cs: * DiscImageChef.Devices/Windows/Command.cs: * DiscImageChef.Devices/FreeBSD/Structs.cs: * DiscImageChef.Devices/Windows/Structs.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Checksums/SHA256Context.cs: * DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: * DiscImageChef.Filesystems/LisaFS/Xattr.cs: * DiscImageChef.Checksums/Adler32Context.cs: * DiscImageChef.Decoders/Floppy/System34.cs: * DiscImageChef.Checksums/SpamSumContext.cs: * DiscImageChef.Decoders/SCSI/MMC/Hybrid.cs: * DiscImageChef.Devices/Device/Variables.cs: * DiscImageChef.Filesystems/LisaFS/Consts.cs: * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: * DiscImageChef.Decoders/Floppy/Commodore.cs: * DiscImageChef.Checksums/FletcherContext.cs: * DiscImageChef.Filesystems/LisaFS/Extent.cs: * DiscImageChef.Devices/Device/Destructor.cs: * DiscImageChef.Decoders/Floppy/AppleSony.cs: * DiscImageChef.Filesystems/LisaFS/Structs.cs: * DiscImageChef.Decoders/SCSI/VendorString.cs: * DiscImageChef.Decoders/SCSI/MMC/Features.cs: * DiscImageChef.Devices/Device/Constructor.cs: * DiscImageChef.Checksums/RIPEMD160Context.cs: * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: * DiscImageChef.Decoders/Blu-ray/Cartridge.cs: * DiscImageChef.Decoders/Floppy/System3740.cs: * DiscImageChef.Filesystems/LisaFS/Encoding.cs: * DiscImageChef.Decoders/SCSI/ModesEncoders.cs: * DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs: * DiscImageChef.Helpers/BigEndianBitConverter.cs: * DiscImageChef.Decoders/Floppy/Perpendicular.cs: * DiscImageChef.Decoders/SCSI/SSC/BlockLimits.cs: * DiscImageChef.Decoders/SCSI/MMC/WriteProtect.cs: * DiscImageChef.Devices/Device/ScsiCommands/HP.cs: * DiscImageChef.Devices/Device/AtaCommands/Cfa.cs: * DiscImageChef.Devices/Device/ScsiCommands/NEC.cs: * DiscImageChef.Helpers/EndianAwareBinaryReader.cs: * DiscImageChef.Devices/Device/ScsiCommands/MMC.cs: * DiscImageChef.Devices/Device/AtaCommands/MCPT.cs: * DiscImageChef.Devices/Device/ScsiCommands/SSC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SPC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SMC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SBC.cs: * DiscImageChef.Metadata/Properties/AssemblyInfo.cs: * DiscImageChef.Devices/Device/AtaCommands/Atapi.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata28.cs: * DiscImageChef.Devices/Device/AtaCommands/Smart.cs: * DiscImageChef.Decoders/SCSI/SSC/DensitySupport.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata48.cs: * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: * DiscImageChef.Devices/Device/AtaCommands/AtaCHS.cs: * DiscImageChef.Devices/Device/ScsiCommands/SyQuest.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plextor.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plasmon.cs: * DiscImageChef.Devices/Device/ScsiCommands/Pioneer.cs: * DiscImageChef.Devices/Device/ScsiCommands/Adaptec.cs: * DiscImageChef.Devices/Device/ScsiCommands/Fujitsu.cs: * DiscImageChef.Devices/Device/ScsiCommands/HL-DT-ST.cs: * DiscImageChef.Devices/Device/ScsiCommands/Certance.cs: * DiscImageChef.Decoders/SCSI/DiscStructureCapabilities.cs: * DiscImageChef.Devices/Device/ScsiCommands/ArchiveCorp.cs: Relicensed as LGPL. Updated standard header. * DiscImageChef/Main.cs: * DiscImageChef/Plugins.cs: * DiscImageChef/Options.cs: * DiscImageChef/Commands/Ls.cs: * DiscImageChef/Core/IBGLog.cs: * DiscImageChef/Core/MHDDLog.cs: * DiscImageChef/AssemblyInfo.cs: * DiscImageChef/Core/Checksum.cs: * DiscImageChef/Commands/Decode.cs: * DiscImageChef/Core/Statistics.cs: * DiscImageChef/Commands/Verify.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef/Commands/Entropy.cs: * DiscImageChef/Commands/Compare.cs: * DiscImageChef.Interop/DetectOS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef/Commands/Commands.cs: * DiscImageChef/Commands/PrintHex.cs: * DiscImageChef/Commands/Checksum.cs: * DiscImageChef/DetectImageFormat.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef/Commands/Benchmark.cs: * DiscImageChef/Commands/Configure.cs: * DiscImageChef/Commands/MediaInfo.cs: * DiscImageChef.Interop/PlatformID.cs: * DiscImageChef/Commands/MediaScan.cs: * DiscImageChef/Commands/Statistics.cs: * DiscImageChef/Commands/DeviceInfo.cs: * DiscImageChef.Checksums/ReedSolomon.cs: * DiscImageChef/Commands/DeviceReport.cs: * DiscImageChef/Commands/ExtractFiles.cs: * DiscImageChef.Checksums/CDChecksums.cs: * DiscImageChef/Commands/CreateSidecar.cs: Updated standard header. * DiscImageChef.Checksums/DiscImageChef.Checksums.csproj: Relicensed project as LGPL. Updated standard header. Embed license as resource. * DiscImageChef.Console/DiscImageChef.Console.csproj: * DiscImageChef.Devices/DiscImageChef.Devices.csproj: * DiscImageChef.Helpers/DiscImageChef.Helpers.csproj: * DiscImageChef.Settings/DiscImageChef.Settings.csproj: * DiscImageChef.Decoders/DiscImageChef.Decoders.csproj: * DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: * DiscImageChef.Partitions/DiscImageChef.Partitions.csproj: * DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj: * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: * DiscImageChef.CommonTypes/DiscImageChef.CommonTypes.csproj: Relicensed as LGPL. Updated standard header. Embed license as resource. * DiscImageChef/DiscImageChef.csproj: * DiscImageChef.Interop/DiscImageChef.Interop.csproj: Updated standard header. Embed license as resource.
2016-07-28 18:13:49 +01:00
// Filename : Identify.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
* LICENSE.MIT: * LICENSE.LGPL: Added LICENSE files for LGPL and MIT licenses. * DiscImageChef.Devices/Enums.cs: * DiscImageChef.Partitions/MBR.cs: * DiscImageChef.Partitions/RDB.cs: * DiscImageChef.DiscImages/GDI.cs: * DiscImageChef.Partitions/Sun.cs: * DiscImageChef.DiscImages/VHD.cs: * DiscImageChef.Partitions/GPT.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Partitions/NeXT.cs: * DiscImageChef.Devices/Command.cs: * DiscImageChef.DiscImages/Nero.cs: * DiscImageChef.Decoders/CD/PMA.cs: * DiscImageChef.Decoders/CD/TOC.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Helpers/PrintHex.cs: * DiscImageChef.Helpers/Swapping.cs: * DiscImageChef.Decoders/DVD/PRI.cs: * DiscImageChef.Decoders/DVD/DMI.cs: * DiscImageChef.Decoders/DVD/DDS.cs: * DiscImageChef.Decoders/DVD/RMD.cs: * DiscImageChef.Decoders/DVD/UDI.cs: * DiscImageChef.Partitions/Atari.cs: * DiscImageChef.Decoders/DVD/BCA.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Decoders/DVD/PFI.cs: * DiscImageChef.Decoders/CD/ATIP.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.DiscImages/CDRWin.cs: * DiscImageChef.DiscImages/CDRDAO.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef.Decoders/Xbox/DMI.cs: * DiscImageChef.Helpers/ArrayFill.cs: * DiscImageChef.Settings/Settings.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Decoders/DVD/CPRM.cs: * DiscImageChef.Decoders/DVD/ADIP.cs: * DiscImageChef.Decoders/CD/Enums.cs: * DiscImageChef.Decoders/DVD/AACS.cs: * DiscImageChef.Decoders/SCSI/EVPD.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Console/DicConsole.cs: * DiscImageChef.Decoders/DVD/Spare.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Decoders/DVD/Enums.cs: * DiscImageChef.Filesystems/Symbian.cs: * DiscImageChef.Decoders/SCSI/Types.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.DiscImages/TeleDisk.cs: * DiscImageChef.Decoders/SCSI/Sense.cs: * DiscImageChef.Decoders/CD/FullTOC.cs: * DiscImageChef.Decoders/Blu-ray/DI.cs: * DiscImageChef.Decoders/ATA/Errors.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Devices/Linux/Enums.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/Structs.cs: * DiscImageChef.DiscImages/Apple2MG.cs: * DiscImageChef.Decoders/SCSI/Modes.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.Partitions/AppleMap.cs: * DiscImageChef.Decoders/Floppy/ISO.cs: * DiscImageChef.Decoders/DVD/Layers.cs: * DiscImageChef.Decoders/CD/Session.cs: * DiscImageChef.Decoders/SCSI/Enums.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef.Helpers/DateHandlers.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.DiscImages/ImageInfo.cs: * DiscImageChef.Checksums/MD5Context.cs: * DiscImageChef.Devices/Linux/Extern.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Helpers/ArrayIsEmpty.cs: * DiscImageChef.Decoders/Blu-ray/BCA.cs: * DiscImageChef.Decoders/Blu-ray/DDS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Decoders/ATA/Identify.cs: * DiscImageChef.Devices/Linux/Command.cs: * DiscImageChef.Devices/FreeBSD/Enums.cs: * DiscImageChef.Decoders/SCSI/Inquiry.cs: * DiscImageChef.Metadata/DeviceReport.cs: * DiscImageChef.Decoders/Floppy/Amiga.cs: * DiscImageChef.Devices/Linux/Structs.cs: * DiscImageChef.Devices/Windows/Enums.cs: * DiscImageChef.Decoders/DVD/CSS&CPRM.cs: * DiscImageChef.Checksums/SHA1Context.cs: * DiscImageChef.DiscImages/DiskCopy42.cs: * DiscImageChef.Partitions/PartPlugin.cs: * DiscImageChef.CommonTypes/Partition.cs: * DiscImageChef.Decoders/Floppy/Enums.cs: * DiscImageChef.CommonTypes/MediaType.cs: * DiscImageChef.Decoders/Floppy/Apple2.cs: * DiscImageChef.Devices/Windows/Extern.cs: * DiscImageChef.Decoders/SCSI/MMC/CPRM.cs: * DiscImageChef.Helpers/StringHandlers.cs: * DiscImageChef.DiscImages/ImagePlugin.cs: * DiscImageChef.Checksums/CRC64Context.cs: * DiscImageChef.Checksums/CRC32Context.cs: * DiscImageChef.DiscImages/ZZZRawImage.cs: * DiscImageChef.Checksums/CRC16Context.cs: * DiscImageChef.Filesystems/LisaFS/Dir.cs: * DiscImageChef.Decoders/DVD/Cartridge.cs: * DiscImageChef.Decoders/Blu-ray/Spare.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Decoders/SCSI/MMC/AACS.cs: * DiscImageChef.Devices/FreeBSD/Extern.cs: * DiscImageChef.Devices/Device/Commands.cs: * DiscImageChef.Checksums/SHA384Context.cs: * DiscImageChef.Devices/FreeBSD/Command.cs: * DiscImageChef.Checksums/SHA512Context.cs: * DiscImageChef.Decoders/SCSI/MMC/Enums.cs: * DiscImageChef.Devices/Windows/Command.cs: * DiscImageChef.Devices/FreeBSD/Structs.cs: * DiscImageChef.Devices/Windows/Structs.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Checksums/SHA256Context.cs: * DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: * DiscImageChef.Filesystems/LisaFS/Xattr.cs: * DiscImageChef.Checksums/Adler32Context.cs: * DiscImageChef.Decoders/Floppy/System34.cs: * DiscImageChef.Checksums/SpamSumContext.cs: * DiscImageChef.Decoders/SCSI/MMC/Hybrid.cs: * DiscImageChef.Devices/Device/Variables.cs: * DiscImageChef.Filesystems/LisaFS/Consts.cs: * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: * DiscImageChef.Decoders/Floppy/Commodore.cs: * DiscImageChef.Checksums/FletcherContext.cs: * DiscImageChef.Filesystems/LisaFS/Extent.cs: * DiscImageChef.Devices/Device/Destructor.cs: * DiscImageChef.Decoders/Floppy/AppleSony.cs: * DiscImageChef.Filesystems/LisaFS/Structs.cs: * DiscImageChef.Decoders/SCSI/VendorString.cs: * DiscImageChef.Decoders/SCSI/MMC/Features.cs: * DiscImageChef.Devices/Device/Constructor.cs: * DiscImageChef.Checksums/RIPEMD160Context.cs: * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: * DiscImageChef.Decoders/Blu-ray/Cartridge.cs: * DiscImageChef.Decoders/Floppy/System3740.cs: * DiscImageChef.Filesystems/LisaFS/Encoding.cs: * DiscImageChef.Decoders/SCSI/ModesEncoders.cs: * DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs: * DiscImageChef.Helpers/BigEndianBitConverter.cs: * DiscImageChef.Decoders/Floppy/Perpendicular.cs: * DiscImageChef.Decoders/SCSI/SSC/BlockLimits.cs: * DiscImageChef.Decoders/SCSI/MMC/WriteProtect.cs: * DiscImageChef.Devices/Device/ScsiCommands/HP.cs: * DiscImageChef.Devices/Device/AtaCommands/Cfa.cs: * DiscImageChef.Devices/Device/ScsiCommands/NEC.cs: * DiscImageChef.Helpers/EndianAwareBinaryReader.cs: * DiscImageChef.Devices/Device/ScsiCommands/MMC.cs: * DiscImageChef.Devices/Device/AtaCommands/MCPT.cs: * DiscImageChef.Devices/Device/ScsiCommands/SSC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SPC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SMC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SBC.cs: * DiscImageChef.Metadata/Properties/AssemblyInfo.cs: * DiscImageChef.Devices/Device/AtaCommands/Atapi.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata28.cs: * DiscImageChef.Devices/Device/AtaCommands/Smart.cs: * DiscImageChef.Decoders/SCSI/SSC/DensitySupport.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata48.cs: * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: * DiscImageChef.Devices/Device/AtaCommands/AtaCHS.cs: * DiscImageChef.Devices/Device/ScsiCommands/SyQuest.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plextor.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plasmon.cs: * DiscImageChef.Devices/Device/ScsiCommands/Pioneer.cs: * DiscImageChef.Devices/Device/ScsiCommands/Adaptec.cs: * DiscImageChef.Devices/Device/ScsiCommands/Fujitsu.cs: * DiscImageChef.Devices/Device/ScsiCommands/HL-DT-ST.cs: * DiscImageChef.Devices/Device/ScsiCommands/Certance.cs: * DiscImageChef.Decoders/SCSI/DiscStructureCapabilities.cs: * DiscImageChef.Devices/Device/ScsiCommands/ArchiveCorp.cs: Relicensed as LGPL. Updated standard header. * DiscImageChef/Main.cs: * DiscImageChef/Plugins.cs: * DiscImageChef/Options.cs: * DiscImageChef/Commands/Ls.cs: * DiscImageChef/Core/IBGLog.cs: * DiscImageChef/Core/MHDDLog.cs: * DiscImageChef/AssemblyInfo.cs: * DiscImageChef/Core/Checksum.cs: * DiscImageChef/Commands/Decode.cs: * DiscImageChef/Core/Statistics.cs: * DiscImageChef/Commands/Verify.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef/Commands/Entropy.cs: * DiscImageChef/Commands/Compare.cs: * DiscImageChef.Interop/DetectOS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef/Commands/Commands.cs: * DiscImageChef/Commands/PrintHex.cs: * DiscImageChef/Commands/Checksum.cs: * DiscImageChef/DetectImageFormat.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef/Commands/Benchmark.cs: * DiscImageChef/Commands/Configure.cs: * DiscImageChef/Commands/MediaInfo.cs: * DiscImageChef.Interop/PlatformID.cs: * DiscImageChef/Commands/MediaScan.cs: * DiscImageChef/Commands/Statistics.cs: * DiscImageChef/Commands/DeviceInfo.cs: * DiscImageChef.Checksums/ReedSolomon.cs: * DiscImageChef/Commands/DeviceReport.cs: * DiscImageChef/Commands/ExtractFiles.cs: * DiscImageChef.Checksums/CDChecksums.cs: * DiscImageChef/Commands/CreateSidecar.cs: Updated standard header. * DiscImageChef.Checksums/DiscImageChef.Checksums.csproj: Relicensed project as LGPL. Updated standard header. Embed license as resource. * DiscImageChef.Console/DiscImageChef.Console.csproj: * DiscImageChef.Devices/DiscImageChef.Devices.csproj: * DiscImageChef.Helpers/DiscImageChef.Helpers.csproj: * DiscImageChef.Settings/DiscImageChef.Settings.csproj: * DiscImageChef.Decoders/DiscImageChef.Decoders.csproj: * DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: * DiscImageChef.Partitions/DiscImageChef.Partitions.csproj: * DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj: * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: * DiscImageChef.CommonTypes/DiscImageChef.CommonTypes.csproj: Relicensed as LGPL. Updated standard header. Embed license as resource. * DiscImageChef/DiscImageChef.csproj: * DiscImageChef.Interop/DiscImageChef.Interop.csproj: Updated standard header. Embed license as resource.
2016-07-28 18:13:49 +01:00
// Component : Device structures decoders.
//
// --[ Description ] ----------------------------------------------------------
//
* LICENSE.MIT: * LICENSE.LGPL: Added LICENSE files for LGPL and MIT licenses. * DiscImageChef.Devices/Enums.cs: * DiscImageChef.Partitions/MBR.cs: * DiscImageChef.Partitions/RDB.cs: * DiscImageChef.DiscImages/GDI.cs: * DiscImageChef.Partitions/Sun.cs: * DiscImageChef.DiscImages/VHD.cs: * DiscImageChef.Partitions/GPT.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Partitions/NeXT.cs: * DiscImageChef.Devices/Command.cs: * DiscImageChef.DiscImages/Nero.cs: * DiscImageChef.Decoders/CD/PMA.cs: * DiscImageChef.Decoders/CD/TOC.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Helpers/PrintHex.cs: * DiscImageChef.Helpers/Swapping.cs: * DiscImageChef.Decoders/DVD/PRI.cs: * DiscImageChef.Decoders/DVD/DMI.cs: * DiscImageChef.Decoders/DVD/DDS.cs: * DiscImageChef.Decoders/DVD/RMD.cs: * DiscImageChef.Decoders/DVD/UDI.cs: * DiscImageChef.Partitions/Atari.cs: * DiscImageChef.Decoders/DVD/BCA.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Decoders/DVD/PFI.cs: * DiscImageChef.Decoders/CD/ATIP.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.DiscImages/CDRWin.cs: * DiscImageChef.DiscImages/CDRDAO.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef.Decoders/Xbox/DMI.cs: * DiscImageChef.Helpers/ArrayFill.cs: * DiscImageChef.Settings/Settings.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Decoders/DVD/CPRM.cs: * DiscImageChef.Decoders/DVD/ADIP.cs: * DiscImageChef.Decoders/CD/Enums.cs: * DiscImageChef.Decoders/DVD/AACS.cs: * DiscImageChef.Decoders/SCSI/EVPD.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Console/DicConsole.cs: * DiscImageChef.Decoders/DVD/Spare.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Decoders/DVD/Enums.cs: * DiscImageChef.Filesystems/Symbian.cs: * DiscImageChef.Decoders/SCSI/Types.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.DiscImages/TeleDisk.cs: * DiscImageChef.Decoders/SCSI/Sense.cs: * DiscImageChef.Decoders/CD/FullTOC.cs: * DiscImageChef.Decoders/Blu-ray/DI.cs: * DiscImageChef.Decoders/ATA/Errors.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Devices/Linux/Enums.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/Structs.cs: * DiscImageChef.DiscImages/Apple2MG.cs: * DiscImageChef.Decoders/SCSI/Modes.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.Partitions/AppleMap.cs: * DiscImageChef.Decoders/Floppy/ISO.cs: * DiscImageChef.Decoders/DVD/Layers.cs: * DiscImageChef.Decoders/CD/Session.cs: * DiscImageChef.Decoders/SCSI/Enums.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef.Helpers/DateHandlers.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.DiscImages/ImageInfo.cs: * DiscImageChef.Checksums/MD5Context.cs: * DiscImageChef.Devices/Linux/Extern.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Helpers/ArrayIsEmpty.cs: * DiscImageChef.Decoders/Blu-ray/BCA.cs: * DiscImageChef.Decoders/Blu-ray/DDS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Decoders/ATA/Identify.cs: * DiscImageChef.Devices/Linux/Command.cs: * DiscImageChef.Devices/FreeBSD/Enums.cs: * DiscImageChef.Decoders/SCSI/Inquiry.cs: * DiscImageChef.Metadata/DeviceReport.cs: * DiscImageChef.Decoders/Floppy/Amiga.cs: * DiscImageChef.Devices/Linux/Structs.cs: * DiscImageChef.Devices/Windows/Enums.cs: * DiscImageChef.Decoders/DVD/CSS&CPRM.cs: * DiscImageChef.Checksums/SHA1Context.cs: * DiscImageChef.DiscImages/DiskCopy42.cs: * DiscImageChef.Partitions/PartPlugin.cs: * DiscImageChef.CommonTypes/Partition.cs: * DiscImageChef.Decoders/Floppy/Enums.cs: * DiscImageChef.CommonTypes/MediaType.cs: * DiscImageChef.Decoders/Floppy/Apple2.cs: * DiscImageChef.Devices/Windows/Extern.cs: * DiscImageChef.Decoders/SCSI/MMC/CPRM.cs: * DiscImageChef.Helpers/StringHandlers.cs: * DiscImageChef.DiscImages/ImagePlugin.cs: * DiscImageChef.Checksums/CRC64Context.cs: * DiscImageChef.Checksums/CRC32Context.cs: * DiscImageChef.DiscImages/ZZZRawImage.cs: * DiscImageChef.Checksums/CRC16Context.cs: * DiscImageChef.Filesystems/LisaFS/Dir.cs: * DiscImageChef.Decoders/DVD/Cartridge.cs: * DiscImageChef.Decoders/Blu-ray/Spare.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Decoders/SCSI/MMC/AACS.cs: * DiscImageChef.Devices/FreeBSD/Extern.cs: * DiscImageChef.Devices/Device/Commands.cs: * DiscImageChef.Checksums/SHA384Context.cs: * DiscImageChef.Devices/FreeBSD/Command.cs: * DiscImageChef.Checksums/SHA512Context.cs: * DiscImageChef.Decoders/SCSI/MMC/Enums.cs: * DiscImageChef.Devices/Windows/Command.cs: * DiscImageChef.Devices/FreeBSD/Structs.cs: * DiscImageChef.Devices/Windows/Structs.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Checksums/SHA256Context.cs: * DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: * DiscImageChef.Filesystems/LisaFS/Xattr.cs: * DiscImageChef.Checksums/Adler32Context.cs: * DiscImageChef.Decoders/Floppy/System34.cs: * DiscImageChef.Checksums/SpamSumContext.cs: * DiscImageChef.Decoders/SCSI/MMC/Hybrid.cs: * DiscImageChef.Devices/Device/Variables.cs: * DiscImageChef.Filesystems/LisaFS/Consts.cs: * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: * DiscImageChef.Decoders/Floppy/Commodore.cs: * DiscImageChef.Checksums/FletcherContext.cs: * DiscImageChef.Filesystems/LisaFS/Extent.cs: * DiscImageChef.Devices/Device/Destructor.cs: * DiscImageChef.Decoders/Floppy/AppleSony.cs: * DiscImageChef.Filesystems/LisaFS/Structs.cs: * DiscImageChef.Decoders/SCSI/VendorString.cs: * DiscImageChef.Decoders/SCSI/MMC/Features.cs: * DiscImageChef.Devices/Device/Constructor.cs: * DiscImageChef.Checksums/RIPEMD160Context.cs: * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: * DiscImageChef.Decoders/Blu-ray/Cartridge.cs: * DiscImageChef.Decoders/Floppy/System3740.cs: * DiscImageChef.Filesystems/LisaFS/Encoding.cs: * DiscImageChef.Decoders/SCSI/ModesEncoders.cs: * DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs: * DiscImageChef.Helpers/BigEndianBitConverter.cs: * DiscImageChef.Decoders/Floppy/Perpendicular.cs: * DiscImageChef.Decoders/SCSI/SSC/BlockLimits.cs: * DiscImageChef.Decoders/SCSI/MMC/WriteProtect.cs: * DiscImageChef.Devices/Device/ScsiCommands/HP.cs: * DiscImageChef.Devices/Device/AtaCommands/Cfa.cs: * DiscImageChef.Devices/Device/ScsiCommands/NEC.cs: * DiscImageChef.Helpers/EndianAwareBinaryReader.cs: * DiscImageChef.Devices/Device/ScsiCommands/MMC.cs: * DiscImageChef.Devices/Device/AtaCommands/MCPT.cs: * DiscImageChef.Devices/Device/ScsiCommands/SSC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SPC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SMC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SBC.cs: * DiscImageChef.Metadata/Properties/AssemblyInfo.cs: * DiscImageChef.Devices/Device/AtaCommands/Atapi.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata28.cs: * DiscImageChef.Devices/Device/AtaCommands/Smart.cs: * DiscImageChef.Decoders/SCSI/SSC/DensitySupport.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata48.cs: * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: * DiscImageChef.Devices/Device/AtaCommands/AtaCHS.cs: * DiscImageChef.Devices/Device/ScsiCommands/SyQuest.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plextor.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plasmon.cs: * DiscImageChef.Devices/Device/ScsiCommands/Pioneer.cs: * DiscImageChef.Devices/Device/ScsiCommands/Adaptec.cs: * DiscImageChef.Devices/Device/ScsiCommands/Fujitsu.cs: * DiscImageChef.Devices/Device/ScsiCommands/HL-DT-ST.cs: * DiscImageChef.Devices/Device/ScsiCommands/Certance.cs: * DiscImageChef.Decoders/SCSI/DiscStructureCapabilities.cs: * DiscImageChef.Devices/Device/ScsiCommands/ArchiveCorp.cs: Relicensed as LGPL. Updated standard header. * DiscImageChef/Main.cs: * DiscImageChef/Plugins.cs: * DiscImageChef/Options.cs: * DiscImageChef/Commands/Ls.cs: * DiscImageChef/Core/IBGLog.cs: * DiscImageChef/Core/MHDDLog.cs: * DiscImageChef/AssemblyInfo.cs: * DiscImageChef/Core/Checksum.cs: * DiscImageChef/Commands/Decode.cs: * DiscImageChef/Core/Statistics.cs: * DiscImageChef/Commands/Verify.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef/Commands/Entropy.cs: * DiscImageChef/Commands/Compare.cs: * DiscImageChef.Interop/DetectOS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef/Commands/Commands.cs: * DiscImageChef/Commands/PrintHex.cs: * DiscImageChef/Commands/Checksum.cs: * DiscImageChef/DetectImageFormat.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef/Commands/Benchmark.cs: * DiscImageChef/Commands/Configure.cs: * DiscImageChef/Commands/MediaInfo.cs: * DiscImageChef.Interop/PlatformID.cs: * DiscImageChef/Commands/MediaScan.cs: * DiscImageChef/Commands/Statistics.cs: * DiscImageChef/Commands/DeviceInfo.cs: * DiscImageChef.Checksums/ReedSolomon.cs: * DiscImageChef/Commands/DeviceReport.cs: * DiscImageChef/Commands/ExtractFiles.cs: * DiscImageChef.Checksums/CDChecksums.cs: * DiscImageChef/Commands/CreateSidecar.cs: Updated standard header. * DiscImageChef.Checksums/DiscImageChef.Checksums.csproj: Relicensed project as LGPL. Updated standard header. Embed license as resource. * DiscImageChef.Console/DiscImageChef.Console.csproj: * DiscImageChef.Devices/DiscImageChef.Devices.csproj: * DiscImageChef.Helpers/DiscImageChef.Helpers.csproj: * DiscImageChef.Settings/DiscImageChef.Settings.csproj: * DiscImageChef.Decoders/DiscImageChef.Decoders.csproj: * DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: * DiscImageChef.Partitions/DiscImageChef.Partitions.csproj: * DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj: * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: * DiscImageChef.CommonTypes/DiscImageChef.CommonTypes.csproj: Relicensed as LGPL. Updated standard header. Embed license as resource. * DiscImageChef/DiscImageChef.csproj: * DiscImageChef.Interop/DiscImageChef.Interop.csproj: Updated standard header. Embed license as resource.
2016-07-28 18:13:49 +01:00
// Decodes ATA IDENTIFY DEVICE response.
//
// --[ License ] --------------------------------------------------------------
//
* LICENSE.MIT: * LICENSE.LGPL: Added LICENSE files for LGPL and MIT licenses. * DiscImageChef.Devices/Enums.cs: * DiscImageChef.Partitions/MBR.cs: * DiscImageChef.Partitions/RDB.cs: * DiscImageChef.DiscImages/GDI.cs: * DiscImageChef.Partitions/Sun.cs: * DiscImageChef.DiscImages/VHD.cs: * DiscImageChef.Partitions/GPT.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Partitions/NeXT.cs: * DiscImageChef.Devices/Command.cs: * DiscImageChef.DiscImages/Nero.cs: * DiscImageChef.Decoders/CD/PMA.cs: * DiscImageChef.Decoders/CD/TOC.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Helpers/PrintHex.cs: * DiscImageChef.Helpers/Swapping.cs: * DiscImageChef.Decoders/DVD/PRI.cs: * DiscImageChef.Decoders/DVD/DMI.cs: * DiscImageChef.Decoders/DVD/DDS.cs: * DiscImageChef.Decoders/DVD/RMD.cs: * DiscImageChef.Decoders/DVD/UDI.cs: * DiscImageChef.Partitions/Atari.cs: * DiscImageChef.Decoders/DVD/BCA.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Decoders/DVD/PFI.cs: * DiscImageChef.Decoders/CD/ATIP.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.DiscImages/CDRWin.cs: * DiscImageChef.DiscImages/CDRDAO.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef.Decoders/Xbox/DMI.cs: * DiscImageChef.Helpers/ArrayFill.cs: * DiscImageChef.Settings/Settings.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Decoders/DVD/CPRM.cs: * DiscImageChef.Decoders/DVD/ADIP.cs: * DiscImageChef.Decoders/CD/Enums.cs: * DiscImageChef.Decoders/DVD/AACS.cs: * DiscImageChef.Decoders/SCSI/EVPD.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Console/DicConsole.cs: * DiscImageChef.Decoders/DVD/Spare.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Decoders/DVD/Enums.cs: * DiscImageChef.Filesystems/Symbian.cs: * DiscImageChef.Decoders/SCSI/Types.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.DiscImages/TeleDisk.cs: * DiscImageChef.Decoders/SCSI/Sense.cs: * DiscImageChef.Decoders/CD/FullTOC.cs: * DiscImageChef.Decoders/Blu-ray/DI.cs: * DiscImageChef.Decoders/ATA/Errors.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Devices/Linux/Enums.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/Structs.cs: * DiscImageChef.DiscImages/Apple2MG.cs: * DiscImageChef.Decoders/SCSI/Modes.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.Partitions/AppleMap.cs: * DiscImageChef.Decoders/Floppy/ISO.cs: * DiscImageChef.Decoders/DVD/Layers.cs: * DiscImageChef.Decoders/CD/Session.cs: * DiscImageChef.Decoders/SCSI/Enums.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef.Helpers/DateHandlers.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.DiscImages/ImageInfo.cs: * DiscImageChef.Checksums/MD5Context.cs: * DiscImageChef.Devices/Linux/Extern.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Helpers/ArrayIsEmpty.cs: * DiscImageChef.Decoders/Blu-ray/BCA.cs: * DiscImageChef.Decoders/Blu-ray/DDS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Decoders/ATA/Identify.cs: * DiscImageChef.Devices/Linux/Command.cs: * DiscImageChef.Devices/FreeBSD/Enums.cs: * DiscImageChef.Decoders/SCSI/Inquiry.cs: * DiscImageChef.Metadata/DeviceReport.cs: * DiscImageChef.Decoders/Floppy/Amiga.cs: * DiscImageChef.Devices/Linux/Structs.cs: * DiscImageChef.Devices/Windows/Enums.cs: * DiscImageChef.Decoders/DVD/CSS&CPRM.cs: * DiscImageChef.Checksums/SHA1Context.cs: * DiscImageChef.DiscImages/DiskCopy42.cs: * DiscImageChef.Partitions/PartPlugin.cs: * DiscImageChef.CommonTypes/Partition.cs: * DiscImageChef.Decoders/Floppy/Enums.cs: * DiscImageChef.CommonTypes/MediaType.cs: * DiscImageChef.Decoders/Floppy/Apple2.cs: * DiscImageChef.Devices/Windows/Extern.cs: * DiscImageChef.Decoders/SCSI/MMC/CPRM.cs: * DiscImageChef.Helpers/StringHandlers.cs: * DiscImageChef.DiscImages/ImagePlugin.cs: * DiscImageChef.Checksums/CRC64Context.cs: * DiscImageChef.Checksums/CRC32Context.cs: * DiscImageChef.DiscImages/ZZZRawImage.cs: * DiscImageChef.Checksums/CRC16Context.cs: * DiscImageChef.Filesystems/LisaFS/Dir.cs: * DiscImageChef.Decoders/DVD/Cartridge.cs: * DiscImageChef.Decoders/Blu-ray/Spare.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Decoders/SCSI/MMC/AACS.cs: * DiscImageChef.Devices/FreeBSD/Extern.cs: * DiscImageChef.Devices/Device/Commands.cs: * DiscImageChef.Checksums/SHA384Context.cs: * DiscImageChef.Devices/FreeBSD/Command.cs: * DiscImageChef.Checksums/SHA512Context.cs: * DiscImageChef.Decoders/SCSI/MMC/Enums.cs: * DiscImageChef.Devices/Windows/Command.cs: * DiscImageChef.Devices/FreeBSD/Structs.cs: * DiscImageChef.Devices/Windows/Structs.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Checksums/SHA256Context.cs: * DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: * DiscImageChef.Filesystems/LisaFS/Xattr.cs: * DiscImageChef.Checksums/Adler32Context.cs: * DiscImageChef.Decoders/Floppy/System34.cs: * DiscImageChef.Checksums/SpamSumContext.cs: * DiscImageChef.Decoders/SCSI/MMC/Hybrid.cs: * DiscImageChef.Devices/Device/Variables.cs: * DiscImageChef.Filesystems/LisaFS/Consts.cs: * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: * DiscImageChef.Decoders/Floppy/Commodore.cs: * DiscImageChef.Checksums/FletcherContext.cs: * DiscImageChef.Filesystems/LisaFS/Extent.cs: * DiscImageChef.Devices/Device/Destructor.cs: * DiscImageChef.Decoders/Floppy/AppleSony.cs: * DiscImageChef.Filesystems/LisaFS/Structs.cs: * DiscImageChef.Decoders/SCSI/VendorString.cs: * DiscImageChef.Decoders/SCSI/MMC/Features.cs: * DiscImageChef.Devices/Device/Constructor.cs: * DiscImageChef.Checksums/RIPEMD160Context.cs: * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: * DiscImageChef.Decoders/Blu-ray/Cartridge.cs: * DiscImageChef.Decoders/Floppy/System3740.cs: * DiscImageChef.Filesystems/LisaFS/Encoding.cs: * DiscImageChef.Decoders/SCSI/ModesEncoders.cs: * DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs: * DiscImageChef.Helpers/BigEndianBitConverter.cs: * DiscImageChef.Decoders/Floppy/Perpendicular.cs: * DiscImageChef.Decoders/SCSI/SSC/BlockLimits.cs: * DiscImageChef.Decoders/SCSI/MMC/WriteProtect.cs: * DiscImageChef.Devices/Device/ScsiCommands/HP.cs: * DiscImageChef.Devices/Device/AtaCommands/Cfa.cs: * DiscImageChef.Devices/Device/ScsiCommands/NEC.cs: * DiscImageChef.Helpers/EndianAwareBinaryReader.cs: * DiscImageChef.Devices/Device/ScsiCommands/MMC.cs: * DiscImageChef.Devices/Device/AtaCommands/MCPT.cs: * DiscImageChef.Devices/Device/ScsiCommands/SSC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SPC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SMC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SBC.cs: * DiscImageChef.Metadata/Properties/AssemblyInfo.cs: * DiscImageChef.Devices/Device/AtaCommands/Atapi.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata28.cs: * DiscImageChef.Devices/Device/AtaCommands/Smart.cs: * DiscImageChef.Decoders/SCSI/SSC/DensitySupport.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata48.cs: * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: * DiscImageChef.Devices/Device/AtaCommands/AtaCHS.cs: * DiscImageChef.Devices/Device/ScsiCommands/SyQuest.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plextor.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plasmon.cs: * DiscImageChef.Devices/Device/ScsiCommands/Pioneer.cs: * DiscImageChef.Devices/Device/ScsiCommands/Adaptec.cs: * DiscImageChef.Devices/Device/ScsiCommands/Fujitsu.cs: * DiscImageChef.Devices/Device/ScsiCommands/HL-DT-ST.cs: * DiscImageChef.Devices/Device/ScsiCommands/Certance.cs: * DiscImageChef.Decoders/SCSI/DiscStructureCapabilities.cs: * DiscImageChef.Devices/Device/ScsiCommands/ArchiveCorp.cs: Relicensed as LGPL. Updated standard header. * DiscImageChef/Main.cs: * DiscImageChef/Plugins.cs: * DiscImageChef/Options.cs: * DiscImageChef/Commands/Ls.cs: * DiscImageChef/Core/IBGLog.cs: * DiscImageChef/Core/MHDDLog.cs: * DiscImageChef/AssemblyInfo.cs: * DiscImageChef/Core/Checksum.cs: * DiscImageChef/Commands/Decode.cs: * DiscImageChef/Core/Statistics.cs: * DiscImageChef/Commands/Verify.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef/Commands/Entropy.cs: * DiscImageChef/Commands/Compare.cs: * DiscImageChef.Interop/DetectOS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef/Commands/Commands.cs: * DiscImageChef/Commands/PrintHex.cs: * DiscImageChef/Commands/Checksum.cs: * DiscImageChef/DetectImageFormat.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef/Commands/Benchmark.cs: * DiscImageChef/Commands/Configure.cs: * DiscImageChef/Commands/MediaInfo.cs: * DiscImageChef.Interop/PlatformID.cs: * DiscImageChef/Commands/MediaScan.cs: * DiscImageChef/Commands/Statistics.cs: * DiscImageChef/Commands/DeviceInfo.cs: * DiscImageChef.Checksums/ReedSolomon.cs: * DiscImageChef/Commands/DeviceReport.cs: * DiscImageChef/Commands/ExtractFiles.cs: * DiscImageChef.Checksums/CDChecksums.cs: * DiscImageChef/Commands/CreateSidecar.cs: Updated standard header. * DiscImageChef.Checksums/DiscImageChef.Checksums.csproj: Relicensed project as LGPL. Updated standard header. Embed license as resource. * DiscImageChef.Console/DiscImageChef.Console.csproj: * DiscImageChef.Devices/DiscImageChef.Devices.csproj: * DiscImageChef.Helpers/DiscImageChef.Helpers.csproj: * DiscImageChef.Settings/DiscImageChef.Settings.csproj: * DiscImageChef.Decoders/DiscImageChef.Decoders.csproj: * DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: * DiscImageChef.Partitions/DiscImageChef.Partitions.csproj: * DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj: * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: * DiscImageChef.CommonTypes/DiscImageChef.CommonTypes.csproj: Relicensed as LGPL. Updated standard header. Embed license as resource. * DiscImageChef/DiscImageChef.csproj: * DiscImageChef.Interop/DiscImageChef.Interop.csproj: Updated standard header. Embed license as resource.
2016-07-28 18:13:49 +01:00
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
* LICENSE.MIT: * LICENSE.LGPL: Added LICENSE files for LGPL and MIT licenses. * DiscImageChef.Devices/Enums.cs: * DiscImageChef.Partitions/MBR.cs: * DiscImageChef.Partitions/RDB.cs: * DiscImageChef.DiscImages/GDI.cs: * DiscImageChef.Partitions/Sun.cs: * DiscImageChef.DiscImages/VHD.cs: * DiscImageChef.Partitions/GPT.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Partitions/NeXT.cs: * DiscImageChef.Devices/Command.cs: * DiscImageChef.DiscImages/Nero.cs: * DiscImageChef.Decoders/CD/PMA.cs: * DiscImageChef.Decoders/CD/TOC.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Helpers/PrintHex.cs: * DiscImageChef.Helpers/Swapping.cs: * DiscImageChef.Decoders/DVD/PRI.cs: * DiscImageChef.Decoders/DVD/DMI.cs: * DiscImageChef.Decoders/DVD/DDS.cs: * DiscImageChef.Decoders/DVD/RMD.cs: * DiscImageChef.Decoders/DVD/UDI.cs: * DiscImageChef.Partitions/Atari.cs: * DiscImageChef.Decoders/DVD/BCA.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Decoders/DVD/PFI.cs: * DiscImageChef.Decoders/CD/ATIP.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.DiscImages/CDRWin.cs: * DiscImageChef.DiscImages/CDRDAO.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef.Decoders/Xbox/DMI.cs: * DiscImageChef.Helpers/ArrayFill.cs: * DiscImageChef.Settings/Settings.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Decoders/DVD/CPRM.cs: * DiscImageChef.Decoders/DVD/ADIP.cs: * DiscImageChef.Decoders/CD/Enums.cs: * DiscImageChef.Decoders/DVD/AACS.cs: * DiscImageChef.Decoders/SCSI/EVPD.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Console/DicConsole.cs: * DiscImageChef.Decoders/DVD/Spare.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Decoders/DVD/Enums.cs: * DiscImageChef.Filesystems/Symbian.cs: * DiscImageChef.Decoders/SCSI/Types.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.DiscImages/TeleDisk.cs: * DiscImageChef.Decoders/SCSI/Sense.cs: * DiscImageChef.Decoders/CD/FullTOC.cs: * DiscImageChef.Decoders/Blu-ray/DI.cs: * DiscImageChef.Decoders/ATA/Errors.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Devices/Linux/Enums.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/Structs.cs: * DiscImageChef.DiscImages/Apple2MG.cs: * DiscImageChef.Decoders/SCSI/Modes.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.Partitions/AppleMap.cs: * DiscImageChef.Decoders/Floppy/ISO.cs: * DiscImageChef.Decoders/DVD/Layers.cs: * DiscImageChef.Decoders/CD/Session.cs: * DiscImageChef.Decoders/SCSI/Enums.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef.Helpers/DateHandlers.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.DiscImages/ImageInfo.cs: * DiscImageChef.Checksums/MD5Context.cs: * DiscImageChef.Devices/Linux/Extern.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Helpers/ArrayIsEmpty.cs: * DiscImageChef.Decoders/Blu-ray/BCA.cs: * DiscImageChef.Decoders/Blu-ray/DDS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Decoders/ATA/Identify.cs: * DiscImageChef.Devices/Linux/Command.cs: * DiscImageChef.Devices/FreeBSD/Enums.cs: * DiscImageChef.Decoders/SCSI/Inquiry.cs: * DiscImageChef.Metadata/DeviceReport.cs: * DiscImageChef.Decoders/Floppy/Amiga.cs: * DiscImageChef.Devices/Linux/Structs.cs: * DiscImageChef.Devices/Windows/Enums.cs: * DiscImageChef.Decoders/DVD/CSS&CPRM.cs: * DiscImageChef.Checksums/SHA1Context.cs: * DiscImageChef.DiscImages/DiskCopy42.cs: * DiscImageChef.Partitions/PartPlugin.cs: * DiscImageChef.CommonTypes/Partition.cs: * DiscImageChef.Decoders/Floppy/Enums.cs: * DiscImageChef.CommonTypes/MediaType.cs: * DiscImageChef.Decoders/Floppy/Apple2.cs: * DiscImageChef.Devices/Windows/Extern.cs: * DiscImageChef.Decoders/SCSI/MMC/CPRM.cs: * DiscImageChef.Helpers/StringHandlers.cs: * DiscImageChef.DiscImages/ImagePlugin.cs: * DiscImageChef.Checksums/CRC64Context.cs: * DiscImageChef.Checksums/CRC32Context.cs: * DiscImageChef.DiscImages/ZZZRawImage.cs: * DiscImageChef.Checksums/CRC16Context.cs: * DiscImageChef.Filesystems/LisaFS/Dir.cs: * DiscImageChef.Decoders/DVD/Cartridge.cs: * DiscImageChef.Decoders/Blu-ray/Spare.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Decoders/SCSI/MMC/AACS.cs: * DiscImageChef.Devices/FreeBSD/Extern.cs: * DiscImageChef.Devices/Device/Commands.cs: * DiscImageChef.Checksums/SHA384Context.cs: * DiscImageChef.Devices/FreeBSD/Command.cs: * DiscImageChef.Checksums/SHA512Context.cs: * DiscImageChef.Decoders/SCSI/MMC/Enums.cs: * DiscImageChef.Devices/Windows/Command.cs: * DiscImageChef.Devices/FreeBSD/Structs.cs: * DiscImageChef.Devices/Windows/Structs.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Checksums/SHA256Context.cs: * DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: * DiscImageChef.Filesystems/LisaFS/Xattr.cs: * DiscImageChef.Checksums/Adler32Context.cs: * DiscImageChef.Decoders/Floppy/System34.cs: * DiscImageChef.Checksums/SpamSumContext.cs: * DiscImageChef.Decoders/SCSI/MMC/Hybrid.cs: * DiscImageChef.Devices/Device/Variables.cs: * DiscImageChef.Filesystems/LisaFS/Consts.cs: * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: * DiscImageChef.Decoders/Floppy/Commodore.cs: * DiscImageChef.Checksums/FletcherContext.cs: * DiscImageChef.Filesystems/LisaFS/Extent.cs: * DiscImageChef.Devices/Device/Destructor.cs: * DiscImageChef.Decoders/Floppy/AppleSony.cs: * DiscImageChef.Filesystems/LisaFS/Structs.cs: * DiscImageChef.Decoders/SCSI/VendorString.cs: * DiscImageChef.Decoders/SCSI/MMC/Features.cs: * DiscImageChef.Devices/Device/Constructor.cs: * DiscImageChef.Checksums/RIPEMD160Context.cs: * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: * DiscImageChef.Decoders/Blu-ray/Cartridge.cs: * DiscImageChef.Decoders/Floppy/System3740.cs: * DiscImageChef.Filesystems/LisaFS/Encoding.cs: * DiscImageChef.Decoders/SCSI/ModesEncoders.cs: * DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs: * DiscImageChef.Helpers/BigEndianBitConverter.cs: * DiscImageChef.Decoders/Floppy/Perpendicular.cs: * DiscImageChef.Decoders/SCSI/SSC/BlockLimits.cs: * DiscImageChef.Decoders/SCSI/MMC/WriteProtect.cs: * DiscImageChef.Devices/Device/ScsiCommands/HP.cs: * DiscImageChef.Devices/Device/AtaCommands/Cfa.cs: * DiscImageChef.Devices/Device/ScsiCommands/NEC.cs: * DiscImageChef.Helpers/EndianAwareBinaryReader.cs: * DiscImageChef.Devices/Device/ScsiCommands/MMC.cs: * DiscImageChef.Devices/Device/AtaCommands/MCPT.cs: * DiscImageChef.Devices/Device/ScsiCommands/SSC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SPC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SMC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SBC.cs: * DiscImageChef.Metadata/Properties/AssemblyInfo.cs: * DiscImageChef.Devices/Device/AtaCommands/Atapi.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata28.cs: * DiscImageChef.Devices/Device/AtaCommands/Smart.cs: * DiscImageChef.Decoders/SCSI/SSC/DensitySupport.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata48.cs: * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: * DiscImageChef.Devices/Device/AtaCommands/AtaCHS.cs: * DiscImageChef.Devices/Device/ScsiCommands/SyQuest.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plextor.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plasmon.cs: * DiscImageChef.Devices/Device/ScsiCommands/Pioneer.cs: * DiscImageChef.Devices/Device/ScsiCommands/Adaptec.cs: * DiscImageChef.Devices/Device/ScsiCommands/Fujitsu.cs: * DiscImageChef.Devices/Device/ScsiCommands/HL-DT-ST.cs: * DiscImageChef.Devices/Device/ScsiCommands/Certance.cs: * DiscImageChef.Decoders/SCSI/DiscStructureCapabilities.cs: * DiscImageChef.Devices/Device/ScsiCommands/ArchiveCorp.cs: Relicensed as LGPL. Updated standard header. * DiscImageChef/Main.cs: * DiscImageChef/Plugins.cs: * DiscImageChef/Options.cs: * DiscImageChef/Commands/Ls.cs: * DiscImageChef/Core/IBGLog.cs: * DiscImageChef/Core/MHDDLog.cs: * DiscImageChef/AssemblyInfo.cs: * DiscImageChef/Core/Checksum.cs: * DiscImageChef/Commands/Decode.cs: * DiscImageChef/Core/Statistics.cs: * DiscImageChef/Commands/Verify.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef/Commands/Entropy.cs: * DiscImageChef/Commands/Compare.cs: * DiscImageChef.Interop/DetectOS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef/Commands/Commands.cs: * DiscImageChef/Commands/PrintHex.cs: * DiscImageChef/Commands/Checksum.cs: * DiscImageChef/DetectImageFormat.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef/Commands/Benchmark.cs: * DiscImageChef/Commands/Configure.cs: * DiscImageChef/Commands/MediaInfo.cs: * DiscImageChef.Interop/PlatformID.cs: * DiscImageChef/Commands/MediaScan.cs: * DiscImageChef/Commands/Statistics.cs: * DiscImageChef/Commands/DeviceInfo.cs: * DiscImageChef.Checksums/ReedSolomon.cs: * DiscImageChef/Commands/DeviceReport.cs: * DiscImageChef/Commands/ExtractFiles.cs: * DiscImageChef.Checksums/CDChecksums.cs: * DiscImageChef/Commands/CreateSidecar.cs: Updated standard header. * DiscImageChef.Checksums/DiscImageChef.Checksums.csproj: Relicensed project as LGPL. Updated standard header. Embed license as resource. * DiscImageChef.Console/DiscImageChef.Console.csproj: * DiscImageChef.Devices/DiscImageChef.Devices.csproj: * DiscImageChef.Helpers/DiscImageChef.Helpers.csproj: * DiscImageChef.Settings/DiscImageChef.Settings.csproj: * DiscImageChef.Decoders/DiscImageChef.Decoders.csproj: * DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: * DiscImageChef.Partitions/DiscImageChef.Partitions.csproj: * DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj: * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: * DiscImageChef.CommonTypes/DiscImageChef.CommonTypes.csproj: Relicensed as LGPL. Updated standard header. Embed license as resource. * DiscImageChef/DiscImageChef.csproj: * DiscImageChef.Interop/DiscImageChef.Interop.csproj: Updated standard header. Embed license as resource.
2016-07-28 18:13:49 +01:00
// This library 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
// Lesser General Public License for more details.
//
* LICENSE.MIT: * LICENSE.LGPL: Added LICENSE files for LGPL and MIT licenses. * DiscImageChef.Devices/Enums.cs: * DiscImageChef.Partitions/MBR.cs: * DiscImageChef.Partitions/RDB.cs: * DiscImageChef.DiscImages/GDI.cs: * DiscImageChef.Partitions/Sun.cs: * DiscImageChef.DiscImages/VHD.cs: * DiscImageChef.Partitions/GPT.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Partitions/NeXT.cs: * DiscImageChef.Devices/Command.cs: * DiscImageChef.DiscImages/Nero.cs: * DiscImageChef.Decoders/CD/PMA.cs: * DiscImageChef.Decoders/CD/TOC.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Helpers/PrintHex.cs: * DiscImageChef.Helpers/Swapping.cs: * DiscImageChef.Decoders/DVD/PRI.cs: * DiscImageChef.Decoders/DVD/DMI.cs: * DiscImageChef.Decoders/DVD/DDS.cs: * DiscImageChef.Decoders/DVD/RMD.cs: * DiscImageChef.Decoders/DVD/UDI.cs: * DiscImageChef.Partitions/Atari.cs: * DiscImageChef.Decoders/DVD/BCA.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Decoders/DVD/PFI.cs: * DiscImageChef.Decoders/CD/ATIP.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.DiscImages/CDRWin.cs: * DiscImageChef.DiscImages/CDRDAO.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef.Decoders/Xbox/DMI.cs: * DiscImageChef.Helpers/ArrayFill.cs: * DiscImageChef.Settings/Settings.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Decoders/DVD/CPRM.cs: * DiscImageChef.Decoders/DVD/ADIP.cs: * DiscImageChef.Decoders/CD/Enums.cs: * DiscImageChef.Decoders/DVD/AACS.cs: * DiscImageChef.Decoders/SCSI/EVPD.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Console/DicConsole.cs: * DiscImageChef.Decoders/DVD/Spare.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Decoders/DVD/Enums.cs: * DiscImageChef.Filesystems/Symbian.cs: * DiscImageChef.Decoders/SCSI/Types.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.DiscImages/TeleDisk.cs: * DiscImageChef.Decoders/SCSI/Sense.cs: * DiscImageChef.Decoders/CD/FullTOC.cs: * DiscImageChef.Decoders/Blu-ray/DI.cs: * DiscImageChef.Decoders/ATA/Errors.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Devices/Linux/Enums.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/Structs.cs: * DiscImageChef.DiscImages/Apple2MG.cs: * DiscImageChef.Decoders/SCSI/Modes.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.Partitions/AppleMap.cs: * DiscImageChef.Decoders/Floppy/ISO.cs: * DiscImageChef.Decoders/DVD/Layers.cs: * DiscImageChef.Decoders/CD/Session.cs: * DiscImageChef.Decoders/SCSI/Enums.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef.Helpers/DateHandlers.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.DiscImages/ImageInfo.cs: * DiscImageChef.Checksums/MD5Context.cs: * DiscImageChef.Devices/Linux/Extern.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Helpers/ArrayIsEmpty.cs: * DiscImageChef.Decoders/Blu-ray/BCA.cs: * DiscImageChef.Decoders/Blu-ray/DDS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Decoders/ATA/Identify.cs: * DiscImageChef.Devices/Linux/Command.cs: * DiscImageChef.Devices/FreeBSD/Enums.cs: * DiscImageChef.Decoders/SCSI/Inquiry.cs: * DiscImageChef.Metadata/DeviceReport.cs: * DiscImageChef.Decoders/Floppy/Amiga.cs: * DiscImageChef.Devices/Linux/Structs.cs: * DiscImageChef.Devices/Windows/Enums.cs: * DiscImageChef.Decoders/DVD/CSS&CPRM.cs: * DiscImageChef.Checksums/SHA1Context.cs: * DiscImageChef.DiscImages/DiskCopy42.cs: * DiscImageChef.Partitions/PartPlugin.cs: * DiscImageChef.CommonTypes/Partition.cs: * DiscImageChef.Decoders/Floppy/Enums.cs: * DiscImageChef.CommonTypes/MediaType.cs: * DiscImageChef.Decoders/Floppy/Apple2.cs: * DiscImageChef.Devices/Windows/Extern.cs: * DiscImageChef.Decoders/SCSI/MMC/CPRM.cs: * DiscImageChef.Helpers/StringHandlers.cs: * DiscImageChef.DiscImages/ImagePlugin.cs: * DiscImageChef.Checksums/CRC64Context.cs: * DiscImageChef.Checksums/CRC32Context.cs: * DiscImageChef.DiscImages/ZZZRawImage.cs: * DiscImageChef.Checksums/CRC16Context.cs: * DiscImageChef.Filesystems/LisaFS/Dir.cs: * DiscImageChef.Decoders/DVD/Cartridge.cs: * DiscImageChef.Decoders/Blu-ray/Spare.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Decoders/SCSI/MMC/AACS.cs: * DiscImageChef.Devices/FreeBSD/Extern.cs: * DiscImageChef.Devices/Device/Commands.cs: * DiscImageChef.Checksums/SHA384Context.cs: * DiscImageChef.Devices/FreeBSD/Command.cs: * DiscImageChef.Checksums/SHA512Context.cs: * DiscImageChef.Decoders/SCSI/MMC/Enums.cs: * DiscImageChef.Devices/Windows/Command.cs: * DiscImageChef.Devices/FreeBSD/Structs.cs: * DiscImageChef.Devices/Windows/Structs.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Checksums/SHA256Context.cs: * DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: * DiscImageChef.Filesystems/LisaFS/Xattr.cs: * DiscImageChef.Checksums/Adler32Context.cs: * DiscImageChef.Decoders/Floppy/System34.cs: * DiscImageChef.Checksums/SpamSumContext.cs: * DiscImageChef.Decoders/SCSI/MMC/Hybrid.cs: * DiscImageChef.Devices/Device/Variables.cs: * DiscImageChef.Filesystems/LisaFS/Consts.cs: * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: * DiscImageChef.Decoders/Floppy/Commodore.cs: * DiscImageChef.Checksums/FletcherContext.cs: * DiscImageChef.Filesystems/LisaFS/Extent.cs: * DiscImageChef.Devices/Device/Destructor.cs: * DiscImageChef.Decoders/Floppy/AppleSony.cs: * DiscImageChef.Filesystems/LisaFS/Structs.cs: * DiscImageChef.Decoders/SCSI/VendorString.cs: * DiscImageChef.Decoders/SCSI/MMC/Features.cs: * DiscImageChef.Devices/Device/Constructor.cs: * DiscImageChef.Checksums/RIPEMD160Context.cs: * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: * DiscImageChef.Decoders/Blu-ray/Cartridge.cs: * DiscImageChef.Decoders/Floppy/System3740.cs: * DiscImageChef.Filesystems/LisaFS/Encoding.cs: * DiscImageChef.Decoders/SCSI/ModesEncoders.cs: * DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs: * DiscImageChef.Helpers/BigEndianBitConverter.cs: * DiscImageChef.Decoders/Floppy/Perpendicular.cs: * DiscImageChef.Decoders/SCSI/SSC/BlockLimits.cs: * DiscImageChef.Decoders/SCSI/MMC/WriteProtect.cs: * DiscImageChef.Devices/Device/ScsiCommands/HP.cs: * DiscImageChef.Devices/Device/AtaCommands/Cfa.cs: * DiscImageChef.Devices/Device/ScsiCommands/NEC.cs: * DiscImageChef.Helpers/EndianAwareBinaryReader.cs: * DiscImageChef.Devices/Device/ScsiCommands/MMC.cs: * DiscImageChef.Devices/Device/AtaCommands/MCPT.cs: * DiscImageChef.Devices/Device/ScsiCommands/SSC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SPC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SMC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SBC.cs: * DiscImageChef.Metadata/Properties/AssemblyInfo.cs: * DiscImageChef.Devices/Device/AtaCommands/Atapi.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata28.cs: * DiscImageChef.Devices/Device/AtaCommands/Smart.cs: * DiscImageChef.Decoders/SCSI/SSC/DensitySupport.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata48.cs: * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: * DiscImageChef.Devices/Device/AtaCommands/AtaCHS.cs: * DiscImageChef.Devices/Device/ScsiCommands/SyQuest.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plextor.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plasmon.cs: * DiscImageChef.Devices/Device/ScsiCommands/Pioneer.cs: * DiscImageChef.Devices/Device/ScsiCommands/Adaptec.cs: * DiscImageChef.Devices/Device/ScsiCommands/Fujitsu.cs: * DiscImageChef.Devices/Device/ScsiCommands/HL-DT-ST.cs: * DiscImageChef.Devices/Device/ScsiCommands/Certance.cs: * DiscImageChef.Decoders/SCSI/DiscStructureCapabilities.cs: * DiscImageChef.Devices/Device/ScsiCommands/ArchiveCorp.cs: Relicensed as LGPL. Updated standard header. * DiscImageChef/Main.cs: * DiscImageChef/Plugins.cs: * DiscImageChef/Options.cs: * DiscImageChef/Commands/Ls.cs: * DiscImageChef/Core/IBGLog.cs: * DiscImageChef/Core/MHDDLog.cs: * DiscImageChef/AssemblyInfo.cs: * DiscImageChef/Core/Checksum.cs: * DiscImageChef/Commands/Decode.cs: * DiscImageChef/Core/Statistics.cs: * DiscImageChef/Commands/Verify.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef/Commands/Entropy.cs: * DiscImageChef/Commands/Compare.cs: * DiscImageChef.Interop/DetectOS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef/Commands/Commands.cs: * DiscImageChef/Commands/PrintHex.cs: * DiscImageChef/Commands/Checksum.cs: * DiscImageChef/DetectImageFormat.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef/Commands/Benchmark.cs: * DiscImageChef/Commands/Configure.cs: * DiscImageChef/Commands/MediaInfo.cs: * DiscImageChef.Interop/PlatformID.cs: * DiscImageChef/Commands/MediaScan.cs: * DiscImageChef/Commands/Statistics.cs: * DiscImageChef/Commands/DeviceInfo.cs: * DiscImageChef.Checksums/ReedSolomon.cs: * DiscImageChef/Commands/DeviceReport.cs: * DiscImageChef/Commands/ExtractFiles.cs: * DiscImageChef.Checksums/CDChecksums.cs: * DiscImageChef/Commands/CreateSidecar.cs: Updated standard header. * DiscImageChef.Checksums/DiscImageChef.Checksums.csproj: Relicensed project as LGPL. Updated standard header. Embed license as resource. * DiscImageChef.Console/DiscImageChef.Console.csproj: * DiscImageChef.Devices/DiscImageChef.Devices.csproj: * DiscImageChef.Helpers/DiscImageChef.Helpers.csproj: * DiscImageChef.Settings/DiscImageChef.Settings.csproj: * DiscImageChef.Decoders/DiscImageChef.Decoders.csproj: * DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: * DiscImageChef.Partitions/DiscImageChef.Partitions.csproj: * DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj: * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: * DiscImageChef.CommonTypes/DiscImageChef.CommonTypes.csproj: Relicensed as LGPL. Updated standard header. Embed license as resource. * DiscImageChef/DiscImageChef.csproj: * DiscImageChef.Interop/DiscImageChef.Interop.csproj: Updated standard header. Embed license as resource.
2016-07-28 18:13:49 +01:00
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
2024-12-19 10:45:18 +00:00
// Copyright © 2011-2025 Natalia Portillo
// ****************************************************************************/
* LICENSE.MIT: * LICENSE.LGPL: Added LICENSE files for LGPL and MIT licenses. * DiscImageChef.Devices/Enums.cs: * DiscImageChef.Partitions/MBR.cs: * DiscImageChef.Partitions/RDB.cs: * DiscImageChef.DiscImages/GDI.cs: * DiscImageChef.Partitions/Sun.cs: * DiscImageChef.DiscImages/VHD.cs: * DiscImageChef.Partitions/GPT.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Partitions/NeXT.cs: * DiscImageChef.Devices/Command.cs: * DiscImageChef.DiscImages/Nero.cs: * DiscImageChef.Decoders/CD/PMA.cs: * DiscImageChef.Decoders/CD/TOC.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Helpers/PrintHex.cs: * DiscImageChef.Helpers/Swapping.cs: * DiscImageChef.Decoders/DVD/PRI.cs: * DiscImageChef.Decoders/DVD/DMI.cs: * DiscImageChef.Decoders/DVD/DDS.cs: * DiscImageChef.Decoders/DVD/RMD.cs: * DiscImageChef.Decoders/DVD/UDI.cs: * DiscImageChef.Partitions/Atari.cs: * DiscImageChef.Decoders/DVD/BCA.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Decoders/DVD/PFI.cs: * DiscImageChef.Decoders/CD/ATIP.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.DiscImages/CDRWin.cs: * DiscImageChef.DiscImages/CDRDAO.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef.Decoders/Xbox/DMI.cs: * DiscImageChef.Helpers/ArrayFill.cs: * DiscImageChef.Settings/Settings.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Decoders/DVD/CPRM.cs: * DiscImageChef.Decoders/DVD/ADIP.cs: * DiscImageChef.Decoders/CD/Enums.cs: * DiscImageChef.Decoders/DVD/AACS.cs: * DiscImageChef.Decoders/SCSI/EVPD.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Console/DicConsole.cs: * DiscImageChef.Decoders/DVD/Spare.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Decoders/DVD/Enums.cs: * DiscImageChef.Filesystems/Symbian.cs: * DiscImageChef.Decoders/SCSI/Types.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.DiscImages/TeleDisk.cs: * DiscImageChef.Decoders/SCSI/Sense.cs: * DiscImageChef.Decoders/CD/FullTOC.cs: * DiscImageChef.Decoders/Blu-ray/DI.cs: * DiscImageChef.Decoders/ATA/Errors.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Devices/Linux/Enums.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/Structs.cs: * DiscImageChef.DiscImages/Apple2MG.cs: * DiscImageChef.Decoders/SCSI/Modes.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.Partitions/AppleMap.cs: * DiscImageChef.Decoders/Floppy/ISO.cs: * DiscImageChef.Decoders/DVD/Layers.cs: * DiscImageChef.Decoders/CD/Session.cs: * DiscImageChef.Decoders/SCSI/Enums.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef.Helpers/DateHandlers.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.DiscImages/ImageInfo.cs: * DiscImageChef.Checksums/MD5Context.cs: * DiscImageChef.Devices/Linux/Extern.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Helpers/ArrayIsEmpty.cs: * DiscImageChef.Decoders/Blu-ray/BCA.cs: * DiscImageChef.Decoders/Blu-ray/DDS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Decoders/ATA/Identify.cs: * DiscImageChef.Devices/Linux/Command.cs: * DiscImageChef.Devices/FreeBSD/Enums.cs: * DiscImageChef.Decoders/SCSI/Inquiry.cs: * DiscImageChef.Metadata/DeviceReport.cs: * DiscImageChef.Decoders/Floppy/Amiga.cs: * DiscImageChef.Devices/Linux/Structs.cs: * DiscImageChef.Devices/Windows/Enums.cs: * DiscImageChef.Decoders/DVD/CSS&CPRM.cs: * DiscImageChef.Checksums/SHA1Context.cs: * DiscImageChef.DiscImages/DiskCopy42.cs: * DiscImageChef.Partitions/PartPlugin.cs: * DiscImageChef.CommonTypes/Partition.cs: * DiscImageChef.Decoders/Floppy/Enums.cs: * DiscImageChef.CommonTypes/MediaType.cs: * DiscImageChef.Decoders/Floppy/Apple2.cs: * DiscImageChef.Devices/Windows/Extern.cs: * DiscImageChef.Decoders/SCSI/MMC/CPRM.cs: * DiscImageChef.Helpers/StringHandlers.cs: * DiscImageChef.DiscImages/ImagePlugin.cs: * DiscImageChef.Checksums/CRC64Context.cs: * DiscImageChef.Checksums/CRC32Context.cs: * DiscImageChef.DiscImages/ZZZRawImage.cs: * DiscImageChef.Checksums/CRC16Context.cs: * DiscImageChef.Filesystems/LisaFS/Dir.cs: * DiscImageChef.Decoders/DVD/Cartridge.cs: * DiscImageChef.Decoders/Blu-ray/Spare.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Decoders/SCSI/MMC/AACS.cs: * DiscImageChef.Devices/FreeBSD/Extern.cs: * DiscImageChef.Devices/Device/Commands.cs: * DiscImageChef.Checksums/SHA384Context.cs: * DiscImageChef.Devices/FreeBSD/Command.cs: * DiscImageChef.Checksums/SHA512Context.cs: * DiscImageChef.Decoders/SCSI/MMC/Enums.cs: * DiscImageChef.Devices/Windows/Command.cs: * DiscImageChef.Devices/FreeBSD/Structs.cs: * DiscImageChef.Devices/Windows/Structs.cs: * DiscImageChef.Filesystems/LisaFS/Info.cs: * DiscImageChef.Checksums/SHA256Context.cs: * DiscImageChef.Filesystems/LisaFS/File.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: * DiscImageChef.Filesystems/LisaFS/Super.cs: * DiscImageChef.Filesystems/LisaFS/Xattr.cs: * DiscImageChef.Checksums/Adler32Context.cs: * DiscImageChef.Decoders/Floppy/System34.cs: * DiscImageChef.Checksums/SpamSumContext.cs: * DiscImageChef.Decoders/SCSI/MMC/Hybrid.cs: * DiscImageChef.Devices/Device/Variables.cs: * DiscImageChef.Filesystems/LisaFS/Consts.cs: * DiscImageChef.Filesystems/LisaFS/LisaFS.cs: * DiscImageChef.Decoders/Floppy/Commodore.cs: * DiscImageChef.Checksums/FletcherContext.cs: * DiscImageChef.Filesystems/LisaFS/Extent.cs: * DiscImageChef.Devices/Device/Destructor.cs: * DiscImageChef.Decoders/Floppy/AppleSony.cs: * DiscImageChef.Filesystems/LisaFS/Structs.cs: * DiscImageChef.Decoders/SCSI/VendorString.cs: * DiscImageChef.Decoders/SCSI/MMC/Features.cs: * DiscImageChef.Devices/Device/Constructor.cs: * DiscImageChef.Checksums/RIPEMD160Context.cs: * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: * DiscImageChef.Decoders/Blu-ray/Cartridge.cs: * DiscImageChef.Decoders/Floppy/System3740.cs: * DiscImageChef.Filesystems/LisaFS/Encoding.cs: * DiscImageChef.Decoders/SCSI/ModesEncoders.cs: * DiscImageChef.CommonTypes/MediaTypeFromSCSI.cs: * DiscImageChef.Helpers/BigEndianBitConverter.cs: * DiscImageChef.Decoders/Floppy/Perpendicular.cs: * DiscImageChef.Decoders/SCSI/SSC/BlockLimits.cs: * DiscImageChef.Decoders/SCSI/MMC/WriteProtect.cs: * DiscImageChef.Devices/Device/ScsiCommands/HP.cs: * DiscImageChef.Devices/Device/AtaCommands/Cfa.cs: * DiscImageChef.Devices/Device/ScsiCommands/NEC.cs: * DiscImageChef.Helpers/EndianAwareBinaryReader.cs: * DiscImageChef.Devices/Device/ScsiCommands/MMC.cs: * DiscImageChef.Devices/Device/AtaCommands/MCPT.cs: * DiscImageChef.Devices/Device/ScsiCommands/SSC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SPC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SMC.cs: * DiscImageChef.Devices/Device/ScsiCommands/SBC.cs: * DiscImageChef.Metadata/Properties/AssemblyInfo.cs: * DiscImageChef.Devices/Device/AtaCommands/Atapi.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata28.cs: * DiscImageChef.Devices/Device/AtaCommands/Smart.cs: * DiscImageChef.Decoders/SCSI/SSC/DensitySupport.cs: * DiscImageChef.Devices/Device/AtaCommands/Ata48.cs: * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: * DiscImageChef.Devices/Device/AtaCommands/AtaCHS.cs: * DiscImageChef.Devices/Device/ScsiCommands/SyQuest.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plextor.cs: * DiscImageChef.Devices/Device/ScsiCommands/Plasmon.cs: * DiscImageChef.Devices/Device/ScsiCommands/Pioneer.cs: * DiscImageChef.Devices/Device/ScsiCommands/Adaptec.cs: * DiscImageChef.Devices/Device/ScsiCommands/Fujitsu.cs: * DiscImageChef.Devices/Device/ScsiCommands/HL-DT-ST.cs: * DiscImageChef.Devices/Device/ScsiCommands/Certance.cs: * DiscImageChef.Decoders/SCSI/DiscStructureCapabilities.cs: * DiscImageChef.Devices/Device/ScsiCommands/ArchiveCorp.cs: Relicensed as LGPL. Updated standard header. * DiscImageChef/Main.cs: * DiscImageChef/Plugins.cs: * DiscImageChef/Options.cs: * DiscImageChef/Commands/Ls.cs: * DiscImageChef/Core/IBGLog.cs: * DiscImageChef/Core/MHDDLog.cs: * DiscImageChef/AssemblyInfo.cs: * DiscImageChef/Core/Checksum.cs: * DiscImageChef/Commands/Decode.cs: * DiscImageChef/Core/Statistics.cs: * DiscImageChef/Commands/Verify.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef/Commands/Entropy.cs: * DiscImageChef/Commands/Compare.cs: * DiscImageChef.Interop/DetectOS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef/Commands/Commands.cs: * DiscImageChef/Commands/PrintHex.cs: * DiscImageChef/Commands/Checksum.cs: * DiscImageChef/DetectImageFormat.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef/Commands/Benchmark.cs: * DiscImageChef/Commands/Configure.cs: * DiscImageChef/Commands/MediaInfo.cs: * DiscImageChef.Interop/PlatformID.cs: * DiscImageChef/Commands/MediaScan.cs: * DiscImageChef/Commands/Statistics.cs: * DiscImageChef/Commands/DeviceInfo.cs: * DiscImageChef.Checksums/ReedSolomon.cs: * DiscImageChef/Commands/DeviceReport.cs: * DiscImageChef/Commands/ExtractFiles.cs: * DiscImageChef.Checksums/CDChecksums.cs: * DiscImageChef/Commands/CreateSidecar.cs: Updated standard header. * DiscImageChef.Checksums/DiscImageChef.Checksums.csproj: Relicensed project as LGPL. Updated standard header. Embed license as resource. * DiscImageChef.Console/DiscImageChef.Console.csproj: * DiscImageChef.Devices/DiscImageChef.Devices.csproj: * DiscImageChef.Helpers/DiscImageChef.Helpers.csproj: * DiscImageChef.Settings/DiscImageChef.Settings.csproj: * DiscImageChef.Decoders/DiscImageChef.Decoders.csproj: * DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: * DiscImageChef.Partitions/DiscImageChef.Partitions.csproj: * DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj: * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: * DiscImageChef.CommonTypes/DiscImageChef.CommonTypes.csproj: Relicensed as LGPL. Updated standard header. Embed license as resource. * DiscImageChef/DiscImageChef.csproj: * DiscImageChef.Interop/DiscImageChef.Interop.csproj: Updated standard header. Embed license as resource.
2016-07-28 18:13:49 +01:00
using System;
using System.Diagnostics.CodeAnalysis;
2015-10-17 01:26:17 +01:00
using System.Text;
2020-02-27 00:33:24 +00:00
using Aaru.CommonTypes.Structs.Devices.SCSI;
using Aaru.Localization;
namespace Aaru.Decoders.ATA;
2022-03-06 13:29:37 +00:00
// Information from following standards:
// T10-791D rev. 4c (ATA)
// T10-948D rev. 4c (ATA-2)
// T13-1153D rev. 18 (ATA/ATAPI-4)
// T13-1321D rev. 3 (ATA/ATAPI-5)
// T13-1410D rev. 3b (ATA/ATAPI-6)
// T13-1532D rev. 4b (ATA/ATAPI-7)
// T13-1699D rev. 3f (ATA8-ACS)
// T13-1699D rev. 4a (ATA8-ACS)
// T13-2015D rev. 2 (ACS-2)
// T13-2161D rev. 5 (ACS-3)
// CF+ & CF Specification rev. 1.4 (CFA)
2023-10-03 23:09:28 +01:00
[SuppressMessage("ReSharper", "InconsistentNaming")]
[SuppressMessage("ReSharper", "MemberCanBeInternal")]
[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
2022-03-06 13:29:37 +00:00
public static class Identify
{
2022-03-06 13:29:37 +00:00
public static string Prettify(byte[] IdentifyDeviceResponse)
{
2024-05-01 04:05:22 +01:00
if(IdentifyDeviceResponse.Length != 512) return null;
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
CommonTypes.Structs.Devices.ATA.Identify.IdentifyDevice? decoded =
CommonTypes.Structs.Devices.ATA.Identify.Decode(IdentifyDeviceResponse);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
return Prettify(decoded);
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
public static string Prettify(CommonTypes.Structs.Devices.ATA.Identify.IdentifyDevice? IdentifyDeviceResponse)
{
2024-05-01 04:05:22 +01:00
if(IdentifyDeviceResponse == null) return null;
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
var sb = new StringBuilder();
2015-10-17 01:26:17 +01:00
2023-10-03 23:09:28 +01:00
var atapi = false;
var cfa = false;
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
CommonTypes.Structs.Devices.ATA.Identify.IdentifyDevice ATAID = IdentifyDeviceResponse.Value;
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.NonMagnetic))
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
if((ushort)ATAID.GeneralConfiguration != 0x848A)
atapi = true;
2019-11-25 00:54:38 +00:00
else
2022-03-06 13:29:37 +00:00
cfa = true;
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(atapi)
sb.AppendLine(Localization.ATAPI_device);
2022-03-06 13:29:37 +00:00
else if(cfa)
sb.AppendLine(Localization.CompactFlash_device);
2022-03-06 13:29:37 +00:00
else
sb.AppendLine(Localization.ATA_device);
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.Model != "") sb.AppendFormat(Core.Model_0, ATAID.Model).AppendLine();
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.FirmwareRevision != "") sb.AppendFormat(Core.Firmware_revision_0, ATAID.FirmwareRevision).AppendLine();
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SerialNumber != "") sb.AppendFormat(Core.Serial_number_0, ATAID.SerialNumber).AppendLine();
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.AdditionalPID != "")
sb.AppendFormat(Localization.Additional_product_ID_0, ATAID.AdditionalPID).AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MustBeSet) &&
!ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MustBeClear))
{
2022-03-07 07:36:42 +00:00
if(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MediaSerial))
2022-03-06 13:29:37 +00:00
{
if(ATAID.MediaManufacturer != "")
sb.AppendFormat(Core.Media_manufacturer_0, ATAID.MediaManufacturer).AppendLine();
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.MediaSerial != "") sb.AppendFormat(Core.Media_serial_number_0, ATAID.MediaSerial).AppendLine();
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.WWN))
sb.AppendFormat(Localization.World_Wide_Name_0, ATAID.WWN).AppendLine();
2022-03-06 13:29:37 +00:00
}
2015-10-17 01:26:17 +01:00
2023-10-03 23:09:28 +01:00
bool ata1 = false,
ata2 = false,
ata3 = false,
ata4 = false,
ata5 = false,
ata6 = false,
ata7 = false,
acs = false,
acs2 = false,
acs3 = false,
acs4 = false;
2015-10-17 01:26:17 +01:00
if((ushort)ATAID.MajorVersion == 0x0000 || (ushort)ATAID.MajorVersion == 0xFFFF)
2022-03-06 13:29:37 +00:00
{
// Obsolete in ATA-2, if present, device supports ATA-1
ata1 |=
2024-05-01 04:05:22 +01:00
ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.FastIDE) ||
ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.SlowIDE) ||
ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.UltraFastIDE);
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
ata2 |= ATAID.ExtendedIdentify.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.ExtendedIdentifyBit
.Words64to70Valid);
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(!ata1 && !ata2 && !atapi && !cfa) ata2 = true;
2022-03-06 13:29:37 +00:00
ata4 |= atapi;
ata3 |= cfa;
2024-05-01 04:05:22 +01:00
if(cfa && ata1) ata1 = false;
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(cfa && ata2) ata2 = false;
2022-03-06 13:29:37 +00:00
ata5 |= ATAID.Signature == 0xA5;
}
else
{
ata1 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.Ata1);
ata2 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.Ata2);
ata3 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.Ata3);
ata4 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.AtaAtapi4);
ata5 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.AtaAtapi5);
ata6 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.AtaAtapi6);
ata7 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.AtaAtapi7);
acs |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.Ata8ACS);
acs2 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.ACS2);
acs3 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.ACS3);
acs4 |= ATAID.MajorVersion.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.MajorVersionBit.ACS4);
}
2019-11-25 00:54:38 +00:00
2023-10-03 23:09:28 +01:00
var maxatalevel = 0;
var minatalevel = 255;
sb.Append(Localization.Supported_ATA_versions);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ata1)
{
sb.Append("ATA-1 ");
maxatalevel = 1;
minatalevel = 1;
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata2)
{
sb.Append("ATA-2 ");
maxatalevel = 2;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 2) minatalevel = 2;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata3)
{
sb.Append("ATA-3 ");
maxatalevel = 3;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 3) minatalevel = 3;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata4)
{
sb.Append("ATA/ATAPI-4 ");
maxatalevel = 4;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 4) minatalevel = 4;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata5)
{
sb.Append("ATA/ATAPI-5 ");
maxatalevel = 5;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 5) minatalevel = 5;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata6)
{
sb.Append("ATA/ATAPI-6 ");
maxatalevel = 6;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 6) minatalevel = 6;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata7)
{
sb.Append("ATA/ATAPI-7 ");
maxatalevel = 7;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 7) minatalevel = 7;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(acs)
{
sb.Append("ATA8-ACS ");
maxatalevel = 8;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 8) minatalevel = 8;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(acs2)
{
sb.Append("ATA8-ACS2 ");
maxatalevel = 9;
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(minatalevel > 9) minatalevel = 9;
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(acs3)
{
sb.Append("ATA8-ACS3 ");
maxatalevel = 10;
2024-05-01 04:05:22 +01:00
if(minatalevel > 10) minatalevel = 10;
2022-03-06 13:29:37 +00:00
}
if(acs4)
{
sb.Append("ATA8-ACS4 ");
maxatalevel = 11;
2024-05-01 04:05:22 +01:00
if(minatalevel > 11) minatalevel = 11;
2022-03-06 13:29:37 +00:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
sb.AppendLine();
sb.Append(Localization.Maximum_ATA_revision_supported);
2022-03-06 13:29:37 +00:00
if(maxatalevel >= 3)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
switch(ATAID.MinorVersion)
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
case 0x0000:
case 0xFFFF:
sb.AppendLine(Localization.Minor_ATA_version_not_specified);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0001:
sb.AppendLine(Localization.ATA_ATA_1_X3T9_2_781D_prior_to_revision_4);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
break;
case 0x0002:
sb.AppendLine(Localization.ATA_1_published_ANSI_X3_221_1994);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
case 0x0003:
sb.AppendLine(Localization.ATA_ATA_1_X3T9_2_781D_revision_4);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0004:
sb.AppendLine(Localization.ATA_2_published_ANSI_X3_279_1996);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0005:
sb.AppendLine(Localization.ATA_2_X3T10_948D_prior_to_revision_2k);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0006:
sb.AppendLine(Localization.ATA_3_X3T10_2008D_revision_1);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0007:
sb.AppendLine(Localization.ATA_2_X3T10_948D_revision_2k);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0008:
sb.AppendLine(Localization.ATA_3_X3T10_2008D_revision_0);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0009:
sb.AppendLine(Localization.ATA_2_X3T10_948D_revision_3);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x000A:
sb.AppendLine(Localization.ATA_3_published_ANSI_X3_298_1997);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x000B:
sb.AppendLine(Localization.ATA_3_X3T10_2008D_revision_6);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x000C:
sb.AppendLine(Localization.ATA_3_X3T13_2008D_revision_7);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x000D:
sb.AppendLine(Localization.ATA_ATAPI_4_X3T13_1153D_revision_6);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x000E:
sb.AppendLine(Localization.ATA_ATAPI_4_T13_1153D_revision_13);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x000F:
sb.AppendLine(Localization.ATA_ATAPI_4_X3T13_1153D_revision_7);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0010:
sb.AppendLine(Localization.ATA_ATAPI_4_T13_1153D_revision_18);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0011:
sb.AppendLine(Localization.ATA_ATAPI_4_T13_1153D_revision_15);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0012:
sb.AppendLine(Localization.ATA_ATAPI_4_published_ANSI_INCITS_317_1998);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0013:
sb.AppendLine(Localization.ATA_ATAPI_5_T13_1321D_revision_3);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0014:
sb.AppendLine(Localization.ATA_ATAPI_4_T13_1153D_revision_14);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0015:
sb.AppendLine(Localization.ATA_ATAPI_5_T13_1321D_revision_1);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0016:
sb.AppendLine(Localization.ATA_ATAPI_5_published_ANSI_INCITS_340_2000);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0017:
sb.AppendLine(Localization.ATA_ATAPI_4_T13_1153D_revision_17);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0018:
sb.AppendLine(Localization.ATA_ATAPI_6_T13_1410D_revision_0);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0019:
sb.AppendLine(Localization.ATA_ATAPI_6_T13_1410D_revision_3a);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x001A:
sb.AppendLine(Localization.ATA_ATAPI_7_T13_1532D_revision_1);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x001B:
sb.AppendLine(Localization.ATA_ATAPI_6_T13_1410D_revision_2);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x001C:
sb.AppendLine(Localization.ATA_ATAPI_6_T13_1410D_revision_1);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x001D:
sb.AppendLine(Localization.ATA_ATAPI_7_published_ANSI_INCITS_397_2005);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x001E:
sb.AppendLine(Localization.ATA_ATAPI_7_T13_1532D_revision_0);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x001F:
sb.AppendLine(Localization.ACS_3_Revision_3b);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0021:
sb.AppendLine(Localization.ATA_ATAPI_7_T13_1532D_revision_4a);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0022:
sb.AppendLine(Localization.ATA_ATAPI_6_published_ANSI_INCITS_361_2002);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0027:
sb.AppendLine(Localization.ATA8_ACS_revision_3c);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0028:
sb.AppendLine(Localization.ATA8_ACS_revision_6);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0029:
sb.AppendLine(Localization.ATA8_ACS_revision_4);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0031:
sb.AppendLine(Localization.ACS_2_Revision_2);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0033:
sb.AppendLine(Localization.ATA8_ACS_Revision_3e);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0039:
sb.AppendLine(Localization.ATA8_ACS_Revision_4c);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0042:
sb.AppendLine(Localization.ATA8_ACS_Revision_3f);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0052:
sb.AppendLine(Localization.ATA8_ACS_revision_3b);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x006D:
sb.AppendLine(Localization.ACS_3_Revision_5);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0082:
sb.AppendLine(Localization.ACS_2_published_ANSI_INCITS_482_2012);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0107:
sb.AppendLine(Localization.ATA8_ACS_revision_2d);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x0110:
sb.AppendLine(Localization.ACS_2_Revision_3);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0x011B:
sb.AppendLine(Localization.ACS_3_Revision_4);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
sb.AppendFormat(Localization.Unknown_ATA_revision_0, ATAID.MinorVersion).AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
}
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
switch((ATAID.TransportMajorVersion & 0xF000) >> 12)
{
case 0x0:
sb.Append(Localization.Parallel_ATA_device);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0002) == 0x0002) sb.Append("ATA/ATAPI-7 ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0001) == 0x0001) sb.Append("ATA8-APT ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
sb.AppendLine();
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
case 0x1:
sb.Append(Localization.Serial_ATA_device);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0001) == 0x0001) sb.Append("ATA8-AST ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0002) == 0x0002) sb.Append("SATA 1.0a ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0004) == 0x0004) sb.Append("SATA II Extensions ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0008) == 0x0008) sb.Append("SATA 2.5 ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0010) == 0x0010) sb.Append("SATA 2.6 ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0020) == 0x0020) sb.Append("SATA 3.0 ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if((ATAID.TransportMajorVersion & 0x0040) == 0x0040) sb.Append("SATA 3.1 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
sb.AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 0xE:
sb.AppendLine(Localization.SATA_Express_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
2024-05-01 04:05:22 +01:00
sb.AppendFormat(Localization.Unknown_transport_type_0, (ATAID.TransportMajorVersion & 0xF000) >> 12)
.AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(atapi)
{
// Bits 12 to 8, SCSI Peripheral Device Type
switch((PeripheralDeviceTypes)(((ushort)ATAID.GeneralConfiguration & 0x1F00) >> 8))
{
case PeripheralDeviceTypes.DirectAccess: //0x00,
sb.AppendLine(Localization.ATAPI_Direct_access_device);
2019-11-25 00:54:38 +00:00
2015-10-17 01:26:17 +01:00
break;
2022-03-06 13:29:37 +00:00
case PeripheralDeviceTypes.SequentialAccess: //0x01,
sb.AppendLine(Localization.ATAPI_Sequential_access_device);
2019-11-25 00:54:38 +00:00
2015-10-17 01:26:17 +01:00
break;
2022-03-06 13:29:37 +00:00
case PeripheralDeviceTypes.PrinterDevice: //0x02,
sb.AppendLine(Localization.ATAPI_Printer_device);
2019-11-25 00:54:38 +00:00
2015-10-17 01:26:17 +01:00
break;
2022-03-06 13:29:37 +00:00
case PeripheralDeviceTypes.ProcessorDevice: //0x03,
sb.AppendLine(Localization.ATAPI_Processor_device);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.WriteOnceDevice: //0x04,
sb.AppendLine(Localization.ATAPI_Write_once_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.MultiMediaDevice: //0x05,
sb.AppendLine(Localization.ATAPI_CD_ROM_DVD_etc_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.ScannerDevice: //0x06,
sb.AppendLine(Localization.ATAPI_Scanner_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.OpticalDevice: //0x07,
sb.AppendLine(Localization.ATAPI_Optical_memory_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.MediumChangerDevice: //0x08,
sb.AppendLine(Localization.ATAPI_Medium_change_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.CommsDevice: //0x09,
sb.AppendLine(Localization.ATAPI_Communications_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.PrePressDevice1: //0x0A,
sb.AppendLine(Localization.ATAPI_Graphics_arts_pre_press_device_defined_in_ASC_IT8);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.PrePressDevice2: //0x0B,
sb.AppendLine(Localization.ATAPI_Graphics_arts_pre_press_device_defined_in_ASC_IT8);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.ArrayControllerDevice: //0x0C,
sb.AppendLine(Localization.ATAPI_Array_controller_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.EnclosureServiceDevice: //0x0D,
sb.AppendLine(Localization.ATAPI_Enclosure_services_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.SimplifiedDevice: //0x0E,
sb.AppendLine(Localization.ATAPI_Simplified_direct_access_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.OCRWDevice: //0x0F,
sb.AppendLine(Localization.ATAPI_Optical_card_reader_writer_device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.BridgingExpander: //0x10,
sb.AppendLine(Localization.ATAPI_Bridging_Expanders);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.ObjectDevice: //0x11,
sb.AppendLine(Localization.ATAPI_Object_based_Storage_Device);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.ADCDevice: //0x12,
sb.AppendLine(Localization.ATAPI_Automation_Drive_Interface);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.WellKnownDevice: //0x1E,
sb.AppendLine(Localization.ATAPI_Well_known_logical_unit);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case PeripheralDeviceTypes.UnknownDevice: //0x1F
sb.AppendLine(Localization.ATAPI_Unknown_or_no_device_type);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
sb.AppendFormat(Localization.ATAPI_Unknown_device_type_field_value_0,
2024-05-01 04:05:22 +01:00
((ushort)ATAID.GeneralConfiguration & 0x1F00) >> 8)
.AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
// ATAPI DRQ behaviour
switch(((ushort)ATAID.GeneralConfiguration & 0x60) >> 5)
{
case 0:
sb.AppendLine(Localization.Device_shall_set_DRQ_within_3_ms_of_receiving_PACKET);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 1:
sb.AppendLine(Localization.Device_shall_assert_INTRQ_when_DRQ_is_set_to_one);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 2:
sb.AppendLine(Localization.Device_shall_set_DRQ_within_50_µs_of_receiving_PACKET);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
sb.AppendFormat(Localization.Unknown_ATAPI_DRQ_behaviour_code_0,
2024-05-01 04:05:22 +01:00
((ushort)ATAID.GeneralConfiguration & 0x60) >> 5)
.AppendLine();
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
// ATAPI PACKET size
switch((ushort)ATAID.GeneralConfiguration & 0x03)
{
case 0:
sb.AppendLine(Localization.ATAPI_device_uses_12_byte_command_packet);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 1:
sb.AppendLine(Localization.ATAPI_device_uses_16_byte_command_packet);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
sb.AppendFormat(Localization.Unknown_ATAPI_packet_size_code_0,
2024-05-01 04:05:22 +01:00
(ushort)ATAID.GeneralConfiguration & 0x03)
.AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
}
}
else if(!cfa)
{
if(minatalevel >= 5)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.IncompleteResponse))
sb.AppendLine(Localization.Incomplete_identify_response);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.NonMagnetic))
sb.AppendLine(Localization.Device_uses_non_magnetic_media);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.Removable))
sb.AppendLine(Localization.Device_is_removable);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(minatalevel <= 5)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.Fixed))
sb.AppendLine(Localization.Device_is_fixed);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata1)
2015-10-17 01:26:17 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.SlowIDE))
sb.AppendLine(Localization.Device_transfer_rate_less_than_5_Mbs);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.FastIDE))
sb.AppendLine(Localization.Device_transfer_rate_is_more_5_Mbs_less_10_Mbs);
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.UltraFastIDE))
sb.AppendLine(Localization.Device_transfer_rate_more_than_10_Mbs);
2016-04-19 02:11:47 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.SoftSector))
sb.AppendLine(Localization.Device_is_soft_sectored);
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.HardSector))
sb.AppendLine(Localization.Device_is_hard_sectored);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.NotMFM))
sb.AppendLine(Localization.Device_is_not_MFM_encoded);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.FormatGapReq))
sb.AppendLine(Localization.Format_speed_tolerance_gap_is_required);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.TrackOffset))
sb.AppendLine(Localization.Track_offset_option_is_available);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.DataStrobeOffset))
sb.AppendLine(Localization.Data_strobe_offset_option_is_available);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.RotationalSpeedTolerance))
sb.AppendLine(Localization.Rotational_speed_tolerance_is_higher_than_0_5_percent);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.SpindleControl))
sb.AppendLine(Localization.Spindle_motor_control_is_implemented);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.GeneralConfiguration.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.GeneralConfigurationBit
.HighHeadSwitch))
sb.AppendLine(Localization.Head_switch_time_is_bigger_than_15_µs);
2022-03-06 13:29:37 +00:00
}
}
2019-11-25 00:54:38 +00:00
if(ATAID.NominalRotationRate != 0x0000 && ATAID.NominalRotationRate != 0xFFFF)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
if(ATAID.NominalRotationRate == 0x0001)
sb.AppendLine(Localization.Device_does_not_rotate);
2022-03-06 13:29:37 +00:00
else
sb.AppendFormat(Localization.Device_rotates_at_0_rpm, ATAID.NominalRotationRate).AppendLine();
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
uint logicalSectorSize = 0;
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(!atapi)
{
uint physicalSectorSize;
2019-11-25 00:54:38 +00:00
if((ATAID.PhysLogSectorSize & 0x8000) == 0x0000 && (ATAID.PhysLogSectorSize & 0x4000) == 0x4000)
2022-03-06 13:29:37 +00:00
{
if((ATAID.PhysLogSectorSize & 0x1000) == 0x1000)
2023-10-03 23:09:28 +01:00
{
if(ATAID.LogicalSectorWords <= 255 || ATAID.LogicalAlignment == 0xFFFF)
2022-03-06 13:29:37 +00:00
logicalSectorSize = 512;
else
logicalSectorSize = ATAID.LogicalSectorWords * 2;
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
else
logicalSectorSize = 512;
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if((ATAID.PhysLogSectorSize & 0x2000) == 0x2000)
physicalSectorSize = logicalSectorSize * (uint)Math.Pow(2, ATAID.PhysLogSectorSize & 0xF);
2018-06-22 08:08:38 +01:00
else
2022-03-06 13:29:37 +00:00
physicalSectorSize = logicalSectorSize;
}
else
{
logicalSectorSize = 512;
physicalSectorSize = 512;
}
2015-10-17 01:26:17 +01:00
sb.AppendFormat(Localization.Physical_sector_size_0_bytes, physicalSectorSize).AppendLine();
2023-10-03 23:09:28 +01:00
sb.AppendFormat(Localization.Logical_sector_size_0_bytes, logicalSectorSize).AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(logicalSectorSize != physicalSectorSize &&
(ATAID.LogicalAlignment & 0x8000) == 0x0000 &&
(ATAID.LogicalAlignment & 0x4000) == 0x4000)
2023-10-03 23:09:28 +01:00
{
sb.AppendFormat(Localization.Logical_sector_starts_at_offset_0_from_physical_sector,
2024-05-01 04:05:22 +01:00
ATAID.LogicalAlignment & 0x3FFF)
.AppendLine();
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(minatalevel <= 5)
2023-10-03 23:09:28 +01:00
{
if(ATAID.CurrentCylinders > 0 && ATAID is { CurrentHeads: > 0, CurrentSectorsPerTrack: > 0 })
2015-10-17 01:26:17 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendFormat(Localization.Cylinders_0_max_1_current, ATAID.Cylinders, ATAID.CurrentCylinders)
.AppendLine();
2015-10-17 01:26:17 +01:00
sb.AppendFormat(Localization.Heads_0_max_1_current, ATAID.Heads, ATAID.CurrentHeads).AppendLine();
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendFormat(Localization.Sectors_per_track_0_max_1_current,
ATAID.SectorsPerTrack,
ATAID.CurrentSectorsPerTrack)
.AppendLine();
2022-03-06 13:29:37 +00:00
sb.AppendFormat(Localization.Sectors_addressable_in_CHS_mode_0_max_1_current,
2024-05-01 04:05:22 +01:00
ATAID.Cylinders * ATAID.Heads * ATAID.SectorsPerTrack,
ATAID.CurrentSectors)
.AppendLine();
2015-10-17 01:26:17 +01:00
}
else
{
2023-10-03 23:09:28 +01:00
sb.AppendFormat(Localization.Cylinders_0, ATAID.Cylinders).AppendLine();
sb.AppendFormat(Localization.Heads_0, ATAID.Heads).AppendLine();
sb.AppendFormat(Localization.Sectors_per_track_0, ATAID.SectorsPerTrack).AppendLine();
2015-10-17 01:26:17 +01:00
sb.AppendFormat(Localization.Sectors_addressable_in_CHS_mode_0,
2024-05-01 04:05:22 +01:00
ATAID.Cylinders * ATAID.Heads * ATAID.SectorsPerTrack)
.AppendLine();
2022-03-06 13:29:37 +00:00
}
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.LBASupport))
sb.AppendFormat(Localization._0_sectors_in_28_bit_LBA_mode, ATAID.LBASectors).AppendLine();
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.LBA48))
sb.AppendFormat(Localization._0_sectors_in_48_bit_LBA_mode, ATAID.LBA48Sectors).AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(minatalevel <= 5)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
if(ATAID.CurrentSectors > 0)
2023-10-03 23:09:28 +01:00
{
sb.AppendFormat(Localization.Device_size_in_CHS_mode_0_bytes_1_Mb_2_MiB,
2022-03-06 13:29:37 +00:00
(ulong)ATAID.CurrentSectors * logicalSectorSize,
(ulong)ATAID.CurrentSectors * logicalSectorSize / 1000 / 1000,
2024-05-01 04:05:22 +01:00
(ulong)ATAID.CurrentSectors * 512 / 1024 / 1024)
.AppendLine();
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
else
{
2023-10-03 23:09:28 +01:00
var currentSectors = (ulong)(ATAID.Cylinders * ATAID.Heads * ATAID.SectorsPerTrack);
2019-11-25 00:54:38 +00:00
sb.AppendFormat(Localization.Device_size_in_CHS_mode_0_bytes_1_Mb_2_MiB,
2022-03-06 13:29:37 +00:00
currentSectors * logicalSectorSize,
currentSectors * logicalSectorSize / 1000 / 1000,
2024-05-01 04:05:22 +01:00
currentSectors * 512 / 1024 / 1024)
.AppendLine();
2022-03-06 13:29:37 +00:00
}
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.LBASupport))
2023-10-03 23:09:28 +01:00
{
2022-11-13 19:38:02 +00:00
switch((ulong)ATAID.LBASectors * logicalSectorSize / 1024 / 1024)
{
case > 1000000:
sb.AppendFormat(Localization.Device_size_in_28_bit_LBA_mode_0_bytes_1_Tb_2_TiB,
(ulong)ATAID.LBASectors * logicalSectorSize,
2022-11-13 19:38:02 +00:00
(ulong)ATAID.LBASectors * logicalSectorSize / 1000 / 1000 / 1000 / 1000,
2024-05-01 04:05:22 +01:00
(ulong)ATAID.LBASectors * 512 / 1024 / 1024 / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
case > 1000:
sb.AppendFormat(Localization.Device_size_in_28_bit_LBA_mode_0_bytes_1_Gb_2_GiB,
2022-11-13 19:38:02 +00:00
(ulong)ATAID.LBASectors * logicalSectorSize,
(ulong)ATAID.LBASectors * logicalSectorSize / 1000 / 1000 / 1000,
2024-05-01 04:05:22 +01:00
(ulong)ATAID.LBASectors * 512 / 1024 / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
default:
sb.AppendFormat(Localization.Device_size_in_28_bit_LBA_mode_0_bytes_1_Mb_2_MiB,
2022-11-13 19:38:02 +00:00
(ulong)ATAID.LBASectors * logicalSectorSize,
(ulong)ATAID.LBASectors * logicalSectorSize / 1000 / 1000,
2024-05-01 04:05:22 +01:00
(ulong)ATAID.LBASectors * 512 / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
}
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.LBA48))
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.ExtSectors))
2023-10-03 23:09:28 +01:00
{
2022-11-13 19:38:02 +00:00
switch(ATAID.ExtendedUserSectors * logicalSectorSize / 1024 / 1024)
{
case > 1000000:
sb.AppendFormat(Localization.Device_size_in_48_bit_LBA_mode_0_bytes_1_Tb_2_TiB,
2022-11-13 19:38:02 +00:00
ATAID.ExtendedUserSectors * logicalSectorSize,
ATAID.ExtendedUserSectors * logicalSectorSize / 1000 / 1000 / 1000 / 1000,
2024-05-01 04:05:22 +01:00
ATAID.ExtendedUserSectors * logicalSectorSize / 1024 / 1024 / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
case > 1000:
sb.AppendFormat(Localization.Device_size_in_48_bit_LBA_mode_0_bytes_1_Gb_2_GiB,
2022-11-13 19:38:02 +00:00
ATAID.ExtendedUserSectors * logicalSectorSize,
ATAID.ExtendedUserSectors * logicalSectorSize / 1000 / 1000 / 1000,
2024-05-01 04:05:22 +01:00
ATAID.ExtendedUserSectors * logicalSectorSize / 1024 / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
default:
sb.AppendFormat(Localization.Device_size_in_48_bit_LBA_mode_0_bytes_1_Mb_2_MiB,
2022-11-13 19:38:02 +00:00
ATAID.ExtendedUserSectors * logicalSectorSize,
ATAID.ExtendedUserSectors * logicalSectorSize / 1000 / 1000,
2024-05-01 04:05:22 +01:00
ATAID.ExtendedUserSectors * logicalSectorSize / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
}
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
else
2023-10-03 23:09:28 +01:00
{
2022-11-13 19:38:02 +00:00
switch(ATAID.LBA48Sectors * logicalSectorSize / 1024 / 1024)
{
case > 1000000:
sb.AppendFormat(Localization.Device_size_in_48_bit_LBA_mode_0_bytes_1_Tb_2_TiB,
2022-11-13 19:38:02 +00:00
ATAID.LBA48Sectors * logicalSectorSize,
ATAID.LBA48Sectors * logicalSectorSize / 1000 / 1000 / 1000 / 1000,
2024-05-01 04:05:22 +01:00
ATAID.LBA48Sectors * logicalSectorSize / 1024 / 1024 / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
case > 1000:
sb.AppendFormat(Localization.Device_size_in_48_bit_LBA_mode_0_bytes_1_Gb_2_GiB,
2022-11-13 19:38:02 +00:00
ATAID.LBA48Sectors * logicalSectorSize,
ATAID.LBA48Sectors * logicalSectorSize / 1000 / 1000 / 1000,
2024-05-01 04:05:22 +01:00
ATAID.LBA48Sectors * logicalSectorSize / 1024 / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
default:
sb.AppendFormat(Localization.Device_size_in_48_bit_LBA_mode_0_bytes_1_Mb_2_MiB,
2022-11-13 19:38:02 +00:00
ATAID.LBA48Sectors * logicalSectorSize,
ATAID.LBA48Sectors * logicalSectorSize / 1000 / 1000,
2024-05-01 04:05:22 +01:00
ATAID.LBA48Sectors * logicalSectorSize / 1024 / 1024)
.AppendLine();
2022-11-13 19:38:02 +00:00
break;
}
2023-10-03 23:09:28 +01:00
}
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ata1 || cfa)
{
2024-05-01 04:05:22 +01:00
if(cfa) sb.AppendFormat(Localization._0_sectors_in_card, ATAID.SectorsPerCard).AppendLine();
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UnformattedBPT > 0)
sb.AppendFormat(Localization._0_bytes_per_unformatted_track, ATAID.UnformattedBPT).AppendLine();
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UnformattedBPS > 0)
sb.AppendFormat(Localization._0_bytes_per_unformatted_sector, ATAID.UnformattedBPS).AppendLine();
2022-03-06 13:29:37 +00:00
}
}
2015-10-17 01:26:17 +01:00
if((ushort)ATAID.SpecificConfiguration != 0x0000 && (ushort)ATAID.SpecificConfiguration != 0xFFFF)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
switch(ATAID.SpecificConfiguration)
{
2022-03-07 07:36:42 +00:00
case CommonTypes.Structs.Devices.ATA.Identify.SpecificConfigurationEnum.RequiresSetIncompleteResponse:
2024-05-01 04:05:22 +01:00
sb.AppendLine(Localization
.Device_requires_SET_FEATURES_to_spin_up_and_IDENTIFY_DEVICE_response_is_incomplete);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case CommonTypes.Structs.Devices.ATA.Identify.SpecificConfigurationEnum.RequiresSetCompleteResponse:
2024-05-01 04:05:22 +01:00
sb.AppendLine(Localization
.Device_requires_SET_FEATURES_to_spin_up_and_IDENTIFY_DEVICE_response_is_complete);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
2024-05-01 04:05:22 +01:00
case CommonTypes.Structs.Devices.ATA.Identify.SpecificConfigurationEnum
.NotRequiresSetIncompleteResponse:
sb.AppendLine(Localization
.Device_does_not_require_SET_FEATURES_to_spin_up_and_IDENTIFY_DEVICE_response_is_incomplete);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
2022-03-07 07:36:42 +00:00
case CommonTypes.Structs.Devices.ATA.Identify.SpecificConfigurationEnum.NotRequiresSetCompleteResponse:
2024-05-01 04:05:22 +01:00
sb.AppendLine(Localization
.Device_does_not_require_SET_FEATURES_to_spin_up_and_IDENTIFY_DEVICE_response_is_complete);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
sb.AppendFormat(Localization.Unknown_device_specific_configuration_0,
2024-05-01 04:05:22 +01:00
(ushort)ATAID.SpecificConfiguration)
.AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
2015-10-17 01:26:17 +01:00
}
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
// Obsolete since ATA-2, however, it is yet used in ATA-8 devices
if(ATAID.BufferSize != 0x0000 &&
ATAID.BufferSize != 0xFFFF &&
ATAID.BufferType != 0x0000 &&
ATAID.BufferType != 0xFFFF)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
switch(ATAID.BufferType)
{
case 1:
sb.AppendFormat(Localization._0_KiB_of_single_ported_single_sector_buffer,
2024-05-01 04:05:22 +01:00
ATAID.BufferSize * 512 / 1024)
.AppendLine();
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
case 2:
sb.AppendFormat(Localization._0_KiB_of_dual_ported_multi_sector_buffer,
2024-05-01 04:05:22 +01:00
ATAID.BufferSize * 512 / 1024)
.AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case 3:
sb.AppendFormat(Localization._0_KiB_of_dual_ported_multi_sector_buffer_with_read_caching,
2024-05-01 04:05:22 +01:00
ATAID.BufferSize * 512 / 1024)
.AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
2024-05-01 04:05:22 +01:00
sb.AppendFormat(Localization._0_KiB_of_unknown_type_1_buffer,
ATAID.BufferSize * 512 / 1024,
ATAID.BufferType)
.AppendLine();
2022-03-06 13:29:37 +00:00
break;
}
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
if(ATAID.EccBytes != 0x0000 && ATAID.EccBytes != 0xFFFF)
sb.AppendFormat(Localization.READ_WRITE_LONG_has_0_extra_bytes, ATAID.EccBytes).AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
sb.AppendLine();
sb.Append(Localization.Device_capabilities);
2022-03-06 13:29:37 +00:00
2022-03-07 07:36:42 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.StandardStandbyTimer))
sb.AppendLine().Append(Localization.Standby_time_values_are_standard);
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.IORDY))
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit
.CanDisableIORDY)
2023-10-03 23:09:28 +01:00
? Localization.IORDY_is_supported_and_can_be_disabled
: Localization.IORDY_is_supported);
2022-03-06 13:29:37 +00:00
}
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.DMASupport))
sb.AppendLine().Append(Localization.DMA_is_supported);
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit2.MustBeSet) &&
!ATAID.Capabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit2.MustBeClear))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.Capabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit2
.SpecificStandbyTimer))
sb.AppendLine().Append(Localization.Device_indicates_a_specific_minimum_standby_timer_value);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit3.MultipleValid))
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.A_maximum_of_0_sectors_can_be_transferred_per_interrupt_on_READ_WRITE_MULTIPLE,
2022-03-06 13:29:37 +00:00
ATAID.MultipleSectorNumber);
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.Device_supports_setting_a_maximum_of_0_sectors, ATAID.MultipleMaxSectors);
2022-03-06 13:29:37 +00:00
}
2022-03-07 07:36:42 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.PhysicalAlignment1) ||
2022-03-06 13:29:37 +00:00
ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.PhysicalAlignment0))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.Long_Physical_Alignment_setting_is_0, (ushort)ATAID.Capabilities & 0x03);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
if(ata1)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.TrustedComputing.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TrustedComputingBit
.TrustedComputing))
sb.AppendLine().Append(Localization.Device_supports_doubleword_IO);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
if(atapi)
{
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.InterleavedDMA))
sb.AppendLine().Append(Localization.ATAPI_device_supports_interleaved_DMA);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.CommandQueue))
sb.AppendLine().Append(Localization.ATAPI_device_supports_command_queueing);
2015-10-17 01:26:17 +01:00
2022-03-07 07:36:42 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.OverlapOperation))
sb.AppendLine().Append(Localization.ATAPI_device_supports_overlapped_operations);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit
.RequiresATASoftReset))
sb.AppendLine().Append(Localization.ATAPI_device_requires_ATA_software_reset);
2022-03-06 13:29:37 +00:00
}
if(minatalevel <= 3)
{
sb.AppendLine().AppendFormat(Localization.PIO_timing_mode_0, ATAID.PIOTransferTimingMode);
sb.AppendLine().AppendFormat(Localization.DMA_timing_mode_0, ATAID.DMATransferTimingMode);
2022-03-06 13:29:37 +00:00
}
sb.AppendLine().Append(Localization.Advanced_PIO);
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode0)) sb.Append("PIO0 ");
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode1)) sb.Append("PIO1 ");
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode2)) sb.Append("PIO2 ");
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode3)) sb.Append("PIO3 ");
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode4)) sb.Append("PIO4 ");
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode5)) sb.Append("PIO5 ");
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode6)) sb.Append("PIO6 ");
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.APIOSupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode7)) sb.Append("PIO7 ");
2022-03-06 13:29:37 +00:00
if(minatalevel <= 3 && !atapi)
2022-03-06 13:29:37 +00:00
{
sb.AppendLine().Append(Localization.Single_word_DMA);
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode0))
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
sb.Append("DMA0 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode0))
sb.Append(Localization._active_);
2015-10-17 01:26:17 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode1))
{
sb.Append("DMA1 ");
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode1))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode2))
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
sb.Append("DMA2 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode2))
sb.Append(Localization._active_);
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode3))
{
sb.Append("DMA3 ");
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode3))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode4))
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
sb.Append("DMA4 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode4))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode5))
{
sb.Append("DMA5 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode5))
sb.Append(Localization._active_);
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode6))
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
sb.Append("DMA6 ");
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode6))
sb.Append(Localization._active_);
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.DMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode7))
{
sb.Append("DMA7 ");
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.DMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode7))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
}
2019-11-25 00:54:38 +00:00
sb.AppendLine().Append(Localization.Multi_word_DMA);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode0))
{
sb.Append("MDMA0 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode0))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode1))
{
sb.Append("MDMA1 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode1))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode2))
{
sb.Append("MDMA2 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode2))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode3))
{
sb.Append("MDMA3 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode3))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode4))
{
sb.Append("MDMA4 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode4))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode5))
{
sb.Append("MDMA5 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode5))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode6))
{
sb.Append("MDMA6 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode6))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode7))
{
sb.Append("MDMA7 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.MDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode7))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
sb.AppendLine().Append(Localization.Ultra_DMA);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode0))
{
sb.Append("UDMA0 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode0))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode1))
{
sb.Append("UDMA1 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode1))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode2))
{
sb.Append("UDMA2 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode2))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode3))
{
sb.Append("UDMA3 ");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode3))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode4))
{
sb.Append("UDMA4 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode4))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode5))
{
sb.Append("UDMA5 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode5))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode6))
{
sb.Append("UDMA6 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode6))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMASupported.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode7))
{
sb.Append("UDMA7 ");
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.UDMAActive.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TransferMode.Mode7))
sb.Append(Localization._active_);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
if(ATAID.MinMDMACycleTime != 0 && ATAID.RecMDMACycleTime != 0)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.At_minimum_0_ns_transfer_cycle_time_per_word_in_MDMA_1_ns_recommended,
ATAID.MinMDMACycleTime,
ATAID.RecMDMACycleTime);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.MinPIOCycleTimeNoFlow != 0)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.At_minimum_0_ns_transfer_cycle_time_per_word_in_PIO_without_flow_control,
2022-03-06 13:29:37 +00:00
ATAID.MinPIOCycleTimeNoFlow);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.MinPIOCycleTimeFlow != 0)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.At_minimum_0_ns_transfer_cycle_time_per_word_in_PIO_with_IORDY_flow_control,
2022-03-06 13:29:37 +00:00
ATAID.MinPIOCycleTimeFlow);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.MaxQueueDepth != 0)
sb.AppendLine().AppendFormat(Localization._0_depth_of_queue_maximum, ATAID.MaxQueueDepth + 1);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(atapi)
{
if(ATAID.PacketBusRelease != 0)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization._0_ns_typical_to_release_bus_from_receipt_of_PACKET,
ATAID.PacketBusRelease);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.ServiceBusyClear != 0)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization._0_ns_typical_to_clear_BSY_bit_from_receipt_of_SERVICE,
ATAID.ServiceBusyClear);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
if((ATAID.TransportMajorVersion & 0xF000) >> 12 == 0x1 || (ATAID.TransportMajorVersion & 0xF000) >> 12 == 0xE)
2022-03-06 13:29:37 +00:00
{
if(!ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit.Clear))
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.Gen1Speed))
sb.AppendLine().Append(Localization.SATA_1_5Gbs_is_supported);
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.Gen2Speed))
sb.AppendLine().Append(Localization.SATA_3_0Gbs_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.Gen3Speed))
sb.AppendLine().Append(Localization.SATA_6_0Gbs_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.PowerReceipt))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(Localization.Receipt_of_host_initiated_power_management_requests_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.PHYEventCounter))
sb.AppendLine().Append(Localization.PHY_Event_counters_are_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.HostSlumbTrans))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(Localization.Supports_host_automatic_partial_to_slumber_transitions_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.DevSlumbTrans))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(Localization.Supports_device_automatic_partial_to_slumber_transitions_is_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit.NCQ))
{
sb.AppendLine().Append(Localization.NCQ_is_supported);
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.NCQPriority))
sb.AppendLine().Append(Localization.NCQ_priority_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.UnloadNCQ))
sb.AppendLine().Append(Localization.Unload_is_supported_with_outstanding_NCQ_commands);
2022-03-06 13:29:37 +00:00
}
2015-10-17 01:26:17 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-07 07:36:42 +00:00
if(!ATAID.SATACapabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit2.Clear))
2015-10-17 01:26:17 +01:00
{
2024-05-01 04:05:22 +01:00
if(!ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.Clear) &&
2022-03-06 13:29:37 +00:00
ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit.NCQ))
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit2
.NCQMgmt))
sb.AppendLine().Append(Localization.NCQ_queue_management_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit2
.NCQStream))
sb.AppendLine().Append(Localization.NCQ_streaming_is_supported);
2022-03-06 13:29:37 +00:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(atapi)
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit2
.HostEnvDetect))
sb.AppendLine().Append(Localization.ATAPI_device_supports_host_environment_detection);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit2
.DevAttSlimline))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(Localization.ATAPI_device_supports_attention_on_slimline_connected_devices);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
}
//sb.AppendFormat("Negotiated speed = {0}", ((ushort)ATAID.SATACapabilities2 & 0x000E) >> 1);
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
}
if(ATAID.InterseekDelay != 0x0000 && ATAID.InterseekDelay != 0xFFFF)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization._0_microseconds_of_interseek_delay_for_ISO_7779_acoustic_testing,
ATAID.InterseekDelay);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
if((ushort)ATAID.DeviceFormFactor != 0x0000 && (ushort)ATAID.DeviceFormFactor != 0xFFFF)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
switch(ATAID.DeviceFormFactor)
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
case CommonTypes.Structs.Devices.ATA.Identify.DeviceFormFactorEnum.FiveAndQuarter:
sb.AppendLine().Append(Localization.Device_nominal_size_is_5_25);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case CommonTypes.Structs.Devices.ATA.Identify.DeviceFormFactorEnum.ThreeAndHalf:
sb.AppendLine().Append(Localization.Device_nominal_size_is_3_5);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
break;
case CommonTypes.Structs.Devices.ATA.Identify.DeviceFormFactorEnum.TwoAndHalf:
sb.AppendLine().Append(Localization.Device_nominal_size_is_2_5);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
case CommonTypes.Structs.Devices.ATA.Identify.DeviceFormFactorEnum.OnePointEight:
sb.AppendLine().Append(Localization.Device_nominal_size_is_1_8);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
break;
case CommonTypes.Structs.Devices.ATA.Identify.DeviceFormFactorEnum.LessThanOnePointEight:
sb.AppendLine().Append(Localization.Device_nominal_size_is_smaller_than_1_8);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
default:
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.Device_nominal_size_field_value_0_is_unknown, ATAID.DeviceFormFactor);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
break;
}
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(atapi)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
if(ATAID.ATAPIByteCount > 0)
sb.AppendLine().AppendFormat(Localization._0_bytes_count_limit_for_ATAPI, ATAID.ATAPIByteCount);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(cfa)
2023-10-03 23:09:28 +01:00
{
2022-03-06 13:29:37 +00:00
if((ATAID.CFAPowerMode & 0x8000) == 0x8000)
2015-10-17 01:26:17 +01:00
{
sb.AppendLine().Append(Localization.CompactFlash_device_supports_power_mode_1);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if((ATAID.CFAPowerMode & 0x2000) == 0x2000)
sb.AppendLine().Append(Localization.CompactFlash_power_mode_1_required_for_one_or_more_commands);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if((ATAID.CFAPowerMode & 0x1000) == 0x1000)
sb.AppendLine().Append(Localization.CompactFlash_power_mode_1_is_disabled);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.CompactFlash_device_uses_a_maximum_of_0_mA, ATAID.CFAPowerMode & 0x0FFF);
2022-03-06 13:29:37 +00:00
}
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
sb.AppendLine();
2019-11-25 00:54:38 +00:00
sb.AppendLine().Append(Localization.Command_set_and_features);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Nop))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Nop)
2023-10-03 23:09:28 +01:00
? Localization.NOP_is_supported_and_enabled
: Localization.NOP_is_supported);
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.ReadBuffer))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.ReadBuffer)
2023-10-03 23:09:28 +01:00
? Localization.READ_BUFFER_is_supported_and_enabled
: Localization.READ_BUFFER_is_supported);
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.WriteBuffer))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit
.WriteBuffer)
? Localization.WRITE_BUFFER_is_supported_and_enabled
: Localization.WRITE_BUFFER_is_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.HPA))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.HPA)
? Localization.Host_Protected_Area_is_supported_and_enabled
: Localization.Host_Protected_Area_is_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.DeviceReset))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit
.DeviceReset)
2023-10-03 23:09:28 +01:00
? Localization.DEVICE_RESET_is_supported_and_enabled
: Localization._);
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Service))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Service)
? Localization.SERVICE_interrupt_is_supported_and_enabled
: Localization.SERVICE_interrupt_is_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Release))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Release)
2023-10-03 23:09:28 +01:00
? Localization.Release_is_supported_and_enabled
: Localization.Release_is_supported);
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.LookAhead))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.LookAhead)
? Localization.Look_ahead_read_is_supported_and_enabled
: Localization.Look_ahead_read_is_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.WriteCache))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.WriteCache)
2023-10-03 23:09:28 +01:00
? Localization.Write_cache_is_supported_and_enabled
: Localization.Write_cache_is_supported);
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Packet))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.Packet)
2023-10-03 23:09:28 +01:00
? Localization.PACKET_is_supported_and_enabled
: Localization.PACKET_is_supported);
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.PowerManagement))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit
.PowerManagement)
? Localization.Power_management_is_supported_and_enabled
: Localization.Power_management_is_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.RemovableMedia))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit
.RemovableMedia)
? Localization.Removable_media_feature_set_is_supported_and_enabled
: Localization.Removable_media_feature_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.SecurityMode))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit
.SecurityMode)
? Localization.Security_mode_is_supported_and_enabled
: Localization.Security_mode_is_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit.LBASupport))
sb.AppendLine().Append(Localization._28_bit_LBA_is_supported);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.MustBeSet) &&
!ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.MustBeClear))
{
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.LBA48))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.LBA48)
? Localization._48_bit_LBA_is_supported_and_enabled
2023-10-03 23:09:28 +01:00
: Localization._48_bit_LBA_is_supported);
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.FlushCache))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.FlushCache)
? Localization.FLUSH_CACHE_is_supported_and_enabled
2023-10-03 23:09:28 +01:00
: Localization.FLUSH_CACHE_is_supported);
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.FlushCacheExt))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.FlushCacheExt)
? Localization.FLUSH_CACHE_EXT_is_supported_and_enabled
: Localization.FLUSH_CACHE_EXT_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.DCO))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.DCO)
? Localization.Device_Configuration_Overlay_feature_set_is_supported_and_enabled
: Localization.Device_Configuration_Overlay_feature_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.AAM))
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
if(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.AAM))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization
.Automatic_Acoustic_Management_is_supported_and_enabled_with_value_0_vendor_recommends_1,
ATAID.CurrentAAM,
ATAID.RecommendedAAM);
2023-10-03 23:09:28 +01:00
}
else
sb.AppendLine().Append(Localization.Automatic_Acoustic_Management_is_supported);
2015-10-17 01:26:17 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.SetMax))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.SetMax)
? Localization.SET_MAX_security_extension_is_supported_and_enabled
: Localization.SET_MAX_security_extension_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.AddressOffsetReservedAreaBoot))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.AddressOffsetReservedAreaBoot)
? Localization.Address_Offset_Reserved_Area_Boot_is_supported_and_enabled
: Localization.Address_Offset_Reserved_Area_Boot_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-07 07:36:42 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.SetFeaturesRequired))
sb.AppendLine().Append(Localization.SET_FEATURES_is_required_before_spin_up);
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.PowerUpInStandby))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.PowerUpInStandby)
? Localization.Power_up_in_standby_is_supported_and_enabled
: Localization.Power_up_in_standby_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-07 07:36:42 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.RemovableNotification))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.RemovableNotification)
? Localization.Removable_Media_Status_Notification_is_supported_and_enabled
: Localization.Removable_Media_Status_Notification_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.APM))
2015-10-17 01:26:17 +01:00
{
2022-03-06 13:29:37 +00:00
if(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.APM))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.Advanced_Power_Management_is_supported_and_enabled_with_value_0,
ATAID.CurrentAPM);
2023-10-03 23:09:28 +01:00
}
else
sb.AppendLine().Append(Localization.Advanced_Power_Management_is_supported);
2015-10-17 01:26:17 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.CompactFlash))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.CompactFlash)
? Localization.CompactFlash_feature_set_is_supported_and_enabled
: Localization.CompactFlash_feature_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.RWQueuedDMA))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.RWQueuedDMA)
? Localization.READ_DMA_QUEUED_and_WRITE_DMA_QUEUED_are_supported_and_enabled
: Localization.READ_DMA_QUEUED_and_WRITE_DMA_QUEUED_are_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2.DownloadMicrocode))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit2
.DownloadMicrocode)
? Localization.DOWNLOAD_MICROCODE_is_supported_and_enabled
: Localization.DOWNLOAD_MICROCODE_is_supported);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.SMART))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit.SMART)
2023-10-03 23:09:28 +01:00
? Localization.SMART_is_supported_and_enabled
: Localization.SMART_is_supported);
}
2022-03-06 13:29:37 +00:00
2022-03-07 07:36:42 +00:00
if(ATAID.SCTCommandTransport.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SCTCommandTransportBit.Supported))
sb.AppendLine().Append(Localization.SMART_Command_Transport_is_supported);
2016-04-19 02:11:47 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MustBeSet) &&
!ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MustBeClear))
{
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.SMARTSelfTest))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3
.SMARTSelfTest)
? Localization.SMART_self_testing_is_supported_and_enabled
: Localization.SMART_self_testing_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.SMARTLog))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3
.SMARTLog)
? Localization.SMART_error_logging_is_supported_and_enabled
: Localization.SMART_error_logging_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.IdleImmediate))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3
.IdleImmediate)
? Localization.IDLE_IMMEDIATE_with_UNLOAD_FEATURE_is_supported_and_enabled
: Localization.IDLE_IMMEDIATE_with_UNLOAD_FEATURE_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.WriteURG))
sb.AppendLine().Append(Localization.URG_bit_is_supported_in_WRITE_STREAM_DMA_EXT_and_WRITE_STREAM_EXT);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.ReadURG))
sb.AppendLine().Append(Localization.URG_bit_is_supported_in_READ_STREAM_DMA_EXT_and_READ_STREAM_EXT);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.WWN))
sb.AppendLine().Append(Localization.Device_has_a_World_Wide_Name);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.FUAWriteQ))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3
.FUAWriteQ)
? Localization.WRITE_DMA_QUEUED_FUA_EXT_is_supported_and_enabled
: Localization.WRITE_DMA_QUEUED_FUA_EXT_is_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.FUAWrite))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3
.FUAWrite)
? Localization.WRITE_DMA_FUA_EXT_and_WRITE_MULTIPLE_FUA_EXT_are_supported_and_enabled
: Localization.WRITE_DMA_FUA_EXT_and_WRITE_MULTIPLE_FUA_EXT_are_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.GPL))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.GPL)
? Localization.General_Purpose_Logging_is_supported_and_enabled
: Localization.General_Purpose_Logging_is_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.Streaming))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3
.Streaming)
? Localization.Streaming_feature_set_is_supported_and_enabled
: Localization.Streaming_feature_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MCPT))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MCPT)
? Localization.Media_Card_Pass_Through_command_set_is_supported_and_enabled
: Localization.Media_Card_Pass_Through_command_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MediaSerial))
{
2024-05-01 04:05:22 +01:00
if(ATAID.EnabledCommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3
.MediaSerial))
sb.AppendLine().Append(Localization.Media_Serial_is_supported_and_valid);
sb.AppendLine().Append(Localization.Media_Serial_is_supported);
2022-03-06 13:29:37 +00:00
}
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.MustBeSet) &&
!ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.MustBeClear))
{
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.DSN))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.DSN)
? Localization.DSN_feature_set_is_supported_and_enabled
: Localization.DSN_feature_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.AMAC))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.AMAC)
? Localization.Accessible_Max_Address_Configuration_is_supported_and_enabled
: Localization.Accessible_Max_Address_Configuration_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.ExtPowerCond))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.ExtPowerCond)
? Localization.Extended_Power_Conditions_are_supported_and_enabled
: Localization.Extended_Power_Conditions_are_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.ExtStatusReport))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.ExtStatusReport)
? Localization.Extended_Status_Reporting_is_supported_and_enabled
: Localization.Extended_Status_Reporting_is_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.FreeFallControl))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.FreeFallControl)
? Localization.Free_fall_control_feature_set_is_supported_and_enabled
: Localization.Free_fall_control_feature_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.SegmentedDownloadMicrocode))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.SegmentedDownloadMicrocode)
? Localization.Segmented_feature_in_DOWNLOAD_MICROCODE_is_supported_and_enabled
: Localization.Segmented_feature_in_DOWNLOAD_MICROCODE_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.RWDMAExtGpl))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.RWDMAExtGpl)
? Localization.READ_WRITE_DMA_EXT_GPL_are_supported_and_enabled
: Localization.READ_WRITE_DMA_EXT_GPL_are_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.WriteUnc))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.WriteUnc)
? Localization.WRITE_UNCORRECTABLE_is_supported_and_enabled
: Localization.WRITE_UNCORRECTABLE_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.WRV))
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.WRV)
? Localization.Write_Read_Verify_is_supported_and_enabled
: Localization.Write_Read_Verify_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization._0_sectors_for_Write_Read_Verify_mode_two, ATAID.WRVSectorCountMode2);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization._0_sectors_for_Write_Read_Verify_mode_three, ATAID.WRVSectorCountMode3);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.WRV))
sb.AppendLine().AppendFormat(Localization.Current_Write_Read_Verify_mode_0, ATAID.WRVMode);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4.DT1825))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledCommandSet4.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit4
.DT1825)
? Localization.DT1825_is_supported_and_enabled
2023-10-03 23:09:28 +01:00
: Localization.DT1825_is_supported);
}
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit3.BlockErase))
sb.AppendLine().Append(Localization.BLOCK_ERASE_EXT_is_supported);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit3.Overwrite))
sb.AppendLine().Append(Localization.OVERWRITE_EXT_is_supported);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit3.CryptoScramble))
sb.AppendLine().Append(Localization.CRYPTO_SCRAMBLE_EXT_is_supported);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.DeviceConfDMA))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(Localization.DEVICE_CONFIGURATION_IDENTIFY_DMA_and_DEVICE_CONFIGURATION_SET_DMA_are_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.ReadBufferDMA))
sb.AppendLine().Append(Localization.READ_BUFFER_DMA_is_supported);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.WriteBufferDMA))
sb.AppendLine().Append(Localization.WRITE_BUFFER_DMA_is_supported);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.DownloadMicroCodeDMA))
sb.AppendLine().Append(Localization.DOWNLOAD_MICROCODE_DMA_is_supported);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.SetMaxDMA))
sb.AppendLine().Append(Localization.SET_PASSWORD_DMA_and_SET_UNLOCK_DMA_are_supported);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.Ata28))
sb.AppendLine().Append(Localization.Not_all_28_bit_commands_are_supported);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.CFast))
sb.AppendLine().Append(Localization.Device_follows_CFast_specification);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.IEEE1667))
sb.AppendLine().Append(Localization.Device_follows_IEEE_1667);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.DeterministicTrim))
{
sb.AppendLine().Append(Localization.Read_after_TRIM_is_deterministic);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.ReadZeroTrim))
sb.AppendLine().Append(Localization.Read_after_TRIM_returns_empty_data);
2022-03-06 13:29:37 +00:00
}
2018-06-22 08:08:38 +01:00
2022-03-07 07:36:42 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.LongPhysSectorAligError))
sb.AppendLine().Append(Localization.Device_supports_Long_Physical_Sector_Alignment_Error_Reporting_Control);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.Encrypted))
sb.AppendLine().Append(Localization.Device_encrypts_all_user_data);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.AllCacheNV))
sb.AppendLine().Append(Localization.Device_s_write_cache_is_non_volatile);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.ZonedBit0) ||
ATAID.CommandSet5.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit5.ZonedBit1))
sb.AppendLine().Append(Localization.Device_is_zoned);
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.Capabilities3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit3.Sanitize))
{
sb.AppendLine().Append(Localization.Sanitize_feature_set_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.Capabilities3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit3
.SanitizeCommands)
? Localization.Sanitize_commands_are_specified_by_ACS_3_or_higher
: Localization.Sanitize_commands_are_specified_by_ACS_2);
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.Capabilities3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CapabilitiesBit3
.SanitizeAntifreeze))
sb.AppendLine().Append(Localization.SANITIZE_ANTIFREEZE_LOCK_EXT_is_supported);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
if(!ata1 && maxatalevel >= 8)
2023-10-03 23:09:28 +01:00
{
2022-03-07 07:36:42 +00:00
if(ATAID.TrustedComputing.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TrustedComputingBit.Set) &&
!ATAID.TrustedComputing.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TrustedComputingBit.Clear) &&
2024-05-01 04:05:22 +01:00
ATAID.TrustedComputing.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.TrustedComputingBit
.TrustedComputing))
sb.AppendLine().Append(Localization.Trusted_Computing_feature_set_is_supported);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
if((ATAID.TransportMajorVersion & 0xF000) >> 12 == 0x1 || (ATAID.TransportMajorVersion & 0xF000) >> 12 == 0xE)
2022-03-06 13:29:37 +00:00
{
if(!ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit.Clear))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit
.ReadLogDMAExt))
sb.AppendLine().Append(Localization.READ_LOG_DMA_EXT_is_supported);
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
2022-03-07 07:36:42 +00:00
if(!ATAID.SATACapabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit2.Clear))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATACapabilities2.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATACapabilitiesBit2
.FPDMAQ))
sb.AppendLine().Append(Localization.RECEIVE_FPDMA_QUEUED_and_SEND_FPDMA_QUEUED_are_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(!ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit.Clear))
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.NonZeroBufferOffset))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.NonZeroBufferOffset)
? Localization.Non_zero_buffer_offsets_are_supported_and_enabled
: Localization.Non_zero_buffer_offsets_are_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit.DMASetup))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.DMASetup)
? Localization.DMA_Setup_auto_activation_is_supported_and_enabled
: Localization.DMA_Setup_auto_activation_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-07 07:36:42 +00:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit.InitPowerMgmt))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.InitPowerMgmt)
? Localization.Device_initiated_power_management_is_supported_and_enabled
: Localization.Device_initiated_power_management_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit.InOrderData))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.InOrderData)
? Localization.In_order_data_delivery_is_supported_and_enabled
: Localization.In_order_data_delivery_is_supported);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-11-13 19:38:02 +00:00
switch(atapi)
{
case false:
2015-10-17 01:26:17 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.HardwareFeatureControl))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify
.SATAFeaturesBit.HardwareFeatureControl)
? Localization.Hardware_Feature_Control_is_supported_and_enabled
: Localization.Hardware_Feature_Control_is_supported);
2023-10-03 23:09:28 +01:00
}
2018-06-22 08:08:38 +01:00
2022-11-13 19:38:02 +00:00
break;
}
case true:
2015-10-17 01:26:17 +01:00
{
2024-05-01 04:05:22 +01:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.AsyncNotification))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify
.SATAFeaturesBit.AsyncNotification)
? Localization.Asynchronous_notification_is_supported_and_enabled
: Localization.Asynchronous_notification_is_supported);
2023-10-03 23:09:28 +01:00
}
2022-11-13 19:38:02 +00:00
break;
2015-10-17 01:26:17 +01:00
}
2022-11-13 19:38:02 +00:00
}
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.SettingsPreserve))
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.Append(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.SettingsPreserve)
? Localization.Software_Settings_Preservation_is_supported_and_enabled
: Localization.Software_Settings_Preservation_is_supported);
2023-10-03 23:09:28 +01:00
}
2015-10-17 01:26:17 +01:00
2022-03-07 07:36:42 +00:00
if(ATAID.SATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit.NCQAutoSense))
sb.AppendLine().Append(Localization.NCQ_Autosense_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.EnabledSATAFeatures.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SATAFeaturesBit
.EnabledSlumber))
sb.AppendLine().Append(Localization.Automatic_Partial_to_Slumber_transitions_are_enabled);
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
}
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if((ATAID.RemovableStatusSet & 0x03) > 0)
sb.AppendLine().Append(Localization.Removable_Media_Status_Notification_feature_set_is_supported);
2019-11-25 00:54:38 +00:00
if(ATAID.FreeFallSensitivity != 0x00 && ATAID.FreeFallSensitivity != 0xFF)
sb.AppendLine().AppendFormat(Localization.Free_fall_sensitivity_set_to_0, ATAID.FreeFallSensitivity);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.DataSetMgmt.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.DataSetMgmtBit.Trim))
sb.AppendLine().Append("TRIM is supported");
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.DataSetMgmtSize > 0)
2023-10-03 23:09:28 +01:00
{
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.DATA_SET_MANAGEMENT_can_receive_a_maximum_of_0_blocks_of_512_bytes,
ATAID.DataSetMgmtSize);
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
sb.AppendLine().AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit.Supported))
{
sb.AppendLine(Localization.Security);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit.Enabled))
2015-10-17 01:26:17 +01:00
{
sb.AppendLine(Localization.Security_is_enabled);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendLine(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit
.Locked)
2023-10-03 23:09:28 +01:00
? Localization.Security_is_locked
: Localization.Security_is_not_locked);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendLine(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit
.Frozen)
2023-10-03 23:09:28 +01:00
? Localization.Security_is_frozen
: Localization.Security_is_not_frozen);
2015-10-17 01:26:17 +01:00
2024-05-01 04:05:22 +01:00
sb.AppendLine(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit
.Expired)
? Localization.Security_count_has_expired
2023-10-03 23:09:28 +01:00
: Localization.Security_count_has_not_expired);
2018-06-22 08:08:38 +01:00
2024-05-01 04:05:22 +01:00
sb.AppendLine(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit
.Maximum)
2023-10-03 23:09:28 +01:00
? Localization.Security_level_is_maximum
: Localization.Security_level_is_high);
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
else
sb.AppendLine(Localization.Security_is_not_enabled);
2015-10-17 01:26:17 +01:00
2022-03-06 13:29:37 +00:00
if(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit.Enhanced))
sb.AppendLine(Localization.Supports_enhanced_security_erase);
2019-11-25 00:54:38 +00:00
sb.AppendFormat(Localization._0_minutes_to_complete_secure_erase, ATAID.SecurityEraseTime * 2).AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.SecurityStatus.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SecurityStatusBit.Enhanced))
2023-10-03 23:09:28 +01:00
{
sb.AppendFormat(Localization._0_minutes_to_complete_enhanced_secure_erase,
2024-05-01 04:05:22 +01:00
ATAID.EnhancedSecurityEraseTime * 2)
.AppendLine();
2023-10-03 23:09:28 +01:00
}
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendFormat(Localization.Master_password_revision_code_0, ATAID.MasterPasswordRevisionCode)
.AppendLine();
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if(ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MustBeSet) &&
!ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.MustBeClear) &&
ATAID.CommandSet3.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.CommandSetBit3.Streaming))
{
sb.AppendLine().AppendLine(Localization.Streaming);
2023-10-03 23:09:28 +01:00
sb.AppendFormat(Localization.Minimum_request_size_is_0, ATAID.StreamMinReqSize);
sb.AppendFormat(Localization.Streaming_transfer_time_in_PIO_is_0, ATAID.StreamTransferTimePIO);
sb.AppendFormat(Localization.Streaming_transfer_time_in_DMA_is_0, ATAID.StreamTransferTimeDMA);
sb.AppendFormat(Localization.Streaming_access_latency_is_0, ATAID.StreamAccessLatency);
sb.AppendFormat(Localization.Streaming_performance_granularity_is_0, ATAID.StreamPerformanceGranularity);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-07 07:36:42 +00:00
if(ATAID.SCTCommandTransport.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SCTCommandTransportBit.Supported))
2022-03-06 13:29:37 +00:00
{
sb.AppendLine().AppendLine(Localization.SMART_Command_Transport_SCT);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SCTCommandTransport.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SCTCommandTransportBit
.LongSectorAccess))
sb.AppendLine(Localization.SCT_Long_Sector_Address_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SCTCommandTransport.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SCTCommandTransportBit
.WriteSame))
sb.AppendLine(Localization.SCT_Write_Same_is_supported);
2017-12-19 20:33:03 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SCTCommandTransport.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SCTCommandTransportBit
.ErrorRecoveryControl))
sb.AppendLine(Localization.SCT_Error_Recovery_Control_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SCTCommandTransport.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SCTCommandTransportBit
.FeaturesControl))
sb.AppendLine(Localization.SCT_Features_Control_is_supported);
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
if(ATAID.SCTCommandTransport.HasFlag(CommonTypes.Structs.Devices.ATA.Identify.SCTCommandTransportBit
.DataTables))
sb.AppendLine(Localization.SCT_Data_Tables_are_supported);
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if((ATAID.NVCacheCaps & 0x0010) == 0x0010)
{
sb.AppendLine().AppendLine(Localization.Non_Volatile_Cache);
sb.AppendLine().AppendFormat(Localization.Version_0, (ATAID.NVCacheCaps & 0xF000) >> 12).AppendLine();
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
if((ATAID.NVCacheCaps & 0x0001) == 0x0001)
{
sb.Append((ATAID.NVCacheCaps & 0x0002) == 0x0002
? Localization.Power_mode_feature_set_is_supported_and_enabled
: Localization.Power_mode_feature_set_is_supported);
2019-11-25 00:54:38 +00:00
2022-03-06 13:29:37 +00:00
sb.AppendLine();
2019-11-25 00:54:38 +00:00
sb.AppendLine().AppendFormat(Localization.Version_0, (ATAID.NVCacheCaps & 0x0F00) >> 8).AppendLine();
2022-03-06 13:29:37 +00:00
}
2019-11-25 00:54:38 +00:00
2024-05-01 04:05:22 +01:00
sb.AppendLine()
.AppendFormat(Localization.Non_Volatile_Cache_is_0_bytes, ATAID.NVCacheSize * logicalSectorSize)
.AppendLine();
2015-10-17 01:26:17 +01:00
}
2022-03-06 13:29:37 +00:00
2024-05-01 04:05:22 +01:00
#if DEBUG
2022-03-06 13:29:37 +00:00
sb.AppendLine();
if(ATAID.VendorWord9 != 0x0000 && ATAID.VendorWord9 != 0xFFFF)
sb.AppendFormat(Localization.Word_nine_0, ATAID.VendorWord9).AppendLine();
2022-03-06 13:29:37 +00:00
if((ATAID.VendorWord47 & 0x7F) != 0x7F && (ATAID.VendorWord47 & 0x7F) != 0x00)
sb.AppendFormat(Localization.Word_47_bits_15_to_8_0, ATAID.VendorWord47).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.VendorWord51 != 0x00 && ATAID.VendorWord51 != 0xFF)
sb.AppendFormat(Localization.Word_51_bits_7_to_0_0, ATAID.VendorWord51).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.VendorWord52 != 0x00 && ATAID.VendorWord52 != 0xFF)
sb.AppendFormat(Localization.Word_52_bits_7_to_0_0, ATAID.VendorWord52).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord64 != 0x00 && ATAID.ReservedWord64 != 0xFF)
sb.AppendFormat(Localization.Word_64_bits_15_to_8_0, ATAID.ReservedWord64).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord70 != 0x0000 && ATAID.ReservedWord70 != 0xFFFF)
sb.AppendFormat(Localization.Word_70_0, ATAID.ReservedWord70).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord73 != 0x0000 && ATAID.ReservedWord73 != 0xFFFF)
sb.AppendFormat(Localization.Word_73_0, ATAID.ReservedWord73).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord74 != 0x0000 && ATAID.ReservedWord74 != 0xFFFF)
sb.AppendFormat(Localization.Word_74_0, ATAID.ReservedWord74).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord116 != 0x0000 && ATAID.ReservedWord116 != 0xFFFF)
sb.AppendFormat(Localization.Word_116_0, ATAID.ReservedWord116).AppendLine();
2022-03-06 13:29:37 +00:00
2023-10-03 23:09:28 +01:00
for(var i = 0; i < ATAID.ReservedWords121.Length; i++)
{
if(ATAID.ReservedWords121[i] != 0x0000 && ATAID.ReservedWords121[i] != 0xFFFF)
sb.AppendFormat(Localization.Word_1_0, ATAID.ReservedWords121[i], 121 + i).AppendLine();
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
2023-10-03 23:09:28 +01:00
for(var i = 0; i < ATAID.ReservedWords129.Length; i++)
{
if(ATAID.ReservedWords129[i] != 0x0000 && ATAID.ReservedWords129[i] != 0xFFFF)
sb.AppendFormat(Localization.Word_1_0, ATAID.ReservedWords129[i], 129 + i).AppendLine();
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
2023-10-03 23:09:28 +01:00
for(var i = 0; i < ATAID.ReservedCFA.Length; i++)
{
if(ATAID.ReservedCFA[i] != 0x0000 && ATAID.ReservedCFA[i] != 0xFFFF)
sb.AppendFormat(Localization.Word_1_CFA_0, ATAID.ReservedCFA[i], 161 + i).AppendLine();
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord174 != 0x0000 && ATAID.ReservedWord174 != 0xFFFF)
sb.AppendFormat(Localization.Word_174_0, ATAID.ReservedWord174).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord175 != 0x0000 && ATAID.ReservedWord175 != 0xFFFF)
sb.AppendFormat(Localization.Word_175_0, ATAID.ReservedWord175).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedCEATAWord207 != 0x0000 && ATAID.ReservedCEATAWord207 != 0xFFFF)
sb.AppendFormat(Localization.Word_207_CE_ATA_0, ATAID.ReservedCEATAWord207).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedCEATAWord208 != 0x0000 && ATAID.ReservedCEATAWord208 != 0xFFFF)
sb.AppendFormat(Localization.Word_208_CE_ATA_0, ATAID.ReservedCEATAWord208).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.NVReserved != 0x00 && ATAID.NVReserved != 0xFF)
sb.AppendFormat(Localization.Word_219_bits_15_to_8_0, ATAID.NVReserved).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.WRVReserved != 0x00 && ATAID.WRVReserved != 0xFF)
sb.AppendFormat(Localization.Word_220_bits_15_to_8_0, ATAID.WRVReserved).AppendLine();
2022-03-06 13:29:37 +00:00
if(ATAID.ReservedWord221 != 0x0000 && ATAID.ReservedWord221 != 0xFFFF)
sb.AppendFormat(Localization.Word_221_0, ATAID.ReservedWord221).AppendLine();
2022-03-06 13:29:37 +00:00
2023-10-03 23:09:28 +01:00
for(var i = 0; i < ATAID.ReservedCEATA224.Length; i++)
{
if(ATAID.ReservedCEATA224[i] != 0x0000 && ATAID.ReservedCEATA224[i] != 0xFFFF)
sb.AppendFormat(Localization.Word_1_CE_ATA_0, ATAID.ReservedCEATA224[i], 224 + i).AppendLine();
2023-10-03 23:09:28 +01:00
}
2022-03-06 13:29:37 +00:00
2023-10-03 23:09:28 +01:00
for(var i = 0; i < ATAID.ReservedWords.Length; i++)
{
if(ATAID.ReservedWords[i] != 0x0000 && ATAID.ReservedWords[i] != 0xFFFF)
sb.AppendFormat(Localization.Word_1_0, ATAID.ReservedWords[i], 236 + i).AppendLine();
2023-10-03 23:09:28 +01:00
}
2024-05-01 04:05:22 +01:00
#endif
2022-03-06 13:29:37 +00:00
return sb.ToString();
}
2017-12-19 20:33:03 +00:00
}