Files
Aaru.CommonTypes/Metadata/DeviceReportV2.cs

1759 lines
78 KiB
C#
Raw Normal View History

// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : DeviceReportV2.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : JSON metadata.
//
// --[ Description ] ----------------------------------------------------------
//
// Contains classes for a JSON device report.
//
// --[ License ] --------------------------------------------------------------
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
2018-12-29 17:34:38 +00:00
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
2018-11-27 00:23:05 +00:00
using DiscImageChef.CommonTypes.Enums;
using DiscImageChef.Decoders.ATA;
using DiscImageChef.Decoders.SCSI;
using DiscImageChef.Decoders.SCSI.MMC;
using Newtonsoft.Json;
// ReSharper disable VirtualMemberNeverOverridden.Global
// ReSharper disable VirtualMemberCallInConstructor
// ReSharper disable InconsistentNaming
// ReSharper disable UnusedAutoPropertyAccessor.Global
namespace DiscImageChef.CommonTypes.Metadata
{
public class DeviceReportV2
{
public DeviceReportV2() { }
public DeviceReportV2(DeviceReport reportV1)
{
2019-11-03 01:41:48 +00:00
if(reportV1.USB != null)
USB = new Usb(reportV1.USB);
if(reportV1.FireWire != null)
FireWire = new FireWire(reportV1.FireWire);
if(reportV1.PCMCIA != null)
PCMCIA = new Pcmcia(reportV1.PCMCIA);
if(reportV1.CompactFlashSpecified)
CompactFlash = reportV1.CompactFlash;
if(reportV1.ATA != null)
{
ATA = new Ata(reportV1.ATA);
Type = DeviceType.ATA;
}
if(reportV1.SCSI != null)
{
SCSI = new Scsi(reportV1.SCSI);
Type = DeviceType.SCSI;
if(SCSI.ModeSense?.ModePages?.FirstOrDefault(p => p.page == 0x2A)?.value != null)
{
if(SCSI.MultiMediaDevice != null)
SCSI.MultiMediaDevice.ModeSense2AData =
SCSI.ModeSense?.ModePages?.FirstOrDefault(p => p.page == 0x2A)?.value;
else if(SCSI.Inquiry?.PeripheralDeviceType == (byte)PeripheralDeviceTypes.MultiMediaDevice)
SCSI.MultiMediaDevice = new Mmc
{
ModeSense2AData = SCSI.ModeSense?.ModePages?.FirstOrDefault(p => p.page == 0x2A)?.value
};
}
}
if(reportV1.ATAPI != null)
{
ATAPI = new Ata(reportV1.ATAPI);
Type = DeviceType.ATAPI;
}
if(reportV1.MultiMediaCard != null)
{
MultiMediaCard = new MmcSd(reportV1.MultiMediaCard);
Type = DeviceType.MMC;
}
if(reportV1.SecureDigital != null)
{
SecureDigital = new MmcSd(reportV1.SecureDigital);
Type = DeviceType.SecureDigital;
}
if(reportV1.SCSI?.Inquiry != null)
{
Manufacturer = reportV1.SCSI.Inquiry.VendorIdentification;
Model = reportV1.SCSI.Inquiry.ProductIdentification;
Revision = reportV1.SCSI.Inquiry.ProductRevisionLevel;
}
2019-11-03 01:41:48 +00:00
else if(reportV1.ATA != null ||
reportV1.ATAPI != null)
{
ataType ata = reportV1.ATA ?? reportV1.ATAPI;
string[] split = ata.Model.Split(' ');
if(split.Length > 1)
{
Manufacturer = split[0];
Model = string.Join(" ", split, 1, split.Length - 1);
}
2019-11-03 01:41:48 +00:00
else
Model = ata.Model;
Revision = ata.FirmwareRevision;
}
}
[JsonIgnore]
public int Id { get; set; }
public virtual Usb USB { get; set; }
public virtual FireWire FireWire { get; set; }
public virtual Pcmcia PCMCIA { get; set; }
public bool CompactFlash { get; set; }
public virtual Ata ATA { get; set; }
public virtual Ata ATAPI { get; set; }
public virtual Scsi SCSI { get; set; }
public virtual MmcSd MultiMediaCard { get; set; }
public virtual MmcSd SecureDigital { get; set; }
2018-11-27 00:23:05 +00:00
public string Manufacturer { get; set; }
public string Model { get; set; }
public string Revision { get; set; }
public DeviceType Type { get; set; }
}
public class Usb
{
public Usb() { }
public Usb(usbType usb)
{
VendorID = usb.VendorID;
ProductID = usb.ProductID;
Manufacturer = usb.Manufacturer;
Product = usb.Product;
RemovableMedia = usb.RemovableMedia;
Descriptors = usb.Descriptors;
}
[JsonIgnore]
public int Id { get; set; }
public ushort VendorID { get; set; }
public ushort ProductID { get; set; }
public string Manufacturer { get; set; }
public string Product { get; set; }
public bool RemovableMedia { get; set; }
public byte[] Descriptors { get; set; }
}
public class FireWire
{
public FireWire() { }
public FireWire(firewireType firewire)
{
VendorID = firewire.VendorID;
ProductID = firewire.ProductID;
Manufacturer = firewire.Manufacturer;
Product = firewire.Product;
RemovableMedia = firewire.RemovableMedia;
}
[JsonIgnore]
public int Id { get; set; }
public uint VendorID { get; set; }
public uint ProductID { get; set; }
public string Manufacturer { get; set; }
public string Product { get; set; }
public bool RemovableMedia { get; set; }
}
public class Ata
{
public Ata() { }
public Ata(ataType ata)
{
Identify = ata.Identify;
2019-11-03 01:41:48 +00:00
if(ata.ReadCapabilities != null)
ReadCapabilities = new TestedMedia(ata.ReadCapabilities, true);
if(ata.RemovableMedias != null)
{
RemovableMedias = new List<TestedMedia>();
foreach(testedMediaType ataRemovableMedia in ata.RemovableMedias)
RemovableMedias.Add(new TestedMedia(ataRemovableMedia, true));
}
2019-11-03 01:41:48 +00:00
if(Identify != null)
return;
2019-11-03 01:41:48 +00:00
var identifyDevice = new Identify.IdentifyDevice();
2019-11-03 01:41:48 +00:00
if(ata.AdditionalPIDSpecified)
identifyDevice.AdditionalPID = ata.AdditionalPID;
2019-11-03 01:41:48 +00:00
if(ata.APIOSupportedSpecified)
identifyDevice.APIOSupported = ata.APIOSupported;
2019-11-03 01:41:48 +00:00
if(ata.ATAPIByteCountSpecified)
identifyDevice.ATAPIByteCount = ata.ATAPIByteCount;
2019-11-03 01:41:48 +00:00
if(ata.BufferTypeSpecified)
identifyDevice.BufferType = ata.BufferType;
2019-11-03 01:41:48 +00:00
if(ata.BufferSizeSpecified)
identifyDevice.BufferSize = ata.BufferSize;
2019-11-03 01:41:48 +00:00
if(ata.CapabilitiesSpecified)
identifyDevice.Capabilities = ata.Capabilities;
2019-11-03 01:41:48 +00:00
if(ata.Capabilities2Specified)
identifyDevice.Capabilities2 = ata.Capabilities2;
2019-11-03 01:41:48 +00:00
if(ata.Capabilities3Specified)
identifyDevice.Capabilities3 = ata.Capabilities3;
2019-11-03 01:41:48 +00:00
if(ata.CFAPowerModeSpecified)
identifyDevice.CFAPowerMode = ata.CFAPowerMode;
2019-11-03 01:41:48 +00:00
if(ata.CommandSetSpecified)
identifyDevice.CommandSet = ata.CommandSet;
2019-11-03 01:41:48 +00:00
if(ata.CommandSet2Specified)
identifyDevice.CommandSet2 = ata.CommandSet2;
2019-11-03 01:41:48 +00:00
if(ata.CommandSet3Specified)
identifyDevice.CommandSet3 = ata.CommandSet3;
2019-11-03 01:41:48 +00:00
if(ata.CommandSet4Specified)
identifyDevice.CommandSet4 = ata.CommandSet4;
2019-11-03 01:41:48 +00:00
if(ata.CommandSet5Specified)
identifyDevice.CommandSet4 = ata.CommandSet4;
2019-11-03 01:41:48 +00:00
if(ata.CurrentAAMSpecified)
identifyDevice.CurrentAAM = ata.CurrentAAM;
2019-11-03 01:41:48 +00:00
if(ata.CurrentAPMSpecified)
identifyDevice.CurrentAPM = ata.CurrentAPM;
2019-11-03 01:41:48 +00:00
if(ata.DataSetMgmtSpecified)
identifyDevice.DataSetMgmt = ata.DataSetMgmt;
2019-11-03 01:41:48 +00:00
if(ata.DataSetMgmtSizeSpecified)
identifyDevice.DataSetMgmtSize = ata.DataSetMgmtSize;
2019-11-03 01:41:48 +00:00
if(ata.DeviceFormFactorSpecified)
identifyDevice.DeviceFormFactor = ata.DeviceFormFactor;
2019-11-03 01:41:48 +00:00
if(ata.DMAActiveSpecified)
identifyDevice.DMAActive = ata.DMAActive;
2019-11-03 01:41:48 +00:00
if(ata.DMASupportedSpecified)
identifyDevice.DMASupported = ata.DMASupported;
2019-11-03 01:41:48 +00:00
if(ata.DMATransferTimingModeSpecified)
identifyDevice.DMATransferTimingMode = ata.DMATransferTimingMode;
if(ata.EnhancedSecurityEraseTimeSpecified)
identifyDevice.EnhancedSecurityEraseTime = ata.EnhancedSecurityEraseTime;
2019-11-03 01:41:48 +00:00
if(ata.EnabledCommandSetSpecified)
identifyDevice.EnabledCommandSet = ata.EnabledCommandSet;
2019-11-03 01:41:48 +00:00
if(ata.EnabledCommandSet2Specified)
identifyDevice.EnabledCommandSet2 = ata.EnabledCommandSet2;
2019-11-03 01:41:48 +00:00
if(ata.EnabledCommandSet3Specified)
identifyDevice.EnabledCommandSet3 = ata.EnabledCommandSet3;
2019-11-03 01:41:48 +00:00
if(ata.EnabledCommandSet4Specified)
identifyDevice.EnabledCommandSet4 = ata.EnabledCommandSet4;
2019-11-03 01:41:48 +00:00
if(ata.EnabledSATAFeaturesSpecified)
identifyDevice.EnabledSATAFeatures = ata.EnabledSATAFeatures;
2019-11-03 01:41:48 +00:00
if(ata.ExtendedUserSectorsSpecified)
identifyDevice.ExtendedUserSectors = ata.ExtendedUserSectors;
2019-11-03 01:41:48 +00:00
if(ata.FreeFallSensitivitySpecified)
identifyDevice.FreeFallSensitivity = ata.FreeFallSensitivity;
2019-11-03 01:41:48 +00:00
if(ata.FirmwareRevisionSpecified)
identifyDevice.FirmwareRevision = ata.FirmwareRevision;
2019-11-03 01:41:48 +00:00
if(ata.GeneralConfigurationSpecified)
identifyDevice.GeneralConfiguration = ata.GeneralConfiguration;
2019-11-03 01:41:48 +00:00
if(ata.HardwareResetResultSpecified)
identifyDevice.HardwareResetResult = ata.HardwareResetResult;
2019-11-03 01:41:48 +00:00
if(ata.InterseekDelaySpecified)
identifyDevice.InterseekDelay = ata.InterseekDelay;
2019-11-03 01:41:48 +00:00
if(ata.MajorVersionSpecified)
identifyDevice.MajorVersion = ata.MajorVersion;
if(ata.MasterPasswordRevisionCodeSpecified)
identifyDevice.MasterPasswordRevisionCode = ata.MasterPasswordRevisionCode;
2019-11-03 01:41:48 +00:00
if(ata.MaxDownloadMicroMode3Specified)
identifyDevice.MaxDownloadMicroMode3 = ata.MaxDownloadMicroMode3;
2019-11-03 01:41:48 +00:00
if(ata.MaxQueueDepthSpecified)
identifyDevice.MaxQueueDepth = ata.MaxQueueDepth;
2019-11-03 01:41:48 +00:00
if(ata.MDMAActiveSpecified)
identifyDevice.MDMAActive = ata.MDMAActive;
2019-11-03 01:41:48 +00:00
if(ata.MDMASupportedSpecified)
identifyDevice.MDMASupported = ata.MDMASupported;
2019-11-03 01:41:48 +00:00
if(ata.MinDownloadMicroMode3Specified)
identifyDevice.MinDownloadMicroMode3 = ata.MinDownloadMicroMode3;
2019-11-03 01:41:48 +00:00
if(ata.MinMDMACycleTimeSpecified)
identifyDevice.MinMDMACycleTime = ata.MinMDMACycleTime;
2019-11-03 01:41:48 +00:00
if(ata.MinorVersionSpecified)
identifyDevice.MinorVersion = ata.MinorVersion;
2019-11-03 01:41:48 +00:00
if(ata.MinPIOCycleTimeNoFlowSpecified)
identifyDevice.MinPIOCycleTimeNoFlow = ata.MinPIOCycleTimeNoFlow;
2019-11-03 01:41:48 +00:00
if(ata.MinPIOCycleTimeFlowSpecified)
identifyDevice.MinPIOCycleTimeFlow = ata.MinPIOCycleTimeFlow;
2019-11-03 01:41:48 +00:00
if(ata.ModelSpecified)
identifyDevice.Model = ata.Model;
2019-11-03 01:41:48 +00:00
if(ata.MultipleMaxSectorsSpecified)
identifyDevice.MultipleMaxSectors = ata.MultipleMaxSectors;
2019-11-03 01:41:48 +00:00
if(ata.MultipleSectorNumberSpecified)
identifyDevice.MultipleSectorNumber = ata.MultipleSectorNumber;
2019-11-03 01:41:48 +00:00
if(ata.NVCacheCapsSpecified)
identifyDevice.NVCacheCaps = ata.NVCacheCaps;
2019-11-03 01:41:48 +00:00
if(ata.NVCacheSizeSpecified)
identifyDevice.NVCacheSize = ata.NVCacheSize;
2019-11-03 01:41:48 +00:00
if(ata.NVCacheWriteSpeedSpecified)
identifyDevice.NVCacheWriteSpeed = ata.NVCacheWriteSpeed;
2019-11-03 01:41:48 +00:00
if(ata.NVEstimatedSpinUpSpecified)
identifyDevice.NVEstimatedSpinUp = ata.NVEstimatedSpinUp;
2019-11-03 01:41:48 +00:00
if(ata.PacketBusReleaseSpecified)
identifyDevice.PacketBusRelease = ata.PacketBusRelease;
2019-11-03 01:41:48 +00:00
if(ata.PIOTransferTimingModeSpecified)
identifyDevice.PIOTransferTimingMode = ata.PIOTransferTimingMode;
2019-11-03 01:41:48 +00:00
if(ata.RecommendedAAMSpecified)
identifyDevice.RecommendedAAM = ata.RecommendedAAM;
2019-11-03 01:41:48 +00:00
if(ata.RecommendedMDMACycleTimeSpecified)
identifyDevice.RecMDMACycleTime = ata.RecommendedMDMACycleTime;
2019-11-03 01:41:48 +00:00
if(ata.RemovableStatusSetSpecified)
identifyDevice.RemovableStatusSet = ata.RemovableStatusSet;
2019-11-03 01:41:48 +00:00
if(ata.SATACapabilitiesSpecified)
identifyDevice.SATACapabilities = ata.SATACapabilities;
2019-11-03 01:41:48 +00:00
if(ata.SATACapabilities2Specified)
identifyDevice.SATACapabilities2 = ata.SATACapabilities2;
2019-11-03 01:41:48 +00:00
if(ata.SATAFeaturesSpecified)
identifyDevice.SATAFeatures = ata.SATAFeatures;
2019-11-03 01:41:48 +00:00
if(ata.SCTCommandTransportSpecified)
identifyDevice.SCTCommandTransport = ata.SCTCommandTransport;
2019-11-03 01:41:48 +00:00
if(ata.SectorsPerCardSpecified)
identifyDevice.SectorsPerCard = ata.SectorsPerCard;
2019-11-03 01:41:48 +00:00
if(ata.SecurityEraseTimeSpecified)
identifyDevice.SecurityEraseTime = ata.SecurityEraseTime;
2019-11-03 01:41:48 +00:00
if(ata.SecurityStatusSpecified)
identifyDevice.SecurityStatus = ata.SecurityStatus;
2019-11-03 01:41:48 +00:00
if(ata.ServiceBusyClearSpecified)
identifyDevice.ServiceBusyClear = ata.ServiceBusyClear;
2019-11-03 01:41:48 +00:00
if(ata.SpecificConfigurationSpecified)
identifyDevice.SpecificConfiguration = ata.SpecificConfiguration;
2019-11-03 01:41:48 +00:00
if(ata.StreamAccessLatencySpecified)
identifyDevice.StreamAccessLatency = ata.StreamAccessLatency;
2019-11-03 01:41:48 +00:00
if(ata.StreamMinReqSizeSpecified)
identifyDevice.StreamMinReqSize = ata.StreamMinReqSize;
if(ata.StreamPerformanceGranularitySpecified)
identifyDevice.StreamPerformanceGranularity = ata.StreamPerformanceGranularity;
2019-11-03 01:41:48 +00:00
if(ata.StreamTransferTimeDMASpecified)
identifyDevice.StreamTransferTimeDMA = ata.StreamTransferTimeDMA;
2019-11-03 01:41:48 +00:00
if(ata.StreamTransferTimePIOSpecified)
identifyDevice.StreamTransferTimePIO = ata.StreamTransferTimePIO;
2019-11-03 01:41:48 +00:00
if(ata.TransportMajorVersionSpecified)
identifyDevice.TransportMajorVersion = ata.TransportMajorVersion;
2019-11-03 01:41:48 +00:00
if(ata.TransportMinorVersionSpecified)
identifyDevice.TransportMinorVersion = ata.TransportMinorVersion;
2019-11-03 01:41:48 +00:00
if(ata.TrustedComputingSpecified)
identifyDevice.TrustedComputing = ata.TrustedComputing;
2019-11-03 01:41:48 +00:00
if(ata.UDMAActiveSpecified)
identifyDevice.UDMAActive = ata.UDMAActive;
2019-11-03 01:41:48 +00:00
if(ata.UDMASupportedSpecified)
identifyDevice.UDMASupported = ata.UDMASupported;
2019-11-03 01:41:48 +00:00
if(ata.WRVModeSpecified)
identifyDevice.WRVMode = ata.WRVMode;
2019-11-03 01:41:48 +00:00
if(ata.WRVSectorCountMode3Specified)
identifyDevice.WRVSectorCountMode3 = ata.WRVSectorCountMode3;
2019-11-03 01:41:48 +00:00
if(ata.WRVSectorCountMode2Specified)
identifyDevice.WRVSectorCountMode2 = ata.WRVSectorCountMode2;
Identify = Decoders.ATA.Identify.Encode(identifyDevice);
}
public Identify.IdentifyDevice? IdentifyDevice => Decoders.ATA.Identify.Decode(Identify);
[JsonIgnore]
public int Id { get; set; }
public byte[] Identify { get; set; }
public virtual TestedMedia ReadCapabilities { get; set; }
public virtual List<TestedMedia> RemovableMedias { get; set; }
}
public class Chs
{
public Chs() { }
public Chs(chsType chs)
{
Cylinders = chs.Cylinders;
Heads = chs.Heads;
Sectors = chs.Sectors;
}
[JsonIgnore]
public int Id { get; set; }
public ushort Cylinders { get; set; }
public ushort Heads { get; set; }
public ushort Sectors { get; set; }
}
public class Scsi
{
public Scsi() { }
public Scsi(scsiType scsi)
{
InquiryData = scsi.Inquiry.Data;
SupportsModeSense6 = scsi.SupportsModeSense6;
SupportsModeSense10 = scsi.SupportsModeSense10;
SupportsModeSubpages = scsi.SupportsModeSubpages;
2019-11-03 01:41:48 +00:00
if(scsi.ReadCapabilitiesSpecified &&
scsi.ReadCapabilities != null)
ReadCapabilities = new TestedMedia(scsi.ReadCapabilities, false);
if(scsi.RemovableMedias != null)
{
RemovableMedias = new List<TestedMedia>();
2019-11-03 01:41:48 +00:00
foreach(testedMediaType scsiRemovableMedia in scsi.RemovableMedias)
RemovableMedias.Add(new TestedMedia(scsiRemovableMedia, false));
}
ModeSense6Data = scsi.ModeSense6Data;
ModeSense10Data = scsi.ModeSense10Data;
if(scsi.EVPDPages != null)
{
EVPDPages = new List<ScsiPage>();
2019-11-03 01:41:48 +00:00
foreach(pageType evpdPage in scsi.EVPDPages)
EVPDPages.Add(new ScsiPage(evpdPage));
}
2019-11-03 01:41:48 +00:00
if(scsi.ModeSense != null)
ModeSense = new ScsiMode(scsi.ModeSense);
2019-11-03 01:41:48 +00:00
if(scsi.MultiMediaDevice != null)
MultiMediaDevice = new Mmc(scsi.MultiMediaDevice);
2019-11-03 01:41:48 +00:00
if(scsi.SequentialDevice != null)
SequentialDevice = new Ssc(scsi.SequentialDevice);
2019-11-03 01:41:48 +00:00
if(InquiryData != null)
return;
2019-11-03 01:41:48 +00:00
var inq = new Inquiry.SCSIInquiry();
2019-11-03 01:41:48 +00:00
if(scsi.Inquiry.ANSIVersionSpecified)
inq.ANSIVersion = scsi.Inquiry.ANSIVersion;
2019-11-03 01:41:48 +00:00
if(scsi.Inquiry.ECMAVersionSpecified)
inq.ECMAVersion = scsi.Inquiry.ECMAVersion;
2019-11-03 01:41:48 +00:00
if(scsi.Inquiry.DeviceTypeModifierSpecified)
inq.DeviceTypeModifier = scsi.Inquiry.DeviceTypeModifier;
2019-11-03 01:41:48 +00:00
if(scsi.Inquiry.ISOVersionSpecified)
inq.ISOVersion = scsi.Inquiry.ISOVersion;
if(scsi.Inquiry.ProductIdentificationSpecified)
{
byte[] tmp = Encoding.ASCII.GetBytes(scsi.Inquiry.ProductIdentification);
inq.ProductIdentification = new byte[tmp.Length + 1];
Array.Copy(tmp, 0, inq.ProductIdentification, 0, tmp.Length);
}
if(scsi.Inquiry.ProductRevisionLevelSpecified)
{
byte[] tmp = Encoding.ASCII.GetBytes(scsi.Inquiry.ProductRevisionLevel);
inq.ProductRevisionLevel = new byte[tmp.Length + 1];
Array.Copy(tmp, 0, inq.ProductRevisionLevel, 0, tmp.Length);
}
2019-11-03 01:41:48 +00:00
if(scsi.Inquiry.ResponseDataFormatSpecified)
inq.ResponseDataFormat = scsi.Inquiry.ResponseDataFormat;
if(scsi.Inquiry.VendorIdentificationSpecified)
{
byte[] tmp = Encoding.ASCII.GetBytes(scsi.Inquiry.VendorIdentification);
inq.VendorIdentification = new byte[tmp.Length + 1];
Array.Copy(tmp, 0, inq.VendorIdentification, 0, tmp.Length);
}
inq.ACC = scsi.Inquiry.AccessControlCoordinator;
inq.ACKREQQ = scsi.Inquiry.ACKRequests;
inq.AERC = scsi.Inquiry.AERCSupported;
inq.Addr16 = scsi.Inquiry.Address16;
inq.Addr32 = scsi.Inquiry.Address32;
inq.TPGS = (byte)scsi.Inquiry.AsymmetricalLUNAccess;
inq.BQue = scsi.Inquiry.BasicQueueing;
inq.EncServ = scsi.Inquiry.EnclosureServices;
inq.HiSup = scsi.Inquiry.HierarchicalLUN;
inq.IUS = scsi.Inquiry.IUS;
inq.Linked = scsi.Inquiry.LinkedCommands;
inq.MChngr = scsi.Inquiry.MediumChanger;
inq.MultiP = scsi.Inquiry.MultiPortDevice;
inq.NormACA = scsi.Inquiry.NormalACA;
inq.PeripheralDeviceType = (byte)scsi.Inquiry.PeripheralDeviceType;
inq.PeripheralQualifier = (byte)scsi.Inquiry.PeripheralQualifier;
inq.Protect = scsi.Inquiry.Protection;
inq.QAS = scsi.Inquiry.QAS;
inq.RelAddr = scsi.Inquiry.RelativeAddressing;
inq.RMB = scsi.Inquiry.Removable;
inq.CmdQue = scsi.Inquiry.TaggedCommandQueue;
inq.TrmTsk = scsi.Inquiry.TerminateTaskSupported;
inq.ThreePC = scsi.Inquiry.ThirdPartyCopy;
inq.TranDis = scsi.Inquiry.TranferDisable;
inq.SftRe = scsi.Inquiry.SoftReset;
inq.Clocking = (byte)scsi.Inquiry.SPIClocking;
inq.SCCS = scsi.Inquiry.StorageArrayController;
inq.Sync = scsi.Inquiry.SyncTransfer;
inq.VersionDescriptors = scsi.Inquiry.VersionDescriptors;
inq.WBus16 = scsi.Inquiry.WideBus16;
inq.WBus32 = scsi.Inquiry.WideBus32;
InquiryData = Decoders.SCSI.Inquiry.Encode(inq);
}
public Inquiry.SCSIInquiry? Inquiry => Decoders.SCSI.Inquiry.Decode(InquiryData);
[JsonIgnore]
public int Id { get; set; }
public byte[] InquiryData { get; set; }
public virtual List<ScsiPage> EVPDPages { get; set; }
public bool SupportsModeSense6 { get; set; }
public bool SupportsModeSense10 { get; set; }
public bool SupportsModeSubpages { get; set; }
public virtual ScsiMode ModeSense { get; set; }
public virtual Mmc MultiMediaDevice { get; set; }
public virtual TestedMedia ReadCapabilities { get; set; }
public virtual List<TestedMedia> RemovableMedias { get; set; }
public virtual Ssc SequentialDevice { get; set; }
public byte[] ModeSense6Data { get; set; }
public byte[] ModeSense10Data { get; set; }
public byte[] ModeSense6CurrentData { get; set; }
public byte[] ModeSense10CurrentData { get; set; }
public byte[] ModeSense6ChangeableData { get; set; }
public byte[] ModeSense10ChangeableData { get; set; }
}
public class ScsiMode
{
public ScsiMode() { }
public ScsiMode(modeType mode)
{
2019-11-03 01:41:48 +00:00
if(mode.MediumTypeSpecified)
MediumType = mode.MediumType;
WriteProtected = mode.WriteProtected;
2019-11-03 01:41:48 +00:00
if(mode.SpeedSpecified)
Speed = mode.Speed;
if(mode.BufferedModeSpecified)
BufferedMode = mode.BufferedMode;
BlankCheckEnabled = mode.BlankCheckEnabled;
DPOandFUA = mode.DPOandFUA;
if(mode.ModePages != null)
{
ModePages = new List<ScsiPage>();
2019-11-03 01:41:48 +00:00
foreach(modePageType modePage in mode.ModePages)
ModePages.Add(new ScsiPage(modePage));
}
2019-11-03 01:41:48 +00:00
if(mode.BlockDescriptors == null)
return;
BlockDescriptors = new List<BlockDescriptor>();
2019-11-03 01:41:48 +00:00
foreach(blockDescriptorType blockDescriptor in mode.BlockDescriptors)
BlockDescriptors.Add(new BlockDescriptor(blockDescriptor));
}
[JsonIgnore]
public int Id { get; set; }
public byte? MediumType { get; set; }
public bool WriteProtected { get; set; }
public virtual List<BlockDescriptor> BlockDescriptors { get; set; }
public byte? Speed { get; set; }
public byte? BufferedMode { get; set; }
public bool BlankCheckEnabled { get; set; }
public bool DPOandFUA { get; set; }
public virtual List<ScsiPage> ModePages { get; set; }
}
public class BlockDescriptor
{
public BlockDescriptor() { }
public BlockDescriptor(blockDescriptorType descriptor)
{
Density = descriptor.Density;
2019-11-03 01:41:48 +00:00
if(descriptor.BlocksSpecified)
Blocks = descriptor.Blocks;
if(descriptor.BlockLengthSpecified)
BlockLength = descriptor.BlockLength;
}
[JsonIgnore]
public int Id { get; set; }
public byte Density { get; set; }
public ulong? Blocks { get; set; }
public uint? BlockLength { get; set; }
}
public class ScsiPage
{
public ScsiPage() { }
public ScsiPage(pageType evpdPage)
{
page = evpdPage.page;
value = evpdPage.value;
}
public ScsiPage(modePageType modePage)
{
page = modePage.page;
subpage = modePage.subpage;
value = modePage.value;
}
[JsonIgnore]
public int Id { get; set; }
public byte page { get; set; }
public byte? subpage { get; set; }
public byte[] value { get; set; }
}
public class Mmc
{
public Mmc() { }
public Mmc(mmcType mmc)
{
if(mmc.ModeSense2A != null)
ModeSense2AData = Modes.EncodeModePage_2A(new Modes.ModePage_2A
{
2019-11-03 01:41:48 +00:00
AccurateCDDA = mmc.ModeSense2A.AccurateCDDA, BCK = mmc.ModeSense2A.BCK,
BufferSize = mmc.ModeSense2A.BufferSize,
BUF = mmc.ModeSense2A.BufferUnderRunProtection,
Eject = mmc.ModeSense2A.CanEject,
Lock = mmc.ModeSense2A.CanLockMedia,
CDDACommand = mmc.ModeSense2A.CDDACommand,
Composite = mmc.ModeSense2A.CompositeAudioVideo,
CMRSupported = (ushort)(mmc.ModeSense2A.CSSandCPPMSupported ? 1 : 0),
CurrentSpeed = mmc.ModeSense2A.CurrentSpeed,
CurrentWriteSpeed = mmc.ModeSense2A.CurrentWriteSpeed,
CurrentWriteSpeedSelected = mmc.ModeSense2A.CurrentWriteSpeedSelected,
SDP = mmc.ModeSense2A.DeterministicSlotChanger,
DigitalPort1 = mmc.ModeSense2A.DigitalPort1,
DigitalPort2 = mmc.ModeSense2A.DigitalPort2,
LeadInPW = mmc.ModeSense2A.LeadInPW,
LoadingMechanism = mmc.ModeSense2A.LoadingMechanismType,
LockState = mmc.ModeSense2A.LockStatus,
LSBF = mmc.ModeSense2A.LSBF,
MaximumSpeed = mmc.ModeSense2A.MaximumSpeed,
MaxWriteSpeed = mmc.ModeSense2A.MaximumWriteSpeed,
AudioPlay = mmc.ModeSense2A.PlaysAudio,
PreventJumper = mmc.ModeSense2A.PreventJumperStatus,
RCK = mmc.ModeSense2A.RCK,
ReadBarcode = mmc.ModeSense2A.ReadsBarcode,
SCC = mmc.ModeSense2A.ReadsBothSides,
ReadCDR = mmc.ModeSense2A.ReadsCDR,
ReadCDRW = mmc.ModeSense2A.ReadsCDRW,
DeinterlaveSubchannel = mmc.ModeSense2A.ReadsDeinterlavedSubchannel,
ReadDVDR = mmc.ModeSense2A.ReadsDVDR,
ReadDVDRAM = mmc.ModeSense2A.ReadsDVDRAM,
ReadDVDROM = mmc.ModeSense2A.ReadsDVDROM,
ISRC = mmc.ModeSense2A.ReadsISRC,
Mode2Form2 = mmc.ModeSense2A.ReadsMode2Form2,
Mode2Form1 = mmc.ModeSense2A.ReadsMode2Form1,
Method2 = mmc.ModeSense2A.ReadsPacketCDR,
Subchannel = mmc.ModeSense2A.ReadsSubchannel,
UPC = mmc.ModeSense2A.ReadsUPC,
C2Pointer = mmc.ModeSense2A.ReturnsC2Pointers,
RotationControlSelected = mmc.ModeSense2A.RotationControlSelected,
SeparateChannelMute = mmc.ModeSense2A.SeparateChannelMute,
SeparateChannelVolume = mmc.ModeSense2A.SeparateChannelVolume, SSS = mmc.ModeSense2A.SSS,
MultiSession = mmc.ModeSense2A.SupportsMultiSession,
SupportedVolumeLevels = mmc.ModeSense2A.SupportedVolumeLevels,
TestWrite = mmc.ModeSense2A.TestWrite,
WriteCDR = mmc.ModeSense2A.WritesCDR,
WriteCDRW = mmc.ModeSense2A.WritesCDRW,
WriteDVDR = mmc.ModeSense2A.WritesDVDR,
WriteDVDRAM = mmc.ModeSense2A.WritesDVDRAM,
WriteSpeedPerformanceDescriptors = mmc.ModeSense2A.WriteSpeedPerformanceDescriptors
});
2019-11-03 01:41:48 +00:00
if(mmc.Features != null)
Features = new MmcFeatures(mmc.Features);
2019-11-03 01:41:48 +00:00
if(mmc.TestedMedia == null)
return;
TestedMedia = new List<TestedMedia>();
2019-11-03 01:41:48 +00:00
foreach(testedMediaType mediaType in mmc.TestedMedia)
TestedMedia.Add(new TestedMedia(mediaType, false));
}
[JsonIgnore]
public int Id { get; set; }
public virtual Modes.ModePage_2A ModeSense2A => Modes.DecodeModePage_2A(ModeSense2AData);
public virtual MmcFeatures Features { get; set; }
public virtual List<TestedMedia> TestedMedia { get; set; }
public byte[] ModeSense2AData { get; set; }
}
public class MmcFeatures
{
public MmcFeatures() { }
public MmcFeatures(mmcFeaturesType features)
{
2019-11-03 01:41:48 +00:00
if(features.PhysicalInterfaceStandardSpecified &&
!features.PhysicalInterfaceStandardNumberSpecified)
PhysicalInterfaceStandardNumber = (uint?)features.PhysicalInterfaceStandard;
if(features.PhysicalInterfaceStandardNumberSpecified)
PhysicalInterfaceStandardNumber = features.PhysicalInterfaceStandardNumber;
2019-11-03 01:41:48 +00:00
if(features.AACSVersionSpecified)
AACSVersion = features.AACSVersion;
2019-11-03 01:41:48 +00:00
if(features.AGIDsSpecified)
AGIDs = features.AGIDs;
2019-11-03 01:41:48 +00:00
if(features.BindingNonceBlocksSpecified)
BindingNonceBlocks = features.BindingNonceBlocks;
2019-11-03 01:41:48 +00:00
if(features.CPRMVersionSpecified)
CPRMVersion = features.CPRMVersion;
2019-11-03 01:41:48 +00:00
if(features.CSSVersionSpecified)
CSSVersion = features.CSSVersion;
2019-11-03 01:41:48 +00:00
if(features.LoadingMechanismTypeSpecified)
LoadingMechanismType = features.LoadingMechanismType;
2019-11-03 01:41:48 +00:00
if(features.LogicalBlockSizeSpecified)
LogicalBlockSize = features.LogicalBlockSize;
2019-11-03 01:41:48 +00:00
if(features.BlocksPerReadableUnitSpecified)
BlocksPerReadableUnit = features.BlocksPerReadableUnit;
2019-11-03 01:41:48 +00:00
if(features.FirmwareDateSpecified)
FirmwareDate = features.FirmwareDate;
2019-11-03 01:41:48 +00:00
if(features.VolumeLevelsSpecified)
VolumeLevels = features.VolumeLevels;
BufferUnderrunFreeInDVD = features.BufferUnderrunFreeInDVD;
BufferUnderrunFreeInSAO = features.BufferUnderrunFreeInSAO;
BufferUnderrunFreeInTAO = features.BufferUnderrunFreeInTAO;
CanAudioScan = features.CanAudioScan;
CanEject = features.CanEject;
CanEraseSector = features.CanEraseSector;
CanExpandBDRESpareArea = features.CanExpandBDRESpareArea;
CanFormat = features.CanFormat;
CanFormatBDREWithoutSpare = features.CanFormatBDREWithoutSpare;
CanFormatCert = features.CanFormatCert;
CanFormatFRF = features.CanFormatFRF;
CanFormatQCert = features.CanFormatQCert;
CanFormatRRM = features.CanFormatRRM;
CanGenerateBindingNonce = features.CanGenerateBindingNonce;
CanLoad = features.CanLoad;
CanMuteSeparateChannels = features.CanMuteSeparateChannels;
CanOverwriteSAOTrack = features.CanOverwriteSAOTrack;
CanOverwriteTAOTrack = features.CanOverwriteTAOTrack;
CanPlayCDAudio = features.CanPlayCDAudio;
CanPseudoOverwriteBDR = features.CanPseudoOverwriteBDR;
CanReadAllDualR = features.CanReadAllDualR;
CanReadAllDualRW = features.CanReadAllDualRW;
CanReadBD = features.CanReadBD;
CanReadBDR = features.CanReadBDR;
CanReadBDRE1 = features.CanReadBDRE1;
CanReadBDRE2 = features.CanReadBDRE2;
CanReadBDROM = features.CanReadBDROM;
CanReadBluBCA = features.CanReadBluBCA;
CanReadCD = features.CanReadCD;
CanReadCDMRW = features.CanReadCDMRW;
CanReadCPRM_MKB = features.CanReadCPRM_MKB;
CanReadDDCD = features.CanReadDDCD;
CanReadDVD = features.CanReadDVD;
CanReadDVDPlusMRW = features.CanReadDVDPlusMRW;
CanReadDVDPlusR = features.CanReadDVDPlusR;
CanReadDVDPlusRDL = features.CanReadDVDPlusRDL;
CanReadDVDPlusRW = features.CanReadDVDPlusRW;
CanReadDVDPlusRWDL = features.CanReadDVDPlusRWDL;
CanReadDriveAACSCertificate = features.CanReadDriveAACSCertificate;
CanReadHDDVD = features.CanReadHDDVD;
CanReadHDDVDR = features.CanReadHDDVDR;
CanReadHDDVDRAM = features.CanReadHDDVDRAM;
CanReadLeadInCDText = features.CanReadLeadInCDText;
CanReadOldBDR = features.CanReadOldBDR;
CanReadOldBDRE = features.CanReadOldBDRE;
CanReadOldBDROM = features.CanReadOldBDROM;
CanReadSpareAreaInformation = features.CanReadSpareAreaInformation;
CanReportDriveSerial = features.CanReportDriveSerial;
CanReportMediaSerial = features.CanReportMediaSerial;
CanTestWriteDDCDR = features.CanTestWriteDDCDR;
CanTestWriteDVD = features.CanTestWriteDVD;
CanTestWriteInSAO = features.CanTestWriteInSAO;
CanTestWriteInTAO = features.CanTestWriteInTAO;
CanUpgradeFirmware = features.CanUpgradeFirmware;
CanWriteBD = features.CanWriteBD;
CanWriteBDR = features.CanWriteBDR;
CanWriteBDRE1 = features.CanWriteBDRE1;
CanWriteBDRE2 = features.CanWriteBDRE2;
CanWriteBusEncryptedBlocks = features.CanWriteBusEncryptedBlocks;
CanWriteCDMRW = features.CanWriteCDMRW;
CanWriteCDRW = features.CanWriteCDRW;
CanWriteCDRWCAV = features.CanWriteCDRWCAV;
CanWriteCDSAO = features.CanWriteCDSAO;
CanWriteCDTAO = features.CanWriteCDTAO;
CanWriteCSSManagedDVD = features.CanWriteCSSManagedDVD;
CanWriteDDCDR = features.CanWriteDDCDR;
CanWriteDDCDRW = features.CanWriteDDCDRW;
CanWriteDVDPlusMRW = features.CanWriteDVDPlusMRW;
CanWriteDVDPlusR = features.CanWriteDVDPlusR;
CanWriteDVDPlusRDL = features.CanWriteDVDPlusRDL;
CanWriteDVDPlusRW = features.CanWriteDVDPlusRW;
CanWriteDVDPlusRWDL = features.CanWriteDVDPlusRWDL;
CanWriteDVDR = features.CanWriteDVDR;
CanWriteDVDRDL = features.CanWriteDVDRDL;
CanWriteDVDRW = features.CanWriteDVDRW;
CanWriteHDDVDR = features.CanWriteHDDVDR;
CanWriteHDDVDRAM = features.CanWriteHDDVDRAM;
CanWriteOldBDR = features.CanWriteOldBDR;
CanWriteOldBDRE = features.CanWriteOldBDRE;
CanWritePackedSubchannelInTAO = features.CanWritePackedSubchannelInTAO;
CanWriteRWSubchannelInSAO = features.CanWriteRWSubchannelInSAO;
CanWriteRWSubchannelInTAO = features.CanWriteRWSubchannelInTAO;
CanWriteRaw = features.CanWriteRaw;
CanWriteRawMultiSession = features.CanWriteRawMultiSession;
CanWriteRawSubchannelInTAO = features.CanWriteRawSubchannelInTAO;
ChangerIsSideChangeCapable = features.ChangerIsSideChangeCapable;
ChangerSlots = features.ChangerSlots;
ChangerSupportsDiscPresent = features.ChangerSupportsDiscPresent;
DBML = features.DBML;
DVDMultiRead = features.DVDMultiRead;
EmbeddedChanger = features.EmbeddedChanger;
ErrorRecoveryPage = features.ErrorRecoveryPage;
Locked = features.Locked;
MultiRead = features.MultiRead;
PreventJumper = features.PreventJumper;
SupportsAACS = features.SupportsAACS;
SupportsBusEncryption = features.SupportsBusEncryption;
SupportsC2 = features.SupportsC2;
SupportsCPRM = features.SupportsCPRM;
SupportsCSS = features.SupportsCSS;
SupportsDAP = features.SupportsDAP;
SupportsDeviceBusyEvent = features.SupportsDeviceBusyEvent;
SupportsHybridDiscs = features.SupportsHybridDiscs;
SupportsModePage1Ch = features.SupportsModePage1Ch;
SupportsOSSC = features.SupportsOSSC;
SupportsPWP = features.SupportsPWP;
SupportsSWPP = features.SupportsSWPP;
SupportsSecurDisc = features.SupportsSecurDisc;
SupportsSeparateVolume = features.SupportsSeparateVolume;
SupportsVCPS = features.SupportsVCPS;
SupportsWriteInhibitDCB = features.SupportsWriteInhibitDCB;
SupportsWriteProtectPAC = features.SupportsWriteProtectPAC;
}
[JsonIgnore]
public int Id { get; set; }
public byte? AACSVersion { get; set; }
public byte? AGIDs { get; set; }
public byte? BindingNonceBlocks { get; set; }
public ushort? BlocksPerReadableUnit { get; set; }
public bool BufferUnderrunFreeInDVD { get; set; }
public bool BufferUnderrunFreeInSAO { get; set; }
public bool BufferUnderrunFreeInTAO { get; set; }
public bool CanAudioScan { get; set; }
public bool CanEject { get; set; }
public bool CanEraseSector { get; set; }
public bool CanExpandBDRESpareArea { get; set; }
public bool CanFormat { get; set; }
public bool CanFormatBDREWithoutSpare { get; set; }
public bool CanFormatCert { get; set; }
public bool CanFormatFRF { get; set; }
public bool CanFormatQCert { get; set; }
public bool CanFormatRRM { get; set; }
public bool CanGenerateBindingNonce { get; set; }
public bool CanLoad { get; set; }
public bool CanMuteSeparateChannels { get; set; }
public bool CanOverwriteSAOTrack { get; set; }
public bool CanOverwriteTAOTrack { get; set; }
public bool CanPlayCDAudio { get; set; }
public bool CanPseudoOverwriteBDR { get; set; }
public bool CanReadAllDualR { get; set; }
public bool CanReadAllDualRW { get; set; }
public bool CanReadBD { get; set; }
public bool CanReadBDR { get; set; }
public bool CanReadBDRE1 { get; set; }
public bool CanReadBDRE2 { get; set; }
public bool CanReadBDROM { get; set; }
public bool CanReadBluBCA { get; set; }
public bool CanReadCD { get; set; }
public bool CanReadCDMRW { get; set; }
public bool CanReadCPRM_MKB { get; set; }
public bool CanReadDDCD { get; set; }
public bool CanReadDVD { get; set; }
public bool CanReadDVDPlusMRW { get; set; }
public bool CanReadDVDPlusR { get; set; }
public bool CanReadDVDPlusRDL { get; set; }
public bool CanReadDVDPlusRW { get; set; }
public bool CanReadDVDPlusRWDL { get; set; }
public bool CanReadDriveAACSCertificate { get; set; }
public bool CanReadHDDVD { get; set; }
public bool CanReadHDDVDR { get; set; }
public bool CanReadHDDVDRAM { get; set; }
public bool CanReadLeadInCDText { get; set; }
public bool CanReadOldBDR { get; set; }
public bool CanReadOldBDRE { get; set; }
public bool CanReadOldBDROM { get; set; }
public bool CanReadSpareAreaInformation { get; set; }
public bool CanReportDriveSerial { get; set; }
public bool CanReportMediaSerial { get; set; }
public bool CanTestWriteDDCDR { get; set; }
public bool CanTestWriteDVD { get; set; }
public bool CanTestWriteInSAO { get; set; }
public bool CanTestWriteInTAO { get; set; }
public bool CanUpgradeFirmware { get; set; }
public bool CanWriteBD { get; set; }
public bool CanWriteBDR { get; set; }
public bool CanWriteBDRE1 { get; set; }
public bool CanWriteBDRE2 { get; set; }
public bool CanWriteBusEncryptedBlocks { get; set; }
public bool CanWriteCDMRW { get; set; }
public bool CanWriteCDRW { get; set; }
public bool CanWriteCDRWCAV { get; set; }
public bool CanWriteCDSAO { get; set; }
public bool CanWriteCDTAO { get; set; }
public bool CanWriteCSSManagedDVD { get; set; }
public bool CanWriteDDCDR { get; set; }
public bool CanWriteDDCDRW { get; set; }
public bool CanWriteDVDPlusMRW { get; set; }
public bool CanWriteDVDPlusR { get; set; }
public bool CanWriteDVDPlusRDL { get; set; }
public bool CanWriteDVDPlusRW { get; set; }
public bool CanWriteDVDPlusRWDL { get; set; }
public bool CanWriteDVDR { get; set; }
public bool CanWriteDVDRDL { get; set; }
public bool CanWriteDVDRW { get; set; }
public bool CanWriteHDDVDR { get; set; }
public bool CanWriteHDDVDRAM { get; set; }
public bool CanWriteOldBDR { get; set; }
public bool CanWriteOldBDRE { get; set; }
public bool CanWritePackedSubchannelInTAO { get; set; }
public bool CanWriteRWSubchannelInSAO { get; set; }
public bool CanWriteRWSubchannelInTAO { get; set; }
public bool CanWriteRaw { get; set; }
public bool CanWriteRawMultiSession { get; set; }
public bool CanWriteRawSubchannelInTAO { get; set; }
public bool ChangerIsSideChangeCapable { get; set; }
public byte ChangerSlots { get; set; }
public bool ChangerSupportsDiscPresent { get; set; }
public byte? CPRMVersion { get; set; }
public byte? CSSVersion { get; set; }
public bool DBML { get; set; }
public bool DVDMultiRead { get; set; }
public bool EmbeddedChanger { get; set; }
public bool ErrorRecoveryPage { get; set; }
public DateTime? FirmwareDate { get; set; }
public byte? LoadingMechanismType { get; set; }
public bool Locked { get; set; }
public uint? LogicalBlockSize { get; set; }
public bool MultiRead { get; set; }
public PhysicalInterfaces? PhysicalInterfaceStandard =>
(PhysicalInterfaces?)PhysicalInterfaceStandardNumber;
public uint? PhysicalInterfaceStandardNumber { get; set; }
public bool PreventJumper { get; set; }
public bool SupportsAACS { get; set; }
public bool SupportsBusEncryption { get; set; }
public bool SupportsC2 { get; set; }
public bool SupportsCPRM { get; set; }
public bool SupportsCSS { get; set; }
public bool SupportsDAP { get; set; }
public bool SupportsDeviceBusyEvent { get; set; }
public bool SupportsHybridDiscs { get; set; }
public bool SupportsModePage1Ch { get; set; }
public bool SupportsOSSC { get; set; }
public bool SupportsPWP { get; set; }
public bool SupportsSWPP { get; set; }
public bool SupportsSecurDisc { get; set; }
public bool SupportsSeparateVolume { get; set; }
public bool SupportsVCPS { get; set; }
public bool SupportsWriteInhibitDCB { get; set; }
public bool SupportsWriteProtectPAC { get; set; }
public ushort? VolumeLevels { get; set; }
public byte[] BinaryData { get; set; }
}
public class TestedMedia
{
public Identify.IdentifyDevice? IdentifyDevice;
public TestedMedia() { }
public TestedMedia(testedMediaType mediaType, bool ata)
{
2019-11-03 01:41:48 +00:00
if(mediaType.BlocksSpecified)
Blocks = mediaType.Blocks;
2019-11-03 01:41:48 +00:00
if(mediaType.BlockSizeSpecified)
BlockSize = mediaType.BlockSize;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadAACSSpecified)
CanReadAACS = mediaType.CanReadAACS;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadADIPSpecified)
CanReadADIP = mediaType.CanReadADIP;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadATIPSpecified)
CanReadATIP = mediaType.CanReadATIP;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadBCASpecified)
CanReadBCA = mediaType.CanReadBCA;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadC2PointersSpecified)
CanReadC2Pointers = mediaType.CanReadC2Pointers;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadCMISpecified)
CanReadCMI = mediaType.CanReadCMI;
if(mediaType.CanReadCorrectedSubchannelSpecified)
CanReadCorrectedSubchannel = mediaType.CanReadCorrectedSubchannel;
if(mediaType.CanReadCorrectedSubchannelWithC2Specified)
CanReadCorrectedSubchannelWithC2 = mediaType.CanReadCorrectedSubchannelWithC2;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadDCBSpecified)
CanReadDCB = mediaType.CanReadDCB;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadDDSSpecified)
CanReadDDS = mediaType.CanReadDDS;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadDMISpecified)
CanReadDMI = mediaType.CanReadDMI;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadDiscInformationSpecified)
CanReadDiscInformation = mediaType.CanReadDiscInformation;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadFullTOCSpecified)
CanReadFullTOC = mediaType.CanReadFullTOC;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadHDCMISpecified)
CanReadHDCMI = mediaType.CanReadHDCMI;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadLayerCapacitySpecified)
CanReadLayerCapacity = mediaType.CanReadLayerCapacity;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadLeadInSpecified)
CanReadFirstTrackPreGap = mediaType.CanReadLeadIn;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadLeadOutSpecified)
CanReadLeadOut = mediaType.CanReadLeadOut;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadMediaIDSpecified)
CanReadMediaID = mediaType.CanReadMediaID;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadMediaSerialSpecified)
CanReadMediaSerial = mediaType.CanReadMediaSerial;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadPACSpecified)
CanReadPAC = mediaType.CanReadPAC;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadPFISpecified)
CanReadPFI = mediaType.CanReadPFI;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadPMASpecified)
CanReadPMA = mediaType.CanReadPMA;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadPQSubchannelSpecified)
CanReadPQSubchannel = mediaType.CanReadPQSubchannel;
if(mediaType.CanReadPQSubchannelWithC2Specified)
CanReadPQSubchannelWithC2 = mediaType.CanReadPQSubchannelWithC2;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadPRISpecified)
CanReadPRI = mediaType.CanReadPRI;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadRWSubchannelSpecified)
CanReadRWSubchannel = mediaType.CanReadRWSubchannel;
if(mediaType.CanReadRWSubchannelWithC2Specified)
CanReadRWSubchannelWithC2 = mediaType.CanReadRWSubchannelWithC2;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadRecordablePFISpecified)
CanReadRecordablePFI = mediaType.CanReadRecordablePFI;
if(mediaType.CanReadSpareAreaInformationSpecified)
CanReadSpareAreaInformation = mediaType.CanReadSpareAreaInformation;
2019-11-03 01:41:48 +00:00
if(mediaType.CanReadTOCSpecified)
CanReadTOC = mediaType.CanReadTOC;
2019-11-03 01:41:48 +00:00
if(mediaType.DensitySpecified)
Density = mediaType.Density;
2019-11-03 01:41:48 +00:00
if(mediaType.LongBlockSizeSpecified)
LongBlockSize = mediaType.LongBlockSize;
2019-11-03 01:41:48 +00:00
if(mediaType.ManufacturerSpecified)
Manufacturer = mediaType.Manufacturer;
2019-11-03 01:41:48 +00:00
if(mediaType.MediumTypeSpecified)
MediumType = mediaType.MediumType;
2019-11-03 01:41:48 +00:00
if(mediaType.ModelSpecified)
Model = mediaType.Model;
if(mediaType.SupportsHLDTSTReadRawDVDSpecified)
SupportsHLDTSTReadRawDVD = mediaType.SupportsHLDTSTReadRawDVD;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsNECReadCDDASpecified)
SupportsNECReadCDDA = mediaType.SupportsNECReadCDDA;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsPioneerReadCDDASpecified)
SupportsPioneerReadCDDA = mediaType.SupportsPioneerReadCDDA;
if(mediaType.SupportsPioneerReadCDDAMSFSpecified)
SupportsPioneerReadCDDAMSF = mediaType.SupportsPioneerReadCDDAMSF;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsPlextorReadCDDASpecified)
SupportsPlextorReadCDDA = mediaType.SupportsPlextorReadCDDA;
if(mediaType.SupportsPlextorReadRawDVDSpecified)
SupportsPlextorReadRawDVD = mediaType.SupportsPlextorReadRawDVD;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsRead10Specified)
SupportsRead10 = mediaType.SupportsRead10;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsRead12Specified)
SupportsRead12 = mediaType.SupportsRead12;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsRead16Specified)
SupportsRead16 = mediaType.SupportsRead16;
if(mediaType.SupportsReadSpecified)
{
2019-11-03 01:41:48 +00:00
if(ata)
SupportsReadSectors = mediaType.SupportsRead;
else
SupportsRead6 = mediaType.SupportsRead;
}
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadCapacity16Specified)
SupportsReadCapacity16 = mediaType.SupportsReadCapacity16;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadCapacitySpecified)
SupportsReadCapacity = mediaType.SupportsReadCapacity;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadCdSpecified)
SupportsReadCd = mediaType.SupportsReadCd;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadCdMsfSpecified)
SupportsReadCdMsf = mediaType.SupportsReadCdMsf;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadCdRawSpecified)
SupportsReadCdRaw = mediaType.SupportsReadCdRaw;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadCdMsfRawSpecified)
SupportsReadCdMsfRaw = mediaType.SupportsReadCdMsfRaw;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadLong16Specified)
SupportsReadLong16 = mediaType.SupportsReadLong16;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadLongSpecified)
SupportsReadLong = mediaType.SupportsReadLong;
2019-11-03 01:41:48 +00:00
if(mediaType.LBASectorsSpecified)
LBASectors = mediaType.LBASectors;
2019-11-03 01:41:48 +00:00
if(mediaType.LBA48SectorsSpecified)
LBA48Sectors = mediaType.LBA48Sectors;
2019-11-03 01:41:48 +00:00
if(mediaType.LogicalAlignmentSpecified)
LogicalAlignment = mediaType.LogicalAlignment;
2019-11-03 01:41:48 +00:00
if(mediaType.NominalRotationRateSpecified)
NominalRotationRate = mediaType.NominalRotationRate;
2019-11-03 01:41:48 +00:00
if(mediaType.PhysicalBlockSizeSpecified)
PhysicalBlockSize = mediaType.PhysicalBlockSize;
2019-11-03 01:41:48 +00:00
if(mediaType.SolidStateDeviceSpecified)
SolidStateDevice = mediaType.SolidStateDevice;
2019-11-03 01:41:48 +00:00
if(mediaType.UnformattedBPTSpecified)
UnformattedBPT = mediaType.UnformattedBPT;
2019-11-03 01:41:48 +00:00
if(mediaType.UnformattedBPSSpecified)
UnformattedBPS = mediaType.UnformattedBPS;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadDmaLbaSpecified)
SupportsReadDmaLba = mediaType.SupportsReadDmaLba;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadDmaRetryLbaSpecified)
SupportsReadDmaRetryLba = mediaType.SupportsReadDmaRetryLba;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadLbaSpecified)
SupportsReadLba = mediaType.SupportsReadLba;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadRetryLbaSpecified)
SupportsReadRetryLba = mediaType.SupportsReadRetryLba;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadLongLbaSpecified)
SupportsReadLongLba = mediaType.SupportsReadLongLba;
if(mediaType.SupportsReadLongRetryLbaSpecified)
SupportsReadLongRetryLba = mediaType.SupportsReadLongRetryLba;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsSeekLbaSpecified)
SupportsSeekLba = mediaType.SupportsSeekLba;
if(mediaType.SupportsReadDmaLba48Specified)
SupportsReadDmaLba48 = mediaType.SupportsReadDmaLba48;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadLba48Specified)
SupportsReadLba48 = mediaType.SupportsReadLba48;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadDmaSpecified)
SupportsReadDma = mediaType.SupportsReadDma;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadDmaRetrySpecified)
SupportsReadDmaRetry = mediaType.SupportsReadDmaRetry;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadRetrySpecified)
SupportsReadRetry = mediaType.SupportsReadRetry;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsReadLongRetrySpecified)
SupportsReadLongRetry = mediaType.SupportsReadLongRetry;
2019-11-03 01:41:48 +00:00
if(mediaType.SupportsSeekSpecified)
SupportsSeek = mediaType.SupportsSeek;
2019-11-03 01:41:48 +00:00
if(mediaType.CHS != null)
CHS = new Chs(mediaType.CHS);
2019-11-03 01:41:48 +00:00
if(mediaType.CurrentCHS != null)
CurrentCHS = new Chs(mediaType.CurrentCHS);
MediaIsRecognized = mediaType.MediaIsRecognized;
MediumTypeName = mediaType.MediumTypeName;
ModeSense6Data = mediaType.ModeSense6Data;
ModeSense10Data = mediaType.ModeSense10Data;
}
[JsonIgnore]
public int Id { get; set; }
public byte[] IdentifyData { get; set; }
public ulong? Blocks { get; set; }
public uint? BlockSize { get; set; }
public bool? CanReadAACS { get; set; }
public bool? CanReadADIP { get; set; }
public bool? CanReadATIP { get; set; }
public bool? CanReadBCA { get; set; }
public bool? CanReadC2Pointers { get; set; }
public bool? CanReadCMI { get; set; }
public bool? CanReadCorrectedSubchannel { get; set; }
public bool? CanReadCorrectedSubchannelWithC2 { get; set; }
public bool? CanReadDCB { get; set; }
public bool? CanReadDDS { get; set; }
public bool? CanReadDMI { get; set; }
public bool? CanReadDiscInformation { get; set; }
public bool? CanReadFullTOC { get; set; }
public bool? CanReadHDCMI { get; set; }
public bool? CanReadLayerCapacity { get; set; }
public bool? CanReadFirstTrackPreGap { get; set; }
public bool? CanReadLeadIn { get; set; }
public bool? CanReadLeadOut { get; set; }
public bool? CanReadMediaID { get; set; }
public bool? CanReadMediaSerial { get; set; }
public bool? CanReadPAC { get; set; }
public bool? CanReadPFI { get; set; }
public bool? CanReadPMA { get; set; }
public bool? CanReadPQSubchannel { get; set; }
public bool? CanReadPQSubchannelWithC2 { get; set; }
public bool? CanReadPRI { get; set; }
public bool? CanReadRWSubchannel { get; set; }
public bool? CanReadRWSubchannelWithC2 { get; set; }
public bool? CanReadRecordablePFI { get; set; }
public bool? CanReadSpareAreaInformation { get; set; }
public bool? CanReadTOC { get; set; }
public byte? Density { get; set; }
public uint? LongBlockSize { get; set; }
public string Manufacturer { get; set; }
public bool MediaIsRecognized { get; set; }
public byte? MediumType { get; set; }
public string MediumTypeName { get; set; }
public string Model { get; set; }
public bool? SupportsHLDTSTReadRawDVD { get; set; }
public bool? SupportsNECReadCDDA { get; set; }
public bool? SupportsPioneerReadCDDA { get; set; }
public bool? SupportsPioneerReadCDDAMSF { get; set; }
public bool? SupportsPlextorReadCDDA { get; set; }
public bool? SupportsPlextorReadRawDVD { get; set; }
public bool? SupportsRead10 { get; set; }
public bool? SupportsRead12 { get; set; }
public bool? SupportsRead16 { get; set; }
public bool? SupportsRead6 { get; set; }
public bool? SupportsReadCapacity16 { get; set; }
public bool? SupportsReadCapacity { get; set; }
public bool? SupportsReadCd { get; set; }
public bool? SupportsReadCdMsf { get; set; }
public bool? SupportsReadCdRaw { get; set; }
public bool? SupportsReadCdMsfRaw { get; set; }
public bool? SupportsReadLong16 { get; set; }
public bool? SupportsReadLong { get; set; }
public byte[] ModeSense6Data { get; set; }
public byte[] ModeSense10Data { get; set; }
public virtual Chs CHS { get; set; }
public virtual Chs CurrentCHS { get; set; }
public uint? LBASectors { get; set; }
public ulong? LBA48Sectors { get; set; }
public ushort? LogicalAlignment { get; set; }
public ushort? NominalRotationRate { get; set; }
public uint? PhysicalBlockSize { get; set; }
public bool? SolidStateDevice { get; set; }
public ushort? UnformattedBPT { get; set; }
public ushort? UnformattedBPS { get; set; }
public bool? SupportsReadDmaLba { get; set; }
public bool? SupportsReadDmaRetryLba { get; set; }
public bool? SupportsReadLba { get; set; }
public bool? SupportsReadRetryLba { get; set; }
public bool? SupportsReadLongLba { get; set; }
public bool? SupportsReadLongRetryLba { get; set; }
public bool? SupportsSeekLba { get; set; }
public bool? SupportsReadDmaLba48 { get; set; }
public bool? SupportsReadLba48 { get; set; }
public bool? SupportsReadDma { get; set; }
public bool? SupportsReadDmaRetry { get; set; }
public bool? SupportsReadRetry { get; set; }
public bool? SupportsReadSectors { get; set; }
public bool? SupportsReadLongRetry { get; set; }
public bool? SupportsSeek { get; set; }
public bool? CanReadingIntersessionLeadIn { get; set; }
public bool? CanReadingIntersessionLeadOut { get; set; }
public byte[] IntersessionLeadInData { get; set; }
public byte[] IntersessionLeadOutData { get; set; }
2019-11-10 00:00:36 +00:00
[JsonIgnore]
public int AtaId { get; set; }
#region SCSI data
public byte[] Read6Data { get; set; }
public byte[] Read10Data { get; set; }
public byte[] Read12Data { get; set; }
public byte[] Read16Data { get; set; }
public byte[] ReadLong10Data { get; set; }
public byte[] ReadLong16Data { get; set; }
#endregion
#region ATA data
public byte[] ReadSectorsData { get; set; }
public byte[] ReadSectorsRetryData { get; set; }
public byte[] ReadDmaData { get; set; }
public byte[] ReadDmaRetryData { get; set; }
public byte[] ReadLbaData { get; set; }
public byte[] ReadRetryLbaData { get; set; }
public byte[] ReadDmaLbaData { get; set; }
public byte[] ReadDmaRetryLbaData { get; set; }
public byte[] ReadLba48Data { get; set; }
public byte[] ReadDmaLba48Data { get; set; }
public byte[] ReadLongData { get; set; }
public byte[] ReadLongRetryData { get; set; }
public byte[] ReadLongLbaData { get; set; }
public byte[] ReadLongRetryLbaData { get; set; }
#endregion
#region CompactDisc data
public byte[] TocData { get; set; }
public byte[] FullTocData { get; set; }
public byte[] AtipData { get; set; }
public byte[] PmaData { get; set; }
public byte[] ReadCdData { get; set; }
public byte[] ReadCdMsfData { get; set; }
public byte[] ReadCdFullData { get; set; }
public byte[] ReadCdMsfFullData { get; set; }
public byte[] Track1PregapData { get; set; }
public byte[] LeadInData { get; set; }
public byte[] LeadOutData { get; set; }
public byte[] C2PointersData { get; set; }
public byte[] PQSubchannelData { get; set; }
public byte[] RWSubchannelData { get; set; }
public byte[] CorrectedSubchannelData { get; set; }
public byte[] PQSubchannelWithC2Data { get; set; }
public byte[] RWSubchannelWithC2Data { get; set; }
public byte[] CorrectedSubchannelWithC2Data { get; set; }
#endregion
#region DVD data
public byte[] PfiData { get; set; }
public byte[] DmiData { get; set; }
public byte[] CmiData { get; set; }
public byte[] DvdBcaData { get; set; }
public byte[] DvdAacsData { get; set; }
public byte[] DvdDdsData { get; set; }
public byte[] DvdSaiData { get; set; }
public byte[] PriData { get; set; }
public byte[] EmbossedPfiData { get; set; }
public byte[] AdipData { get; set; }
public byte[] DcbData { get; set; }
public byte[] HdCmiData { get; set; }
public byte[] DvdLayerData { get; set; }
#endregion
#region Blu-ray data
public byte[] BluBcaData { get; set; }
public byte[] BluDdsData { get; set; }
public byte[] BluSaiData { get; set; }
public byte[] BluDiData { get; set; }
public byte[] BluPacData { get; set; }
#endregion
#region Vendor data
public byte[] PlextorReadCddaData { get; set; }
public byte[] PioneerReadCddaData { get; set; }
public byte[] PioneerReadCddaMsfData { get; set; }
public byte[] NecReadCddaData { get; set; }
public byte[] PlextorReadRawDVDData { get; set; }
public byte[] HLDTSTReadRawDVDData { get; set; }
#endregion
}
public class Ssc
{
public Ssc() { }
public Ssc(sscType ssc)
{
2019-11-03 01:41:48 +00:00
if(ssc.BlockSizeGranularitySpecified)
BlockSizeGranularity = ssc.BlockSizeGranularity;
if(ssc.MaxBlockLengthSpecified)
MaxBlockLength = ssc.MaxBlockLength;
if(ssc.MinBlockLengthSpecified)
MinBlockLength = ssc.MinBlockLength;
2019-11-03 01:41:48 +00:00
if(ssc.SupportedDensities != null)
SupportedDensities = new List<SupportedDensity>(ssc.SupportedDensities);
if(ssc.SupportedMediaTypes != null)
{
SupportedMediaTypes = new List<SscSupportedMedia>();
2019-11-03 01:41:48 +00:00
foreach(SupportedMedia mediaType in ssc.SupportedMediaTypes)
SupportedMediaTypes.Add(new SscSupportedMedia(mediaType));
}
2019-11-03 01:41:48 +00:00
if(ssc.TestedMedia == null)
return;
TestedMedia = new List<TestedSequentialMedia>();
2019-11-03 01:41:48 +00:00
foreach(SequentialMedia testedMedia in ssc.TestedMedia)
TestedMedia.Add(new TestedSequentialMedia(testedMedia));
}
[JsonIgnore]
public int Id { get; set; }
public byte? BlockSizeGranularity { get; set; }
public uint? MaxBlockLength { get; set; }
public uint? MinBlockLength { get; set; }
public virtual List<SupportedDensity> SupportedDensities { get; set; }
public virtual List<SscSupportedMedia> SupportedMediaTypes { get; set; }
public virtual List<TestedSequentialMedia> TestedMedia { get; set; }
}
public class TestedSequentialMedia
{
public TestedSequentialMedia() { }
public TestedSequentialMedia(SequentialMedia media)
{
2019-11-03 01:41:48 +00:00
if(media.CanReadMediaSerialSpecified)
CanReadMediaSerial = media.CanReadMediaSerial;
if(media.DensitySpecified)
Density = media.Density;
Manufacturer = media.Manufacturer;
MediaIsRecognized = media.MediaIsRecognized;
2019-11-03 01:41:48 +00:00
if(media.MediumTypeSpecified)
MediumType = media.MediumType;
MediumTypeName = media.MediumTypeName;
Model = media.Model;
2019-11-03 01:41:48 +00:00
if(media.SupportedDensities != null)
SupportedDensities = new List<SupportedDensity>(media.SupportedDensities);
if(media.SupportedMediaTypes != null)
{
SupportedMediaTypes = new List<SscSupportedMedia>();
2019-11-03 01:41:48 +00:00
foreach(SupportedMedia supportedMedia in media.SupportedMediaTypes)
SupportedMediaTypes.Add(new SscSupportedMedia(supportedMedia));
}
ModeSense6Data = media.ModeSense6Data;
ModeSense10Data = media.ModeSense10Data;
}
[JsonIgnore]
public int Id { get; set; }
public bool? CanReadMediaSerial { get; set; }
public byte? Density { get; set; }
public string Manufacturer { get; set; }
public bool MediaIsRecognized { get; set; }
public byte? MediumType { get; set; }
public string MediumTypeName { get; set; }
public string Model { get; set; }
public virtual List<SupportedDensity> SupportedDensities { get; set; }
public virtual List<SscSupportedMedia> SupportedMediaTypes { get; set; }
public byte[] ModeSense6Data { get; set; }
public byte[] ModeSense10Data { get; set; }
}
public class Pcmcia
{
public string[] AdditionalInformation;
public Pcmcia() { }
public Pcmcia(pcmciaType pcmcia)
{
AdditionalInformation = pcmcia.AdditionalInformation;
CIS = pcmcia.CIS;
Compliance = pcmcia.Compliance;
2019-11-03 01:41:48 +00:00
if(pcmcia.ManufacturerCodeSpecified)
ManufacturerCode = pcmcia.ManufacturerCode;
if(pcmcia.CardCodeSpecified)
CardCode = pcmcia.CardCode;
Manufacturer = pcmcia.Manufacturer;
ProductName = pcmcia.ProductName;
}
[JsonIgnore]
public int Id { get; set; }
public byte[] CIS { get; set; }
public string Compliance { get; set; }
public ushort? ManufacturerCode { get; set; }
public ushort? CardCode { get; set; }
public string Manufacturer { get; set; }
public string ProductName { get; set; }
}
public class MmcSd
{
public MmcSd() { }
public MmcSd(mmcsdType mmcSd)
{
CID = mmcSd.CID;
CSD = mmcSd.CSD;
OCR = mmcSd.OCR;
SCR = mmcSd.SCR;
ExtendedCSD = mmcSd.ExtendedCSD;
}
[JsonIgnore]
public int Id { get; set; }
public byte[] CID { get; set; }
public byte[] CSD { get; set; }
public byte[] OCR { get; set; }
public byte[] SCR { get; set; }
public byte[] ExtendedCSD { get; set; }
}
public class SscSupportedMedia
{
public SscSupportedMedia() { }
public SscSupportedMedia(SupportedMedia media)
{
MediumType = media.MediumType;
Width = media.Width;
Length = media.Length;
Organization = media.Organization;
Name = media.Name;
Description = media.Description;
2019-11-03 01:41:48 +00:00
if(media.DensityCodes == null)
return;
DensityCodes = new List<DensityCode>();
2019-11-03 01:41:48 +00:00
foreach(int densityCode in media.DensityCodes)
DensityCodes.Add(new DensityCode
{
Code = densityCode
});
}
[JsonIgnore]
public int Id { get; set; }
public byte MediumType { get; set; }
public virtual List<DensityCode> DensityCodes { get; set; }
public ushort Width { get; set; }
public ushort Length { get; set; }
public string Organization { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class DensityCode : IEquatable<DensityCode>
{
2019-11-03 01:41:48 +00:00
[JsonIgnore, Key]
public int Id { get; set; }
public int Code { get; set; }
public bool Equals(DensityCode other)
{
2019-11-03 01:41:48 +00:00
if(ReferenceEquals(null, other))
return false;
if(ReferenceEquals(this, other))
return true;
return Code == other.Code;
}
public override bool Equals(object obj)
{
2019-11-03 01:41:48 +00:00
if(ReferenceEquals(null, obj))
return false;
if(ReferenceEquals(this, obj))
return true;
return obj.GetType() == GetType() && Equals((DensityCode)obj);
}
public override int GetHashCode() => Code;
}
}