2019-01-01 16:43:34 +00:00
|
|
|
// /***************************************************************************
|
2020-02-27 12:31:23 +00:00
|
|
|
// Aaru Data Preservation Suite
|
2019-01-01 16:43:34 +00:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
//
|
2020-03-11 21:56:55 +00:00
|
|
|
// Filename : DeviceDto.cs
|
2019-01-01 16:43:34 +00:00
|
|
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
|
|
|
//
|
2020-02-27 20:47:46 +00:00
|
|
|
// Component : Aaru Server.
|
2019-01-01 16:43:34 +00:00
|
|
|
//
|
|
|
|
|
// --[ Description ] ----------------------------------------------------------
|
|
|
|
|
//
|
2020-03-11 21:56:55 +00:00
|
|
|
// DTO for syncing processed device reports in database.
|
2019-01-01 16:43:34 +00:00
|
|
|
//
|
|
|
|
|
// --[ License ] --------------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// 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.
|
|
|
|
|
//
|
|
|
|
|
// 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.
|
|
|
|
|
//
|
|
|
|
|
// 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
|
2019-01-01 16:43:34 +00:00
|
|
|
// ****************************************************************************/
|
|
|
|
|
|
|
|
|
|
// ReSharper disable VirtualMemberCallInConstructor
|
|
|
|
|
|
2023-10-05 01:05:22 +01:00
|
|
|
using System.Diagnostics.CodeAnalysis;
|
2022-03-07 07:36:43 +00:00
|
|
|
using Aaru.CommonTypes.Metadata;
|
|
|
|
|
|
2022-11-15 15:58:42 +00:00
|
|
|
namespace Aaru.Dto;
|
|
|
|
|
|
2022-03-07 07:36:43 +00:00
|
|
|
/// <summary>DTO for known device</summary>
|
2023-10-05 01:05:22 +01:00
|
|
|
[SuppressMessage("ReSharper", "UnusedMember.Global")]
|
2022-12-15 01:47:11 +00:00
|
|
|
public class DeviceDto : DeviceReport
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-07 07:36:43 +00:00
|
|
|
/// <summary>Build an empty DTO</summary>
|
2022-03-06 13:29:37 +00:00
|
|
|
public DeviceDto() {}
|
|
|
|
|
|
2022-03-07 07:36:43 +00:00
|
|
|
/// <summary>Build a DTO from a device report</summary>
|
2022-03-06 13:29:37 +00:00
|
|
|
/// <param name="report">Device report</param>
|
2022-12-15 01:47:11 +00:00
|
|
|
public DeviceDto(DeviceReport report)
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-06 13:29:37 +00:00
|
|
|
ATA = report.ATA;
|
|
|
|
|
ATAPI = report.ATAPI;
|
|
|
|
|
CompactFlash = report.CompactFlash;
|
|
|
|
|
FireWire = report.FireWire;
|
|
|
|
|
MultiMediaCard = report.MultiMediaCard;
|
|
|
|
|
PCMCIA = report.PCMCIA;
|
|
|
|
|
SCSI = report.SCSI;
|
|
|
|
|
SecureDigital = report.SecureDigital;
|
|
|
|
|
USB = report.USB;
|
|
|
|
|
Manufacturer = report.Manufacturer;
|
|
|
|
|
Model = report.Model;
|
|
|
|
|
Revision = report.Revision;
|
|
|
|
|
Type = report.Type;
|
|
|
|
|
GdRomSwapDiscCapabilities = report.GdRomSwapDiscCapabilities;
|
|
|
|
|
}
|
2019-01-02 04:05:51 +00:00
|
|
|
|
2022-03-07 07:36:43 +00:00
|
|
|
/// <summary>Build a DTO from a device report with the specified parameters</summary>
|
2022-03-06 13:29:37 +00:00
|
|
|
/// <param name="report">Device report</param>
|
|
|
|
|
/// <param name="id">Database ID</param>
|
|
|
|
|
/// <param name="optimalMultipleSectorsRead">Optimal number of blocks for read</param>
|
|
|
|
|
/// <param name="canReadGdRomUsingSwapDisc">Can read GD-ROM using swap trick?</param>
|
2022-12-15 01:47:11 +00:00
|
|
|
public DeviceDto(DeviceReport report, int id, int optimalMultipleSectorsRead, bool? canReadGdRomUsingSwapDisc)
|
2022-03-06 13:29:37 +00:00
|
|
|
{
|
|
|
|
|
ATA = report.ATA;
|
|
|
|
|
ATAPI = report.ATAPI;
|
|
|
|
|
CompactFlash = report.CompactFlash;
|
|
|
|
|
FireWire = report.FireWire;
|
|
|
|
|
MultiMediaCard = report.MultiMediaCard;
|
|
|
|
|
PCMCIA = report.PCMCIA;
|
|
|
|
|
SCSI = report.SCSI;
|
|
|
|
|
SecureDigital = report.SecureDigital;
|
|
|
|
|
USB = report.USB;
|
|
|
|
|
Manufacturer = report.Manufacturer;
|
|
|
|
|
Model = report.Model;
|
|
|
|
|
Revision = report.Revision;
|
|
|
|
|
Type = report.Type;
|
|
|
|
|
GdRomSwapDiscCapabilities = report.GdRomSwapDiscCapabilities;
|
|
|
|
|
|
|
|
|
|
if(ATA != null)
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-06 13:29:37 +00:00
|
|
|
ATA.Identify = null;
|
|
|
|
|
ATA.ReadCapabilities = ClearBinaries(ATA.ReadCapabilities);
|
|
|
|
|
|
|
|
|
|
if(ATA.RemovableMedias != null)
|
|
|
|
|
{
|
|
|
|
|
TestedMedia[] medias = ATA.RemovableMedias.ToArray();
|
2024-05-01 04:39:38 +01:00
|
|
|
ATA.RemovableMedias = [];
|
2022-03-06 13:29:37 +00:00
|
|
|
|
2024-05-01 04:05:22 +01:00
|
|
|
foreach(TestedMedia media in medias) ATA.RemovableMedias.Add(ClearBinaries(media));
|
2022-03-06 13:29:37 +00:00
|
|
|
}
|
2019-01-01 16:43:34 +00:00
|
|
|
}
|
|
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(ATAPI != null)
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-06 13:29:37 +00:00
|
|
|
ATAPI.Identify = null;
|
|
|
|
|
ATAPI.ReadCapabilities = ClearBinaries(ATAPI.ReadCapabilities);
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(ATAPI.RemovableMedias != null)
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-06 13:29:37 +00:00
|
|
|
TestedMedia[] medias = ATAPI.RemovableMedias.ToArray();
|
2024-05-01 04:39:38 +01:00
|
|
|
ATAPI.RemovableMedias = [];
|
2019-11-25 00:54:39 +00:00
|
|
|
|
2024-05-01 04:05:22 +01:00
|
|
|
foreach(TestedMedia media in medias) ATAPI.RemovableMedias.Add(ClearBinaries(media));
|
2019-01-01 16:43:34 +00:00
|
|
|
}
|
2022-03-06 13:29:37 +00:00
|
|
|
}
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(PCMCIA != null)
|
|
|
|
|
{
|
|
|
|
|
PCMCIA.AdditionalInformation = null;
|
|
|
|
|
PCMCIA.CIS = null;
|
|
|
|
|
}
|
2019-11-25 00:54:39 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
MultiMediaCard = null;
|
|
|
|
|
SecureDigital = null;
|
2019-11-25 00:54:39 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(SCSI != null)
|
|
|
|
|
{
|
|
|
|
|
SCSI.EVPDPages = null;
|
|
|
|
|
SCSI.InquiryData = null;
|
|
|
|
|
SCSI.ModeSense6Data = null;
|
|
|
|
|
SCSI.ModeSense10Data = null;
|
|
|
|
|
SCSI.ModeSense6CurrentData = null;
|
|
|
|
|
SCSI.ModeSense10CurrentData = null;
|
|
|
|
|
SCSI.ModeSense6ChangeableData = null;
|
|
|
|
|
SCSI.ModeSense10ChangeableData = null;
|
|
|
|
|
SCSI.ReadCapabilities = ClearBinaries(SCSI.ReadCapabilities);
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(SCSI.ModeSense != null)
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-06 13:29:37 +00:00
|
|
|
SCSI.ModeSense.BlockDescriptors = null;
|
|
|
|
|
SCSI.ModeSense.ModePages = null;
|
2019-01-01 16:43:34 +00:00
|
|
|
}
|
|
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(SCSI.RemovableMedias != null)
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-06 13:29:37 +00:00
|
|
|
TestedMedia[] medias = SCSI.RemovableMedias.ToArray();
|
2024-05-01 04:39:38 +01:00
|
|
|
SCSI.RemovableMedias = [];
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2024-05-01 04:05:22 +01:00
|
|
|
foreach(TestedMedia media in medias) SCSI.RemovableMedias.Add(ClearBinaries(media));
|
2022-03-06 13:29:37 +00:00
|
|
|
}
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(SCSI.MultiMediaDevice != null)
|
|
|
|
|
{
|
|
|
|
|
SCSI.MultiMediaDevice.ModeSense2AData = null;
|
2019-11-25 00:54:39 +00:00
|
|
|
|
2025-11-24 20:24:58 +00:00
|
|
|
SCSI.MultiMediaDevice.Features?.BinaryData = null;
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
if(SCSI.MultiMediaDevice.TestedMedia != null)
|
2019-01-01 16:43:34 +00:00
|
|
|
{
|
2022-03-06 13:29:37 +00:00
|
|
|
TestedMedia[] medias = SCSI.MultiMediaDevice.TestedMedia.ToArray();
|
2024-05-01 04:39:38 +01:00
|
|
|
SCSI.MultiMediaDevice.TestedMedia = [];
|
2019-11-25 00:54:39 +00:00
|
|
|
|
2024-05-01 04:05:22 +01:00
|
|
|
foreach(TestedMedia media in medias) SCSI.MultiMediaDevice.TestedMedia.Add(ClearBinaries(media));
|
2019-01-01 16:43:34 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
SCSI.SequentialDevice = null;
|
2019-01-01 16:43:34 +00:00
|
|
|
}
|
|
|
|
|
|
2025-11-24 20:24:58 +00:00
|
|
|
USB?.Descriptors = null;
|
2019-01-03 16:55:15 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
Id = id;
|
|
|
|
|
OptimalMultipleSectorsRead = optimalMultipleSectorsRead;
|
|
|
|
|
CanReadGdRomUsingSwapDisc = canReadGdRomUsingSwapDisc;
|
|
|
|
|
}
|
2020-07-10 17:48:22 +01:00
|
|
|
|
2022-03-07 07:36:43 +00:00
|
|
|
/// <summary>Optimal maximum number of transfer blocks to read</summary>
|
2022-03-06 13:29:37 +00:00
|
|
|
public int OptimalMultipleSectorsRead { get; set; }
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2022-03-07 07:36:43 +00:00
|
|
|
/// <summary>Can read GD-ROM using disc swap trick?</summary>
|
2022-03-06 13:29:37 +00:00
|
|
|
public bool? CanReadGdRomUsingSwapDisc { get; set; }
|
2019-01-01 16:43:34 +00:00
|
|
|
|
2022-03-07 07:36:43 +00:00
|
|
|
/// <summary>Database ID</summary>
|
2022-03-06 13:29:37 +00:00
|
|
|
public new int Id { get; set; }
|
2019-11-25 00:54:39 +00:00
|
|
|
|
2022-03-06 13:29:37 +00:00
|
|
|
static TestedMedia ClearBinaries(TestedMedia media)
|
|
|
|
|
{
|
2024-05-01 04:05:22 +01:00
|
|
|
if(media is null) return null;
|
2022-03-06 13:29:37 +00:00
|
|
|
|
|
|
|
|
media.AdipData = null;
|
|
|
|
|
media.AtipData = null;
|
|
|
|
|
media.BluBcaData = null;
|
|
|
|
|
media.BluDdsData = null;
|
|
|
|
|
media.BluDiData = null;
|
|
|
|
|
media.BluPacData = null;
|
|
|
|
|
media.BluSaiData = null;
|
|
|
|
|
media.C2PointersData = null;
|
|
|
|
|
media.CmiData = null;
|
|
|
|
|
media.CorrectedSubchannelData = null;
|
|
|
|
|
media.CorrectedSubchannelWithC2Data = null;
|
|
|
|
|
media.DcbData = null;
|
|
|
|
|
media.DmiData = null;
|
|
|
|
|
media.DvdAacsData = null;
|
|
|
|
|
media.DvdBcaData = null;
|
|
|
|
|
media.DvdDdsData = null;
|
|
|
|
|
media.DvdLayerData = null;
|
|
|
|
|
media.DvdSaiData = null;
|
|
|
|
|
media.EmbossedPfiData = null;
|
|
|
|
|
media.FullTocData = null;
|
|
|
|
|
media.HdCmiData = null;
|
|
|
|
|
media.HLDTSTReadRawDVDData = null;
|
|
|
|
|
media.IdentifyData = null;
|
|
|
|
|
media.LeadInData = null;
|
|
|
|
|
media.LeadOutData = null;
|
|
|
|
|
media.ModeSense6Data = null;
|
|
|
|
|
media.ModeSense10Data = null;
|
|
|
|
|
media.NecReadCddaData = null;
|
|
|
|
|
media.PfiData = null;
|
|
|
|
|
media.PioneerReadCddaData = null;
|
|
|
|
|
media.PioneerReadCddaMsfData = null;
|
|
|
|
|
media.PlextorReadCddaData = null;
|
|
|
|
|
media.PlextorReadRawDVDData = null;
|
|
|
|
|
media.PmaData = null;
|
|
|
|
|
media.PQSubchannelData = null;
|
|
|
|
|
media.PQSubchannelWithC2Data = null;
|
|
|
|
|
media.PriData = null;
|
|
|
|
|
media.Read6Data = null;
|
|
|
|
|
media.Read10Data = null;
|
|
|
|
|
media.Read12Data = null;
|
|
|
|
|
media.Read16Data = null;
|
|
|
|
|
media.ReadCdData = null;
|
|
|
|
|
media.ReadCdFullData = null;
|
|
|
|
|
media.ReadCdMsfData = null;
|
|
|
|
|
media.ReadCdMsfFullData = null;
|
|
|
|
|
media.ReadDmaData = null;
|
|
|
|
|
media.ReadDmaLba48Data = null;
|
|
|
|
|
media.ReadDmaLbaData = null;
|
|
|
|
|
media.ReadDmaRetryData = null;
|
|
|
|
|
media.ReadLba48Data = null;
|
|
|
|
|
media.ReadLbaData = null;
|
|
|
|
|
media.ReadLong10Data = null;
|
|
|
|
|
media.ReadLong16Data = null;
|
|
|
|
|
media.ReadLongData = null;
|
|
|
|
|
media.ReadLongLbaData = null;
|
|
|
|
|
media.ReadLongRetryData = null;
|
|
|
|
|
media.ReadLongRetryLbaData = null;
|
|
|
|
|
media.ReadRetryLbaData = null;
|
|
|
|
|
media.ReadSectorsData = null;
|
|
|
|
|
media.ReadSectorsRetryData = null;
|
|
|
|
|
media.RWSubchannelData = null;
|
|
|
|
|
media.RWSubchannelWithC2Data = null;
|
|
|
|
|
media.TocData = null;
|
|
|
|
|
media.Track1PregapData = null;
|
|
|
|
|
|
|
|
|
|
return media;
|
2019-01-01 16:43:34 +00:00
|
|
|
}
|
|
|
|
|
}
|