diff --git a/.idea/.idea.DiscImageChef/.idea/contentModel.xml b/.idea/.idea.DiscImageChef/.idea/contentModel.xml index d45587eef..468f29018 100644 --- a/.idea/.idea.DiscImageChef/.idea/contentModel.xml +++ b/.idea/.idea.DiscImageChef/.idea/contentModel.xml @@ -336,6 +336,8 @@ + + @@ -1864,6 +1866,9 @@ + + + diff --git a/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs b/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs index a26133133..ed517cc80 100644 --- a/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs +++ b/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs @@ -562,19 +562,23 @@ namespace DiscImageChef.CommonTypes.Metadata public Inquiry.SCSIInquiry? Inquiry => Decoders.SCSI.Inquiry.Decode(InquiryData); [JsonIgnore] - public int Id { get; set; } - public byte[] InquiryData { get; set; } - public virtual List 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 RemovableMedias { get; set; } - public virtual Ssc SequentialDevice { get; set; } - public byte[] ModeSense6Data { get; set; } - public byte[] ModeSense10Data { get; set; } + public int Id { get; set; } + public byte[] InquiryData { get; set; } + public virtual List 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 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 diff --git a/DiscImageChef.Core/Devices/Report/Scsi.cs b/DiscImageChef.Core/Devices/Report/Scsi.cs index 31d4ad8c6..64614c938 100644 --- a/DiscImageChef.Core/Devices/Report/Scsi.cs +++ b/DiscImageChef.Core/Devices/Report/Scsi.cs @@ -150,6 +150,10 @@ namespace DiscImageChef.Core.Devices.Report { Modes.DecodedMode? decMode = null; PeripheralDeviceTypes devType = dev.ScsiType; + byte[] mode10Currentbuffer; + byte[] mode10Changeablebuffer; + byte[] mode6Currentbuffer; + byte[] mode6Changeablebuffer; DicConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (10)..."); bool sense = dev.ModeSense10(out byte[] mode10Buffer, out _, false, true, ScsiModeSensePageControl.Default, @@ -164,6 +168,15 @@ namespace DiscImageChef.Core.Devices.Report report.SCSI.SupportsModeSense10 = true; report.SCSI.SupportsModeSubpages = false; decMode = Modes.DecodeMode10(mode10Buffer, devType); + if(debug) + { + sense = dev.ModeSense10(out mode10Currentbuffer, out _, false, true, + ScsiModeSensePageControl.Current, 0x3F, 0x00, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense10CurrentData = mode10Currentbuffer; + sense = dev.ModeSense10(out mode10Changeablebuffer, out _, false, true, + ScsiModeSensePageControl.Changeable, 0x3F, 0x00, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense10ChangeableData = mode10Changeablebuffer; + } } } else @@ -171,6 +184,15 @@ namespace DiscImageChef.Core.Devices.Report report.SCSI.SupportsModeSense10 = true; report.SCSI.SupportsModeSubpages = true; decMode = Modes.DecodeMode10(mode10Buffer, devType); + if(debug) + { + sense = dev.ModeSense10(out mode10Currentbuffer, out _, false, true, + ScsiModeSensePageControl.Current, 0x3F, 0xFF, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense10CurrentData = mode10Currentbuffer; + sense = dev.ModeSense10(out mode10Changeablebuffer, out _, false, true, + ScsiModeSensePageControl.Changeable, 0x3F, 0xFF, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense10ChangeableData = mode10Changeablebuffer; + } } DicConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (6)..."); @@ -186,8 +208,29 @@ namespace DiscImageChef.Core.Devices.Report DicConsole.WriteLine("Querying SCSI MODE SENSE (6)..."); sense = dev.ModeSense(out mode6Buffer, out _, dev.Timeout, out _); } + else if(debug) + { + sense = dev.ModeSense6(out mode6Currentbuffer, out _, false, ScsiModeSensePageControl.Current, 0x3F, + 0x00, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense6CurrentData = mode6Currentbuffer; + sense = dev.ModeSense6(out mode6Changeablebuffer, out _, false, ScsiModeSensePageControl.Changeable, + 0x3F, 0x00, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense6ChangeableData = mode6Changeablebuffer; + } + } + else + { + report.SCSI.SupportsModeSubpages = true; + if(debug) + { + sense = dev.ModeSense6(out mode6Currentbuffer, out _, false, ScsiModeSensePageControl.Current, 0x3F, + 0xFF, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense6CurrentData = mode6Currentbuffer; + sense = dev.ModeSense6(out mode6Changeablebuffer, out _, false, ScsiModeSensePageControl.Changeable, + 0x3F, 0xFF, dev.Timeout, out _); + if(!sense && !dev.Error) report.SCSI.ModeSense6ChangeableData = mode6Changeablebuffer; + } } - else report.SCSI.SupportsModeSubpages = true; if(!sense && !dev.Error && !decMode.HasValue) decMode = Modes.DecodeMode6(mode6Buffer, devType); diff --git a/DiscImageChef.Database/DiscImageChef.Database.csproj b/DiscImageChef.Database/DiscImageChef.Database.csproj index 7ccaa5063..dd6798103 100644 --- a/DiscImageChef.Database/DiscImageChef.Database.csproj +++ b/DiscImageChef.Database/DiscImageChef.Database.csproj @@ -95,6 +95,8 @@ + + diff --git a/DiscImageChef.Database/Migrations/20190108013456_AddChangeableScsiModes.Designer.cs b/DiscImageChef.Database/Migrations/20190108013456_AddChangeableScsiModes.Designer.cs new file mode 100644 index 000000000..1a81209a3 --- /dev/null +++ b/DiscImageChef.Database/Migrations/20190108013456_AddChangeableScsiModes.Designer.cs @@ -0,0 +1,1569 @@ +// +using System; +using DiscImageChef.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace DiscImageChef.Database.Migrations +{ + [DbContext(typeof(DicContext))] + [Migration("20190108013456_AddChangeableScsiModes")] + partial class AddChangeableScsiModes + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.0-rtm-35687"); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Ata", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Identify"); + + b.Property("ReadCapabilitiesId"); + + b.HasKey("Id"); + + b.HasIndex("ReadCapabilitiesId"); + + b.ToTable("Ata"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.BlockDescriptor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BlockLength"); + + b.Property("BlockLengthSql"); + + b.Property("Blocks"); + + b.Property("BlocksSql"); + + b.Property("Density"); + + b.Property("ScsiModeId"); + + b.HasKey("Id"); + + b.HasIndex("ScsiModeId"); + + b.ToTable("BlockDescriptor"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Chs", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Cylinders"); + + b.Property("CylindersSql"); + + b.Property("Heads"); + + b.Property("HeadsSql"); + + b.Property("Sectors"); + + b.Property("SectorsSql"); + + b.HasKey("Id"); + + b.ToTable("Chs"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.DensityCode", b => + { + b.Property("Code") + .ValueGeneratedOnAdd(); + + b.Property("SscSupportedMediaId"); + + b.HasKey("Code"); + + b.HasIndex("SscSupportedMediaId"); + + b.ToTable("DensityCode"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.FireWire", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Manufacturer"); + + b.Property("Product"); + + b.Property("ProductID"); + + b.Property("ProductIDSql"); + + b.Property("RemovableMedia"); + + b.Property("VendorID"); + + b.Property("VendorIDSql"); + + b.HasKey("Id"); + + b.ToTable("FireWire"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Mmc", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("FeaturesId"); + + b.Property("ModeSense2AData"); + + b.HasKey("Id"); + + b.HasIndex("FeaturesId"); + + b.ToTable("Mmc"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.MmcFeatures", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AACSVersion"); + + b.Property("AGIDs"); + + b.Property("BinaryData"); + + b.Property("BindingNonceBlocks"); + + b.Property("BlocksPerReadableUnit"); + + b.Property("BlocksPerReadableUnitSql"); + + b.Property("BufferUnderrunFreeInDVD"); + + b.Property("BufferUnderrunFreeInSAO"); + + b.Property("BufferUnderrunFreeInTAO"); + + b.Property("CPRMVersion"); + + b.Property("CSSVersion"); + + b.Property("CanAudioScan"); + + b.Property("CanEject"); + + b.Property("CanEraseSector"); + + b.Property("CanExpandBDRESpareArea"); + + b.Property("CanFormat"); + + b.Property("CanFormatBDREWithoutSpare"); + + b.Property("CanFormatCert"); + + b.Property("CanFormatFRF"); + + b.Property("CanFormatQCert"); + + b.Property("CanFormatRRM"); + + b.Property("CanGenerateBindingNonce"); + + b.Property("CanLoad"); + + b.Property("CanMuteSeparateChannels"); + + b.Property("CanOverwriteSAOTrack"); + + b.Property("CanOverwriteTAOTrack"); + + b.Property("CanPlayCDAudio"); + + b.Property("CanPseudoOverwriteBDR"); + + b.Property("CanReadAllDualR"); + + b.Property("CanReadAllDualRW"); + + b.Property("CanReadBD"); + + b.Property("CanReadBDR"); + + b.Property("CanReadBDRE1"); + + b.Property("CanReadBDRE2"); + + b.Property("CanReadBDROM"); + + b.Property("CanReadBluBCA"); + + b.Property("CanReadCD"); + + b.Property("CanReadCDMRW"); + + b.Property("CanReadCPRM_MKB"); + + b.Property("CanReadDDCD"); + + b.Property("CanReadDVD"); + + b.Property("CanReadDVDPlusMRW"); + + b.Property("CanReadDVDPlusR"); + + b.Property("CanReadDVDPlusRDL"); + + b.Property("CanReadDVDPlusRW"); + + b.Property("CanReadDVDPlusRWDL"); + + b.Property("CanReadDriveAACSCertificate"); + + b.Property("CanReadHDDVD"); + + b.Property("CanReadHDDVDR"); + + b.Property("CanReadHDDVDRAM"); + + b.Property("CanReadLeadInCDText"); + + b.Property("CanReadOldBDR"); + + b.Property("CanReadOldBDRE"); + + b.Property("CanReadOldBDROM"); + + b.Property("CanReadSpareAreaInformation"); + + b.Property("CanReportDriveSerial"); + + b.Property("CanReportMediaSerial"); + + b.Property("CanTestWriteDDCDR"); + + b.Property("CanTestWriteDVD"); + + b.Property("CanTestWriteInSAO"); + + b.Property("CanTestWriteInTAO"); + + b.Property("CanUpgradeFirmware"); + + b.Property("CanWriteBD"); + + b.Property("CanWriteBDR"); + + b.Property("CanWriteBDRE1"); + + b.Property("CanWriteBDRE2"); + + b.Property("CanWriteBusEncryptedBlocks"); + + b.Property("CanWriteCDMRW"); + + b.Property("CanWriteCDRW"); + + b.Property("CanWriteCDRWCAV"); + + b.Property("CanWriteCDSAO"); + + b.Property("CanWriteCDTAO"); + + b.Property("CanWriteCSSManagedDVD"); + + b.Property("CanWriteDDCDR"); + + b.Property("CanWriteDDCDRW"); + + b.Property("CanWriteDVDPlusMRW"); + + b.Property("CanWriteDVDPlusR"); + + b.Property("CanWriteDVDPlusRDL"); + + b.Property("CanWriteDVDPlusRW"); + + b.Property("CanWriteDVDPlusRWDL"); + + b.Property("CanWriteDVDR"); + + b.Property("CanWriteDVDRDL"); + + b.Property("CanWriteDVDRW"); + + b.Property("CanWriteHDDVDR"); + + b.Property("CanWriteHDDVDRAM"); + + b.Property("CanWriteOldBDR"); + + b.Property("CanWriteOldBDRE"); + + b.Property("CanWritePackedSubchannelInTAO"); + + b.Property("CanWriteRWSubchannelInSAO"); + + b.Property("CanWriteRWSubchannelInTAO"); + + b.Property("CanWriteRaw"); + + b.Property("CanWriteRawMultiSession"); + + b.Property("CanWriteRawSubchannelInTAO"); + + b.Property("ChangerIsSideChangeCapable"); + + b.Property("ChangerSlots"); + + b.Property("ChangerSupportsDiscPresent"); + + b.Property("DBML"); + + b.Property("DVDMultiRead"); + + b.Property("EmbeddedChanger"); + + b.Property("ErrorRecoveryPage"); + + b.Property("FirmwareDate"); + + b.Property("LoadingMechanismType"); + + b.Property("Locked"); + + b.Property("LogicalBlockSize"); + + b.Property("LogicalBlockSizeSql"); + + b.Property("MultiRead"); + + b.Property("PhysicalInterfaceStandardNumber"); + + b.Property("PhysicalInterfaceStandardNumberSql"); + + b.Property("PreventJumper"); + + b.Property("SupportsAACS"); + + b.Property("SupportsBusEncryption"); + + b.Property("SupportsC2"); + + b.Property("SupportsCPRM"); + + b.Property("SupportsCSS"); + + b.Property("SupportsDAP"); + + b.Property("SupportsDeviceBusyEvent"); + + b.Property("SupportsHybridDiscs"); + + b.Property("SupportsModePage1Ch"); + + b.Property("SupportsOSSC"); + + b.Property("SupportsPWP"); + + b.Property("SupportsSWPP"); + + b.Property("SupportsSecurDisc"); + + b.Property("SupportsSeparateVolume"); + + b.Property("SupportsVCPS"); + + b.Property("SupportsWriteInhibitDCB"); + + b.Property("SupportsWriteProtectPAC"); + + b.Property("VolumeLevels"); + + b.Property("VolumeLevelsSql"); + + b.HasKey("Id"); + + b.ToTable("MmcFeatures"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.MmcSd", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("CID"); + + b.Property("CSD"); + + b.Property("ExtendedCSD"); + + b.Property("OCR"); + + b.Property("SCR"); + + b.HasKey("Id"); + + b.ToTable("MmcSd"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Pcmcia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("CIS"); + + b.Property("CardCode"); + + b.Property("CardCodeSql"); + + b.Property("Compliance"); + + b.Property("Manufacturer"); + + b.Property("ManufacturerCode"); + + b.Property("ManufacturerCodeSql"); + + b.Property("ProductName"); + + b.HasKey("Id"); + + b.ToTable("Pcmcia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Scsi", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("InquiryData"); + + b.Property("ModeSense10ChangeableData"); + + b.Property("ModeSense10CurrentData"); + + b.Property("ModeSense10Data"); + + b.Property("ModeSense6ChangeableData"); + + b.Property("ModeSense6CurrentData"); + + b.Property("ModeSense6Data"); + + b.Property("ModeSenseId"); + + b.Property("MultiMediaDeviceId"); + + b.Property("ReadCapabilitiesId"); + + b.Property("SequentialDeviceId"); + + b.Property("SupportsModeSense10"); + + b.Property("SupportsModeSense6"); + + b.Property("SupportsModeSubpages"); + + b.HasKey("Id"); + + b.HasIndex("ModeSenseId"); + + b.HasIndex("MultiMediaDeviceId"); + + b.HasIndex("ReadCapabilitiesId"); + + b.HasIndex("SequentialDeviceId"); + + b.ToTable("Scsi"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.ScsiMode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BlankCheckEnabled"); + + b.Property("BufferedMode"); + + b.Property("DPOandFUA"); + + b.Property("MediumType"); + + b.Property("Speed"); + + b.Property("WriteProtected"); + + b.HasKey("Id"); + + b.ToTable("ScsiMode"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.ScsiPage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ScsiId"); + + b.Property("ScsiModeId"); + + b.Property("page"); + + b.Property("subpage"); + + b.Property("value"); + + b.HasKey("Id"); + + b.HasIndex("ScsiId"); + + b.HasIndex("ScsiModeId"); + + b.ToTable("ScsiPage"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Ssc", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BlockSizeGranularity"); + + b.Property("MaxBlockLength"); + + b.Property("MaxBlockLengthSql"); + + b.Property("MinBlockLength"); + + b.Property("MinBlockLengthSql"); + + b.HasKey("Id"); + + b.ToTable("Ssc"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SscSupportedMedia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Description"); + + b.Property("Length"); + + b.Property("LengthSql"); + + b.Property("MediumType"); + + b.Property("Name"); + + b.Property("Organization"); + + b.Property("SscId"); + + b.Property("TestedSequentialMediaId"); + + b.Property("Width"); + + b.Property("WidthSql"); + + b.HasKey("Id"); + + b.HasIndex("SscId"); + + b.HasIndex("TestedSequentialMediaId"); + + b.ToTable("SscSupportedMedia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SupportedDensity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BitsPerMm"); + + b.Property("BitsPerMmSql"); + + b.Property("Capacity"); + + b.Property("CapacitySql"); + + b.Property("DefaultDensity"); + + b.Property("Description"); + + b.Property("Duplicate"); + + b.Property("Name"); + + b.Property("Organization"); + + b.Property("PrimaryCode"); + + b.Property("SecondaryCode"); + + b.Property("SscId"); + + b.Property("TestedSequentialMediaId"); + + b.Property("Tracks"); + + b.Property("TracksSql"); + + b.Property("Width"); + + b.Property("WidthSql"); + + b.Property("Writable"); + + b.HasKey("Id"); + + b.HasIndex("SscId"); + + b.HasIndex("TestedSequentialMediaId"); + + b.ToTable("SupportedDensity"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedMedia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AdipData"); + + b.Property("AtaId"); + + b.Property("AtipData"); + + b.Property("BlockSize"); + + b.Property("BlockSizeSql"); + + b.Property("Blocks"); + + b.Property("BlocksSql"); + + b.Property("BluBcaData"); + + b.Property("BluDdsData"); + + b.Property("BluDiData"); + + b.Property("BluPacData"); + + b.Property("BluSaiData"); + + b.Property("C2PointersData"); + + b.Property("CHSId"); + + b.Property("CanReadAACS"); + + b.Property("CanReadADIP"); + + b.Property("CanReadATIP"); + + b.Property("CanReadBCA"); + + b.Property("CanReadC2Pointers"); + + b.Property("CanReadCMI"); + + b.Property("CanReadCorrectedSubchannel"); + + b.Property("CanReadCorrectedSubchannelWithC2"); + + b.Property("CanReadDCB"); + + b.Property("CanReadDDS"); + + b.Property("CanReadDMI"); + + b.Property("CanReadDiscInformation"); + + b.Property("CanReadFirstTrackPreGap"); + + b.Property("CanReadFullTOC"); + + b.Property("CanReadHDCMI"); + + b.Property("CanReadLayerCapacity"); + + b.Property("CanReadLeadIn"); + + b.Property("CanReadLeadOut"); + + b.Property("CanReadMediaID"); + + b.Property("CanReadMediaSerial"); + + b.Property("CanReadPAC"); + + b.Property("CanReadPFI"); + + b.Property("CanReadPMA"); + + b.Property("CanReadPQSubchannel"); + + b.Property("CanReadPQSubchannelWithC2"); + + b.Property("CanReadPRI"); + + b.Property("CanReadRWSubchannel"); + + b.Property("CanReadRWSubchannelWithC2"); + + b.Property("CanReadRecordablePFI"); + + b.Property("CanReadSpareAreaInformation"); + + b.Property("CanReadTOC"); + + b.Property("CanReadingIntersessionLeadIn"); + + b.Property("CanReadingIntersessionLeadOut"); + + b.Property("CmiData"); + + b.Property("CorrectedSubchannelData"); + + b.Property("CorrectedSubchannelWithC2Data"); + + b.Property("CurrentCHSId"); + + b.Property("DcbData"); + + b.Property("Density"); + + b.Property("DmiData"); + + b.Property("DvdAacsData"); + + b.Property("DvdBcaData"); + + b.Property("DvdDdsData"); + + b.Property("DvdLayerData"); + + b.Property("DvdSaiData"); + + b.Property("EmbossedPfiData"); + + b.Property("FullTocData"); + + b.Property("HLDTSTReadRawDVDData"); + + b.Property("HdCmiData"); + + b.Property("IdentifyData"); + + b.Property("IntersessionLeadInData"); + + b.Property("IntersessionLeadOutData"); + + b.Property("LBA48Sectors"); + + b.Property("LBA48SectorsSql"); + + b.Property("LBASectors"); + + b.Property("LBASectorsSql"); + + b.Property("LeadInData"); + + b.Property("LeadOutData"); + + b.Property("LogicalAlignment"); + + b.Property("LogicalAlignmentSql"); + + b.Property("LongBlockSize"); + + b.Property("LongBlockSizeSql"); + + b.Property("Manufacturer"); + + b.Property("MediaIsRecognized"); + + b.Property("MediumType"); + + b.Property("MediumTypeName"); + + b.Property("MmcId"); + + b.Property("ModeSense10Data"); + + b.Property("ModeSense6Data"); + + b.Property("Model"); + + b.Property("NecReadCddaData"); + + b.Property("NominalRotationRate"); + + b.Property("NominalRotationRateSql"); + + b.Property("PQSubchannelData"); + + b.Property("PQSubchannelWithC2Data"); + + b.Property("PfiData"); + + b.Property("PhysicalBlockSize"); + + b.Property("PhysicalBlockSizeSql"); + + b.Property("PioneerReadCddaData"); + + b.Property("PioneerReadCddaMsfData"); + + b.Property("PlextorReadCddaData"); + + b.Property("PlextorReadRawDVDData"); + + b.Property("PmaData"); + + b.Property("PriData"); + + b.Property("RWSubchannelData"); + + b.Property("RWSubchannelWithC2Data"); + + b.Property("Read10Data"); + + b.Property("Read12Data"); + + b.Property("Read16Data"); + + b.Property("Read6Data"); + + b.Property("ReadCdData"); + + b.Property("ReadCdFullData"); + + b.Property("ReadCdMsfData"); + + b.Property("ReadCdMsfFullData"); + + b.Property("ReadDmaData"); + + b.Property("ReadDmaLba48Data"); + + b.Property("ReadDmaLbaData"); + + b.Property("ReadDmaRetryData"); + + b.Property("ReadDmaRetryLbaData"); + + b.Property("ReadLba48Data"); + + b.Property("ReadLbaData"); + + b.Property("ReadLong10Data"); + + b.Property("ReadLong16Data"); + + b.Property("ReadLongData"); + + b.Property("ReadLongLbaData"); + + b.Property("ReadLongRetryData"); + + b.Property("ReadLongRetryLbaData"); + + b.Property("ReadRetryLbaData"); + + b.Property("ReadSectorsData"); + + b.Property("ReadSectorsRetryData"); + + b.Property("ScsiId"); + + b.Property("SolidStateDevice"); + + b.Property("SupportsHLDTSTReadRawDVD"); + + b.Property("SupportsNECReadCDDA"); + + b.Property("SupportsPioneerReadCDDA"); + + b.Property("SupportsPioneerReadCDDAMSF"); + + b.Property("SupportsPlextorReadCDDA"); + + b.Property("SupportsPlextorReadRawDVD"); + + b.Property("SupportsRead10"); + + b.Property("SupportsRead12"); + + b.Property("SupportsRead16"); + + b.Property("SupportsRead6"); + + b.Property("SupportsReadCapacity"); + + b.Property("SupportsReadCapacity16"); + + b.Property("SupportsReadCd"); + + b.Property("SupportsReadCdMsf"); + + b.Property("SupportsReadCdMsfRaw"); + + b.Property("SupportsReadCdRaw"); + + b.Property("SupportsReadDma"); + + b.Property("SupportsReadDmaLba"); + + b.Property("SupportsReadDmaLba48"); + + b.Property("SupportsReadDmaRetry"); + + b.Property("SupportsReadDmaRetryLba"); + + b.Property("SupportsReadLba"); + + b.Property("SupportsReadLba48"); + + b.Property("SupportsReadLong"); + + b.Property("SupportsReadLong16"); + + b.Property("SupportsReadLongLba"); + + b.Property("SupportsReadLongRetry"); + + b.Property("SupportsReadLongRetryLba"); + + b.Property("SupportsReadRetry"); + + b.Property("SupportsReadRetryLba"); + + b.Property("SupportsReadSectors"); + + b.Property("SupportsSeek"); + + b.Property("SupportsSeekLba"); + + b.Property("TocData"); + + b.Property("Track1PregapData"); + + b.Property("UnformattedBPS"); + + b.Property("UnformattedBPSSql"); + + b.Property("UnformattedBPT"); + + b.Property("UnformattedBPTSql"); + + b.HasKey("Id"); + + b.HasIndex("AtaId"); + + b.HasIndex("CHSId"); + + b.HasIndex("CurrentCHSId"); + + b.HasIndex("MmcId"); + + b.HasIndex("ScsiId"); + + b.ToTable("TestedMedia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("CanReadMediaSerial"); + + b.Property("Density"); + + b.Property("Manufacturer"); + + b.Property("MediaIsRecognized"); + + b.Property("MediumType"); + + b.Property("MediumTypeName"); + + b.Property("ModeSense10Data"); + + b.Property("ModeSense6Data"); + + b.Property("Model"); + + b.Property("SscId"); + + b.HasKey("Id"); + + b.HasIndex("SscId"); + + b.ToTable("TestedSequentialMedia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Usb", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Descriptors"); + + b.Property("Manufacturer"); + + b.Property("Product"); + + b.Property("ProductID"); + + b.Property("ProductIDSql"); + + b.Property("RemovableMedia"); + + b.Property("VendorID"); + + b.Property("VendorIDSql"); + + b.HasKey("Id"); + + b.ToTable("Usb"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.CdOffset", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AddedWhen"); + + b.Property("Agreement"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("ModifiedWhen"); + + b.Property("Offset"); + + b.Property("Submissions"); + + b.HasKey("Id"); + + b.ToTable("CdOffsets"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Command", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Commands"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Device", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ATAId"); + + b.Property("ATAPIId"); + + b.Property("CompactFlash"); + + b.Property("FireWireId"); + + b.Property("LastSynchronized"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("MultiMediaCardId"); + + b.Property("OptimalMultipleSectorsRead"); + + b.Property("PCMCIAId"); + + b.Property("Revision"); + + b.Property("SCSIId"); + + b.Property("SecureDigitalId"); + + b.Property("Type"); + + b.Property("USBId"); + + b.HasKey("Id"); + + b.HasIndex("ATAId"); + + b.HasIndex("ATAPIId"); + + b.HasIndex("FireWireId"); + + b.HasIndex("MultiMediaCardId"); + + b.HasIndex("PCMCIAId"); + + b.HasIndex("SCSIId"); + + b.HasIndex("SecureDigitalId"); + + b.HasIndex("USBId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.DeviceStat", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Bus"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("Revision"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("SeenDevices"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Filesystem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Filesystems"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Filter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Filters"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Media", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Real"); + + b.Property("Synchronized"); + + b.Property("Type"); + + b.HasKey("Id"); + + b.ToTable("Medias"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.MediaFormat", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("MediaFormats"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.OperatingSystem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.Property("Version"); + + b.HasKey("Id"); + + b.ToTable("OperatingSystems"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Partition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Partitions"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Report", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ATAId"); + + b.Property("ATAPIId"); + + b.Property("CompactFlash"); + + b.Property("Created"); + + b.Property("FireWireId"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("MultiMediaCardId"); + + b.Property("PCMCIAId"); + + b.Property("Revision"); + + b.Property("SCSIId"); + + b.Property("SecureDigitalId"); + + b.Property("Type"); + + b.Property("USBId"); + + b.Property("Uploaded"); + + b.HasKey("Id"); + + b.HasIndex("ATAId"); + + b.HasIndex("ATAPIId"); + + b.HasIndex("FireWireId"); + + b.HasIndex("MultiMediaCardId"); + + b.HasIndex("PCMCIAId"); + + b.HasIndex("SCSIId"); + + b.HasIndex("SecureDigitalId"); + + b.HasIndex("USBId"); + + b.ToTable("Reports"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.UsbProduct", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AddedWhen"); + + b.Property("ModifiedWhen"); + + b.Property("Product"); + + b.Property("ProductId"); + + b.Property("VendorId"); + + b.HasKey("Id"); + + b.HasIndex("VendorId"); + + b.ToTable("UsbProducts"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.UsbVendor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AddedWhen"); + + b.Property("ModifiedWhen"); + + b.Property("Vendor"); + + b.HasKey("Id"); + + b.ToTable("UsbVendors"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Version", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Synchronized"); + + b.Property("Value"); + + b.HasKey("Id"); + + b.ToTable("Versions"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Ata", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedMedia", "ReadCapabilities") + .WithMany() + .HasForeignKey("ReadCapabilitiesId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.BlockDescriptor", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.ScsiMode") + .WithMany("BlockDescriptors") + .HasForeignKey("ScsiModeId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.DensityCode", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.SscSupportedMedia") + .WithMany("DensityCodes") + .HasForeignKey("SscSupportedMediaId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Mmc", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcFeatures", "Features") + .WithMany() + .HasForeignKey("FeaturesId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Scsi", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.ScsiMode", "ModeSense") + .WithMany() + .HasForeignKey("ModeSenseId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Mmc", "MultiMediaDevice") + .WithMany() + .HasForeignKey("MultiMediaDeviceId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedMedia", "ReadCapabilities") + .WithMany() + .HasForeignKey("ReadCapabilitiesId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc", "SequentialDevice") + .WithMany() + .HasForeignKey("SequentialDeviceId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.ScsiPage", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi") + .WithMany("EVPDPages") + .HasForeignKey("ScsiId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.ScsiMode") + .WithMany("ModePages") + .HasForeignKey("ScsiModeId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SscSupportedMedia", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc") + .WithMany("SupportedMediaTypes") + .HasForeignKey("SscId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia") + .WithMany("SupportedMediaTypes") + .HasForeignKey("TestedSequentialMediaId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SupportedDensity", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc") + .WithMany("SupportedDensities") + .HasForeignKey("SscId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia") + .WithMany("SupportedDensities") + .HasForeignKey("TestedSequentialMediaId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedMedia", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata") + .WithMany("RemovableMedias") + .HasForeignKey("AtaId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Chs", "CHS") + .WithMany() + .HasForeignKey("CHSId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Chs", "CurrentCHS") + .WithMany() + .HasForeignKey("CurrentCHSId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Mmc") + .WithMany("TestedMedia") + .HasForeignKey("MmcId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi") + .WithMany("RemovableMedias") + .HasForeignKey("ScsiId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc") + .WithMany("TestedMedia") + .HasForeignKey("SscId"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Device", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATA") + .WithMany() + .HasForeignKey("ATAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATAPI") + .WithMany() + .HasForeignKey("ATAPIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.FireWire", "FireWire") + .WithMany() + .HasForeignKey("FireWireId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "MultiMediaCard") + .WithMany() + .HasForeignKey("MultiMediaCardId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Pcmcia", "PCMCIA") + .WithMany() + .HasForeignKey("PCMCIAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi", "SCSI") + .WithMany() + .HasForeignKey("SCSIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "SecureDigital") + .WithMany() + .HasForeignKey("SecureDigitalId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Usb", "USB") + .WithMany() + .HasForeignKey("USBId"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Report", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATA") + .WithMany() + .HasForeignKey("ATAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATAPI") + .WithMany() + .HasForeignKey("ATAPIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.FireWire", "FireWire") + .WithMany() + .HasForeignKey("FireWireId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "MultiMediaCard") + .WithMany() + .HasForeignKey("MultiMediaCardId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Pcmcia", "PCMCIA") + .WithMany() + .HasForeignKey("PCMCIAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi", "SCSI") + .WithMany() + .HasForeignKey("SCSIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "SecureDigital") + .WithMany() + .HasForeignKey("SecureDigitalId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Usb", "USB") + .WithMany() + .HasForeignKey("USBId"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.UsbProduct", b => + { + b.HasOne("DiscImageChef.Database.Models.UsbVendor", "Vendor") + .WithMany("Products") + .HasForeignKey("VendorId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DiscImageChef.Database/Migrations/20190108013456_AddChangeableScsiModes.cs b/DiscImageChef.Database/Migrations/20190108013456_AddChangeableScsiModes.cs new file mode 100644 index 000000000..269336114 --- /dev/null +++ b/DiscImageChef.Database/Migrations/20190108013456_AddChangeableScsiModes.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DiscImageChef.Database.Migrations +{ + public partial class AddChangeableScsiModes : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn("ModeSense10ChangeableData", "Scsi", nullable: true); + + migrationBuilder.AddColumn("ModeSense10CurrentData", "Scsi", nullable: true); + + migrationBuilder.AddColumn("ModeSense6ChangeableData", "Scsi", nullable: true); + + migrationBuilder.AddColumn("ModeSense6CurrentData", "Scsi", nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn("ModeSense10ChangeableData", "Scsi"); + + migrationBuilder.DropColumn("ModeSense10CurrentData", "Scsi"); + + migrationBuilder.DropColumn("ModeSense6ChangeableData", "Scsi"); + + migrationBuilder.DropColumn("ModeSense6CurrentData", "Scsi"); + } + } +} \ No newline at end of file diff --git a/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs b/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs index 173a5c467..ed0bfcf54 100644 --- a/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs +++ b/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs @@ -12,7 +12,7 @@ namespace DiscImageChef.Database.Migrations protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "2.1.4-rtm-31024"); + modelBuilder.HasAnnotation("ProductVersion", "2.2.0-rtm-35687"); modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Ata", b => { @@ -439,8 +439,16 @@ namespace DiscImageChef.Database.Migrations b.Property("InquiryData"); + b.Property("ModeSense10ChangeableData"); + + b.Property("ModeSense10CurrentData"); + b.Property("ModeSense10Data"); + b.Property("ModeSense6ChangeableData"); + + b.Property("ModeSense6CurrentData"); + b.Property("ModeSense6Data"); b.Property("ModeSenseId"); diff --git a/DiscImageChef.Dto/DeviceDto.cs b/DiscImageChef.Dto/DeviceDto.cs index 3cb7296b9..1d485e395 100644 --- a/DiscImageChef.Dto/DeviceDto.cs +++ b/DiscImageChef.Dto/DeviceDto.cs @@ -109,11 +109,15 @@ namespace DiscImageChef.Dto if(SCSI != null) { - SCSI.EVPDPages = null; - SCSI.InquiryData = null; - SCSI.ModeSense6Data = null; - SCSI.ModeSense10Data = null; - SCSI.ReadCapabilities = ClearBinaries(SCSI.ReadCapabilities); + 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); if(SCSI.ModeSense != null) { diff --git a/DiscImageChef.Server/DiscImageChef.Server.csproj b/DiscImageChef.Server/DiscImageChef.Server.csproj index bc11dd56d..83b021a29 100644 --- a/DiscImageChef.Server/DiscImageChef.Server.csproj +++ b/DiscImageChef.Server/DiscImageChef.Server.csproj @@ -265,6 +265,10 @@ 201901030344456_AddOptimalReadMultipleCount.cs + + + 201901081359499_AddChangeableScsiModes.cs + @@ -394,6 +398,9 @@ 201901030344456_AddOptimalReadMultipleCount.cs + + 201901081359499_AddChangeableScsiModes.cs + 10.0 diff --git a/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.Designer.cs b/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.Designer.cs new file mode 100644 index 000000000..6a8bc447a --- /dev/null +++ b/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.Designer.cs @@ -0,0 +1,29 @@ +// +namespace DiscImageChef.Server.Migrations +{ + using System.CodeDom.Compiler; + using System.Data.Entity.Migrations; + using System.Data.Entity.Migrations.Infrastructure; + using System.Resources; + + [GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")] + public sealed partial class AddChangeableScsiModes : IMigrationMetadata + { + private readonly ResourceManager Resources = new ResourceManager(typeof(AddChangeableScsiModes)); + + string IMigrationMetadata.Id + { + get { return "201901081359499_AddChangeableScsiModes"; } + } + + string IMigrationMetadata.Source + { + get { return null; } + } + + string IMigrationMetadata.Target + { + get { return Resources.GetString("Target"); } + } + } +} diff --git a/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.cs b/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.cs new file mode 100644 index 000000000..b1900d284 --- /dev/null +++ b/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.cs @@ -0,0 +1,23 @@ +using System.Data.Entity.Migrations; + +namespace DiscImageChef.Server.Migrations +{ + public partial class AddChangeableScsiModes : DbMigration + { + public override void Up() + { + AddColumn("dbo.Scsis", "ModeSense6CurrentData", c => c.Binary()); + AddColumn("dbo.Scsis", "ModeSense10CurrentData", c => c.Binary()); + AddColumn("dbo.Scsis", "ModeSense6ChangeableData", c => c.Binary()); + AddColumn("dbo.Scsis", "ModeSense10ChangeableData", c => c.Binary()); + } + + public override void Down() + { + DropColumn("dbo.Scsis", "ModeSense10ChangeableData"); + DropColumn("dbo.Scsis", "ModeSense6ChangeableData"); + DropColumn("dbo.Scsis", "ModeSense10CurrentData"); + DropColumn("dbo.Scsis", "ModeSense6CurrentData"); + } + } +} \ No newline at end of file diff --git a/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.resx b/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.resx new file mode 100644 index 000000000..992a39a7b --- /dev/null +++ b/DiscImageChef.Server/Migrations/201901081359499_AddChangeableScsiModes.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + + + dbo + + \ No newline at end of file