2017-06-03 01:10:46 +01:00
|
|
|
|
// /***************************************************************************
|
|
|
|
|
|
// The Disc Image Chef
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
//
|
|
|
|
|
|
// Filename : TestedMedia.cs
|
2017-12-19 03:50:57 +00:00
|
|
|
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
2017-06-03 01:10:46 +01:00
|
|
|
|
//
|
2017-12-19 03:50:57 +00:00
|
|
|
|
// Component : DiscImageChef Server.
|
2017-06-03 01:10:46 +01:00
|
|
|
|
//
|
|
|
|
|
|
// --[ Description ] ----------------------------------------------------------
|
|
|
|
|
|
//
|
2017-12-19 03:50:57 +00:00
|
|
|
|
// Decodes media tests from reports.
|
2017-06-03 01:10:46 +01:00
|
|
|
|
//
|
|
|
|
|
|
// --[ License ] --------------------------------------------------------------
|
|
|
|
|
|
//
|
2017-12-19 03:50:57 +00: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
|
2017-06-03 01:10:46 +01:00
|
|
|
|
// License, or (at your option) any later version.
|
|
|
|
|
|
//
|
2017-12-19 03:50:57 +00: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.
|
2017-06-03 01:10:46 +01:00
|
|
|
|
//
|
2017-12-19 03:50:57 +00: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/>.
|
2017-06-03 01:10:46 +01:00
|
|
|
|
//
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
2017-12-19 03:50:57 +00:00
|
|
|
|
// Copyright © 2011-2018 Natalia Portillo
|
2017-06-03 01:10:46 +01:00
|
|
|
|
// ****************************************************************************/
|
2017-12-19 03:50:57 +00:00
|
|
|
|
|
2017-06-03 01:19:47 +01:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using DiscImageChef.Metadata;
|
2017-12-19 19:33:46 +00:00
|
|
|
|
|
2017-06-03 01:10:46 +01:00
|
|
|
|
namespace DiscImageChef.Server.App_Start
|
|
|
|
|
|
{
|
2017-06-03 01:19:47 +01:00
|
|
|
|
public static class TestedMedia
|
2017-06-03 01:10:46 +01:00
|
|
|
|
{
|
2017-12-23 02:57:47 +00:00
|
|
|
|
/// <summary>
|
2017-12-24 03:23:06 +00:00
|
|
|
|
/// Takes the tested media from a device report and prints it as a list of values
|
2017-12-23 02:57:47 +00:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="ata"><c>true</c> if device report is from an ATA device</param>
|
|
|
|
|
|
/// <param name="mediaOneValue">List to put values on</param>
|
|
|
|
|
|
/// <param name="testedMedias">List of tested media</param>
|
2017-12-22 18:17:36 +00:00
|
|
|
|
public static void Report(IEnumerable<testedMediaType> testedMedias, bool ata, ref List<string> mediaOneValue)
|
2017-06-03 01:10:46 +01:00
|
|
|
|
{
|
2017-06-03 01:19:47 +01:00
|
|
|
|
foreach(testedMediaType testedMedia in testedMedias)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!string.IsNullOrWhiteSpace(testedMedia.MediumTypeName))
|
|
|
|
|
|
{
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"<i>Information for medium named \"{testedMedia.MediumTypeName}\"</i>");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.MediumTypeSpecified)
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Medium type code: {testedMedia.MediumType:X2}h");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
}
|
|
|
|
|
|
else if(testedMedia.MediumTypeSpecified)
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"<i>Information for medium type {testedMedia.MediumType:X2}h</i>");
|
2017-12-19 20:33:03 +00:00
|
|
|
|
else mediaOneValue.Add("<i>Information for unknown medium type</i>");
|
|
|
|
|
|
|
2017-12-22 18:17:36 +00:00
|
|
|
|
mediaOneValue.Add(testedMedia.MediaIsRecognized
|
|
|
|
|
|
? "Drive recognizes this medium."
|
|
|
|
|
|
: "Drive does not recognize this medium.");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
|
|
|
|
|
if(!string.IsNullOrWhiteSpace(testedMedia.Manufacturer))
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Medium manufactured by: {testedMedia.Manufacturer}");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(!string.IsNullOrWhiteSpace(testedMedia.Model))
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Medium model: {testedMedia.Model}");
|
2017-12-24 03:23:06 +00:00
|
|
|
|
if(testedMedia.DensitySpecified) mediaOneValue.Add($"Density code: {testedMedia.Density:X2}h");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
|
|
|
|
|
if(testedMedia.BlockSizeSpecified)
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Logical sector size: {testedMedia.BlockSize} bytes");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.PhysicalBlockSizeSpecified)
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Physical sector size: {testedMedia.PhysicalBlockSize} bytes");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.LongBlockSizeSpecified)
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"READ LONG sector size: {testedMedia.LongBlockSize} bytes");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
|
|
|
|
|
if(testedMedia.BlocksSpecified && testedMedia.BlockSizeSpecified)
|
|
|
|
|
|
{
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Medium has {testedMedia.Blocks} blocks of {testedMedia.BlockSize} bytes each");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
2017-12-20 17:26:28 +00:00
|
|
|
|
if(testedMedia.Blocks * testedMedia.BlockSize / 1024 / 1024 > 1000000)
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size: {testedMedia.Blocks * testedMedia.BlockSize} bytes, {testedMedia.Blocks * testedMedia.BlockSize / 1000 / 1000 / 1000 / 1000} Tb, {(double)(testedMedia.Blocks * testedMedia.BlockSize) / 1024 / 1024 / 1024 / 1024:F2} TiB");
|
2017-12-20 17:26:28 +00:00
|
|
|
|
else if(testedMedia.Blocks * testedMedia.BlockSize / 1024 / 1024 > 1000)
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size: {testedMedia.Blocks * testedMedia.BlockSize} bytes, {testedMedia.Blocks * testedMedia.BlockSize / 1000 / 1000 / 1000} Gb, {(double)(testedMedia.Blocks * testedMedia.BlockSize) / 1024 / 1024 / 1024:F2} GiB");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
else
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size: {testedMedia.Blocks * testedMedia.BlockSize} bytes, {testedMedia.Blocks * testedMedia.BlockSize / 1000 / 1000} Mb, {(double)(testedMedia.Blocks * testedMedia.BlockSize) / 1024 / 1024:F2} MiB");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.CHS != null && testedMedia.CurrentCHS != null)
|
|
|
|
|
|
{
|
2017-12-19 20:33:03 +00:00
|
|
|
|
int currentSectors = testedMedia.CurrentCHS.Cylinders * testedMedia.CurrentCHS.Heads *
|
|
|
|
|
|
testedMedia.CurrentCHS.Sectors;
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Cylinders: {testedMedia.CHS.Cylinders} max., {testedMedia.CurrentCHS.Cylinders} current");
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Heads: {testedMedia.CHS.Heads} max., {testedMedia.CurrentCHS.Heads} current");
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Sectors per track: {testedMedia.CHS.Sectors} max., {testedMedia.CurrentCHS.Sectors} current");
|
|
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Sectors addressable in CHS mode: {testedMedia.CHS.Cylinders * testedMedia.CHS.Heads * testedMedia.CHS.Sectors} max., {currentSectors} current");
|
|
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in CHS mode: {(ulong)currentSectors * testedMedia.BlockSize} bytes, {(ulong)currentSectors * testedMedia.BlockSize / 1000 / 1000} Mb, {(double)((ulong)currentSectors * testedMedia.BlockSize) / 1024 / 1024:F2} MiB");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
}
|
2017-06-05 18:21:16 +01:00
|
|
|
|
else if(testedMedia.CHS != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
int currentSectors = testedMedia.CHS.Cylinders * testedMedia.CHS.Heads * testedMedia.CHS.Sectors;
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Cylinders: {testedMedia.CHS.Cylinders}");
|
|
|
|
|
|
mediaOneValue.Add($"Heads: {testedMedia.CHS.Heads}");
|
|
|
|
|
|
mediaOneValue.Add($"Sectors per track: {testedMedia.CHS.Sectors}");
|
|
|
|
|
|
mediaOneValue.Add($"Sectors addressable in CHS mode: {currentSectors}");
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in CHS mode: {(ulong)currentSectors * testedMedia.BlockSize} bytes, {(ulong)currentSectors * testedMedia.BlockSize / 1000 / 1000} Mb, {(double)((ulong)currentSectors * testedMedia.BlockSize) / 1024 / 1024:F2} MiB");
|
2017-06-05 18:21:16 +01:00
|
|
|
|
}
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
|
|
|
|
|
if(testedMedia.LBASectorsSpecified)
|
|
|
|
|
|
{
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Sectors addressable in sectors in 28-bit LBA mode: {testedMedia.LBASectors}");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
2017-12-20 17:26:28 +00:00
|
|
|
|
if((ulong)testedMedia.LBASectors * testedMedia.BlockSize / 1024 / 1024 > 1000000)
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in 28-bit LBA mode: {(ulong)testedMedia.LBASectors * testedMedia.BlockSize} bytes, {(ulong)testedMedia.LBASectors * testedMedia.BlockSize / 1000 / 1000 / 1000 / 1000} Tb, {(double)((ulong)testedMedia.LBASectors * testedMedia.BlockSize) / 1024 / 1024 / 1024 / 1024:F2} TiB");
|
2017-12-20 17:26:28 +00:00
|
|
|
|
else if((ulong)testedMedia.LBASectors * testedMedia.BlockSize / 1024 / 1024 > 1000)
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in 28-bit LBA mode: {(ulong)testedMedia.LBASectors * testedMedia.BlockSize} bytes, {(ulong)testedMedia.LBASectors * testedMedia.BlockSize / 1000 / 1000 / 1000} Gb, {(double)((ulong)testedMedia.LBASectors * testedMedia.BlockSize) / 1024 / 1024 / 1024:F2} GiB");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
else
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in 28-bit LBA mode: {(ulong)testedMedia.LBASectors * testedMedia.BlockSize} bytes, {(ulong)testedMedia.LBASectors * testedMedia.BlockSize / 1000 / 1000} Mb, {(double)((ulong)testedMedia.LBASectors * testedMedia.BlockSize) / 1024 / 1024:F2} MiB");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.LBA48SectorsSpecified)
|
|
|
|
|
|
{
|
2017-12-21 17:58:51 +00:00
|
|
|
|
mediaOneValue.Add($"Sectors addressable in sectors in 48-bit LBA mode: {testedMedia.LBA48Sectors}");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
2017-12-20 17:26:28 +00:00
|
|
|
|
if(testedMedia.LBA48Sectors * testedMedia.BlockSize / 1024 / 1024 > 1000000)
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in 48-bit LBA mode: {testedMedia.LBA48Sectors * testedMedia.BlockSize} bytes, {testedMedia.LBA48Sectors * testedMedia.BlockSize / 1000 / 1000 / 1000 / 1000} Tb, {(double)(testedMedia.LBA48Sectors * testedMedia.BlockSize) / 1024 / 1024 / 1024 / 1024:F2} TiB");
|
2017-12-20 17:26:28 +00:00
|
|
|
|
else if(testedMedia.LBA48Sectors * testedMedia.BlockSize / 1024 / 1024 > 1000)
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in 48-bit LBA mode: {testedMedia.LBA48Sectors * testedMedia.BlockSize} bytes, {testedMedia.LBA48Sectors * testedMedia.BlockSize / 1000 / 1000 / 1000} Gb, {(double)(testedMedia.LBA48Sectors * testedMedia.BlockSize) / 1024 / 1024 / 1024:F2} GiB");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
else
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Medium size in 48-bit LBA mode: {testedMedia.LBA48Sectors * testedMedia.BlockSize} bytes, {testedMedia.LBA48Sectors * testedMedia.BlockSize / 1000 / 1000} Mb, {(double)(testedMedia.LBA48Sectors * testedMedia.BlockSize) / 1024 / 1024:F2} MiB");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-19 20:33:03 +00:00
|
|
|
|
if(testedMedia.NominalRotationRateSpecified && testedMedia.NominalRotationRate != 0x0000 &&
|
2017-06-03 01:19:47 +01:00
|
|
|
|
testedMedia.NominalRotationRate != 0xFFFF)
|
2017-12-22 18:17:36 +00:00
|
|
|
|
mediaOneValue.Add(testedMedia.NominalRotationRate == 0x0001
|
|
|
|
|
|
? "Medium does not rotate."
|
|
|
|
|
|
: $"Medium rotates at {testedMedia.NominalRotationRate} rpm");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
2017-12-19 20:33:03 +00:00
|
|
|
|
if(testedMedia.BlockSizeSpecified && testedMedia.PhysicalBlockSizeSpecified &&
|
2017-12-20 17:26:28 +00:00
|
|
|
|
testedMedia.BlockSize != testedMedia.PhysicalBlockSize &&
|
2017-12-19 20:33:03 +00:00
|
|
|
|
(testedMedia.LogicalAlignment & 0x8000) == 0x0000 &&
|
|
|
|
|
|
(testedMedia.LogicalAlignment & 0x4000) == 0x4000)
|
2017-12-24 03:23:06 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add($"Logical sector starts at offset {testedMedia.LogicalAlignment & 0x3FFF} from physical sector");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
|
|
|
|
|
if(testedMedia.SupportsRead && ata)
|
2017-12-19 20:33:03 +00:00
|
|
|
|
mediaOneValue.Add("Device can use the READ SECTOR(S) command in CHS mode with this medium");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.SupportsReadRetry)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ SECTOR(S) RETRY command in CHS mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadDma)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ DMA command in CHS mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadDmaRetry)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ DMA RETRY command in CHS mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadLong && ata)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ LONG command in CHS mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadLongRetry)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ LONG RETRY command in CHS mode with this medium");
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.SupportsReadLba)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ SECTOR(S) command in 28-bit LBA mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadRetryLba)
|
2017-12-19 20:33:03 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add("Device can use the READ SECTOR(S) RETRY command in 28-bit LBA mode with this medium");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.SupportsReadDmaLba)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ DMA command in 28-bit LBA mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadDmaRetryLba)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ DMA RETRY command in 28-bit LBA mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadLongLba)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ LONG command in 28-bit LBA mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadLongRetryLba)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ LONG RETRY command in 28-bit LBA mode with this medium");
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.SupportsReadLba48)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ SECTOR(S) command in 48-bit LBA mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadDmaLba48)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ DMA command in 48-bit LBA mode with this medium");
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.SupportsSeek)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the SEEK command in CHS mode with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsSeekLba)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the SEEK command in 28-bit LBA mode with this medium");
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.SupportsReadCapacity)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ CAPACITY (10) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadCapacity16)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ CAPACITY (16) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsRead && !ata)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ (6) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsRead10)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ (10) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsRead12)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ (12) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsRead16)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ (16) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadLong && !ata)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ LONG (10) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadLong16)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ LONG (16) command with this medium");
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.SupportsReadCd)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ CD command with LBA addressing with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadCdMsf)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the READ CD command with MM:SS:FF addressing with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsReadCdRaw)
|
2017-12-19 20:33:03 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add("Device can use the READ CD command with LBA addressing with this medium to read raw sector");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.SupportsReadCdMsfRaw)
|
2017-12-19 20:33:03 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add("Device can use the READ CD command with MM:SS:FF addressing with this medium read raw sector");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
|
|
|
|
|
if(testedMedia.SupportsHLDTSTReadRawDVD)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the HL-DT-ST vendor READ DVD (RAW) command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsNECReadCDDA)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the NEC vendor READ CD-DA command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsPioneerReadCDDA)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the PIONEER vendor READ CD-DA command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsPioneerReadCDDAMSF)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the PIONEER vendor READ CD-DA MSF command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsPlextorReadCDDA)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the PLEXTOR vendor READ CD-DA command with this medium");
|
|
|
|
|
|
if(testedMedia.SupportsPlextorReadRawDVD)
|
|
|
|
|
|
mediaOneValue.Add("Device can use the PLEXOR vendor READ DVD (RAW) command with this medium");
|
|
|
|
|
|
|
|
|
|
|
|
if(testedMedia.CanReadAACS)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Advanced Access Content System from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadADIP)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the DVD ADress-In-Pregroove from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadATIP)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the CD Absolute-Time-In-Pregroove from this medium");
|
2017-12-19 20:33:03 +00:00
|
|
|
|
if(testedMedia.CanReadBCA) mediaOneValue.Add("Device can read the Burst Cutting Area from this medium");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.CanReadC2Pointers)
|
|
|
|
|
|
mediaOneValue.Add("Device can report the C2 pointers when reading from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadCMI)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Copyright Management Information from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadCorrectedSubchannel)
|
|
|
|
|
|
mediaOneValue.Add("Device can correct subchannels when reading from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadCorrectedSubchannelWithC2)
|
2017-12-19 20:33:03 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add("Device can correct subchannels and report the C2 pointers when reading from this medium");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.CanReadDCB)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Disc Control Blocks from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadDDS)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Disc Definition Structure from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadDMI)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Disc Manufacurer Information from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadDiscInformation)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Disc Information from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadFullTOC)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Table of Contents from this medium, without processing it");
|
|
|
|
|
|
if(testedMedia.CanReadHDCMI)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the HD DVD Copyright Management Information from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadLayerCapacity)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the layer capacity from this medium");
|
2017-12-19 20:33:03 +00:00
|
|
|
|
if(testedMedia.CanReadLeadIn) mediaOneValue.Add("Device can read the Lead-In from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadLeadOut) mediaOneValue.Add("Device can read the Lead-Out from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadMediaID) mediaOneValue.Add("Device can read the Media ID from this medium");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.CanReadMediaSerial)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Media Serial Number from this medium");
|
2017-12-19 20:33:03 +00:00
|
|
|
|
if(testedMedia.CanReadPAC) mediaOneValue.Add("Device can read the PAC from this medium");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.CanReadPFI)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Physical Format Information from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadPMA)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Power Management Area from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadPQSubchannel)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the P to Q subchannels from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadPQSubchannelWithC2)
|
2017-12-19 20:33:03 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add("Device can read the P to Q subchannels from this medium reporting the C2 pointers");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.CanReadPRI)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Pre-Recorded Information from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadRWSubchannel)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the R to W subchannels from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadRWSubchannelWithC2)
|
2017-12-19 20:33:03 +00:00
|
|
|
|
mediaOneValue
|
|
|
|
|
|
.Add("Device can read the R to W subchannels from this medium reporting the C2 pointers");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
if(testedMedia.CanReadRecordablePFI)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Physical Format Information from Lead-In from this medium");
|
|
|
|
|
|
if(testedMedia.CanReadSpareAreaInformation)
|
|
|
|
|
|
mediaOneValue.Add("Device can read the Spare Area Information from this medium");
|
2017-12-19 20:33:03 +00:00
|
|
|
|
if(testedMedia.CanReadTOC) mediaOneValue.Add("Device can read the Table of Contents from this medium");
|
2017-06-03 01:19:47 +01:00
|
|
|
|
|
|
|
|
|
|
mediaOneValue.Add("");
|
|
|
|
|
|
}
|
2017-06-03 01:10:46 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-12-19 20:33:03 +00:00
|
|
|
|
}
|