* DiscImageChef.Decoders/CD/ATIP.cs:

Make ATIP manufacturer resolver a public method.

	* DiscImageChef.Decoders/SCSI/MMC/Features.cs:
	  Added HDBurn profiles.

	* DiscImageChef.Decoders/SCSI/Modes.cs:
	  Corrected typo.

	* DiscImageChef.DiscImages/BLU.cs:
	* DiscImageChef.DiscImages/GDI.cs:
	* DiscImageChef.DiscImages/VHD.cs:
	* DiscImageChef.DiscImages/Nero.cs:
	* DiscImageChef/Commands/Compare.cs:
	* DiscImageChef.DiscImages/CopyQM.cs:
	* DiscImageChef.DiscImages/CDRWin.cs:
	* DiscImageChef.DiscImages/CDRDAO.cs:
	* DiscImageChef.DiscImages/Apple2MG.cs:
	* DiscImageChef.DiscImages/TeleDisk.cs:
	* DiscImageChef.DiscImages/ImageInfo.cs:
	* DiscImageChef.DiscImages/Alcohol120.cs:
	* DiscImageChef.DiscImages/DiskCopy42.cs:
	* DiscImageChef.DiscImages/ZZZRawImage.cs:
	  Added field for drive firmware revision.

	* DiscImageChef.DiscImages/BlindWrite4.cs:
	  Added field for drive firmware revision.
	Change subchannel informative exception.
	Change application name and version.

	* DiscImageChef.DiscImages/ImagePlugin.cs:
	  Added subchannel types for Q only.

	* DiscImageChef/Commands/CreateSidecar.cs:
	  If drive image contains information about the dumping drive,
	  use it.
	Added subchannel types for Q only.
This commit is contained in:
2016-08-18 00:05:24 +01:00
parent c4c92a8240
commit b3924779ba
24 changed files with 452 additions and 285 deletions

View File

@@ -426,285 +426,7 @@ namespace DiscImageChef.Decoders.CD
sb.AppendLine("Disc uses short strategy type dye (Phthalocyanine, etc...)"); sb.AppendLine("Disc uses short strategy type dye (Phthalocyanine, etc...)");
} }
switch(response.LeadInStartSec) manufacturer = ManufacturerFromATIP(response.LeadInStartSec, frm);
{
case 15:
if(frm == 00)
manufacturer = "TDK Corporation";
if(frm == 10)
manufacturer = "Ritek Co.";
if(frm == 20)
manufacturer = "Mitsubishi Chemical Corporation";
if(frm == 30)
manufacturer = "NAN-YA Plastics Corporation";
break;
case 16:
if(frm == 20)
manufacturer = "Shenzen SG&Gast Digital Optical Discs";
if(frm == 30)
manufacturer = "Grand Advance Technology Ltd.";
break;
case 17:
if(frm == 00)
manufacturer = "Moser Baer India Limited";
break;
case 18:
if(frm == 10)
manufacturer = "Wealth Fair Investment Ltd.";
if(frm == 60)
manufacturer = "Taroko International Co. Ltd.";
break;
case 20:
if(frm == 10)
manufacturer = "CDA Datenträger Albrechts GmbH";
break;
case 21:
if(frm == 10)
manufacturer = "Grupo Condor S.L.";
if(frm == 30)
manufacturer = "Bestdisc Technology Corporation";
if(frm == 40)
manufacturer = "Optical Disc Manufacturing Equipment";
if(frm == 50)
manufacturer = "Sound Sound Multi-Media Development Ltd.";
break;
case 22:
if(frm == 00)
manufacturer = "Woongjin Media Corp.";
if(frm == 10)
manufacturer = "Seantram Technology Inc.";
if(frm == 20)
manufacturer = "Advanced Digital Media";
if(frm == 30)
manufacturer = "EXIMPO";
if(frm == 40)
manufacturer = "CIS Technology Inc.";
if(frm == 50)
manufacturer = "Hong Kong Digital Technology Co., Ltd.";
if(frm == 60)
manufacturer = "Acer Media Technology, Inc.";
break;
case 23:
if(frm == 00)
manufacturer = "Matsushita Electric Industrial Co., Ltd.";
if(frm == 10)
manufacturer = "Doremi Media Co., Ltd.";
if(frm == 20)
manufacturer = "Nacar Media s.r.l.";
if(frm == 30)
manufacturer = "Audio Distributors Co., Ltd.";
if(frm == 40)
manufacturer = "Victor Company of Japan, Ltd.";
if(frm == 50)
manufacturer = "Optrom Inc.";
if(frm == 60)
manufacturer = "Customer Pressing Oosterhout";
break;
case 24:
if(frm == 00)
manufacturer = "Taiyo Yuden Company Ltd.";
if(frm == 10)
manufacturer = "SONY Corporation";
if(frm == 20)
manufacturer = "Computer Support Italy s.r.l.";
if(frm == 30)
manufacturer = "Unitech Japan Inc.";
if(frm == 40)
manufacturer = "kdg mediatech AG";
if(frm == 50)
manufacturer = "Guann Yinn Co., Ltd.";
if(frm == 60)
manufacturer = "Harmonic Hall Optical Disc Ltd.";
break;
case 25:
if(frm == 00)
manufacturer = "MPO";
if(frm == 20)
manufacturer = "Hitachi Maxell, Ltd.";
if(frm == 30)
manufacturer = "Infodisc Technology Co. Ltd.";
if(frm == 40)
manufacturer = "Vivastar AG";
if(frm == 50)
manufacturer = "AMS Technology Inc.";
if(frm == 60)
manufacturer = "Xcitec Inc.";
break;
case 26:
if(frm == 00)
manufacturer = "Fornet International Pte Ltd.";
if(frm == 10)
manufacturer = "POSTECH Corporation";
if(frm == 20)
manufacturer = "SKC Co., Ltd.";
if(frm == 30)
manufacturer = "Optical Disc Corporation";
if(frm == 40)
manufacturer = "FUJI Photo Film Co., Ltd.";
if(frm == 50)
manufacturer = "Lead Data Inc.";
if(frm == 60)
manufacturer = "CMC Magnetics Corporation";
break;
case 27:
if(frm == 00)
manufacturer = "Digital Storage Technology Co., Ltd.";
if(frm == 10)
manufacturer = "Plasmon Data systems Ltd.";
if(frm == 20)
manufacturer = "Princo Corporation";
if(frm == 30)
manufacturer = "Pioneer Video Corporation";
if(frm == 40)
manufacturer = "Kodak Japan Ltd.";
if(frm == 50)
manufacturer = "Mitsui Chemicals, Inc.";
if(frm == 60)
manufacturer = "Ricoh Company Ltd.";
break;
case 28:
if(frm == 00)
manufacturer = "Opti.Me.S. S.p.A.";
if(frm == 10)
manufacturer = "Gigastore Corporation";
if(frm == 20)
manufacturer = "Multi Media Masters & Machinary SA";
if(frm == 30)
manufacturer = "Auvistar Industry Co., Ltd.";
if(frm == 40)
manufacturer = "King Pro Mediatek Inc.";
if(frm == 50)
manufacturer = "Delphi Technology Inc.";
if(frm == 60)
manufacturer = "Friendly CD-Tek Co.";
break;
case 29:
if(frm == 00)
manufacturer = "Taeil Media Co., Ltd.";
if(frm == 10)
manufacturer = "Vanguard Disc Inc.";
if(frm == 20)
manufacturer = "Unidisc Technology Co., Ltd.";
if(frm == 30)
manufacturer = "Hile Optical Disc Technology Corp.";
if(frm == 40)
manufacturer = "Viva Magnetics Ltd.";
if(frm == 50)
manufacturer = "General Magnetics Ltd.";
break;
case 30:
if(frm == 10)
manufacturer = "CDA Datenträger Albrechts GmbH";
break;
case 31:
if(frm == 00)
manufacturer = "Ritek Co.";
if(frm == 30)
manufacturer = "Grand Advance Technology Ltd.";
break;
case 32:
if(frm == 00)
manufacturer = "TDK Corporation";
if(frm == 10)
manufacturer = "Prodisc Technology Inc.";
break;
case 34:
if(frm == 20)
manufacturer = "Mitsubishi Chemical Corporation";
break;
case 42:
if(frm == 20)
manufacturer = "Advanced Digital Media";
break;
case 45:
if(frm == 00)
manufacturer = "Fornet International Pte Ltd.";
if(frm == 10)
manufacturer = "Unitech Japan Inc.";
if(frm == 20)
manufacturer = "Acer Media Technology, Inc.";
if(frm == 40)
manufacturer = "CIS Technology Inc.";
if(frm == 50)
manufacturer = "Guann Yinn Co., Ltd.";
if(frm == 60)
manufacturer = "Xcitec Inc.";
break;
case 46:
if(frm == 00)
manufacturer = "Taiyo Yuden Company Ltd.";
if(frm == 10)
manufacturer = "Hong Kong Digital Technology Co., Ltd.";
if(frm == 20)
manufacturer = "Multi Media Masters & Machinary SA";
if(frm == 30)
manufacturer = "Computer Support Italy s.r.l.";
if(frm == 40)
manufacturer = "FUJI Photo Film Co., Ltd.";
if(frm == 50)
manufacturer = "Auvistar Industry Co., Ltd.";
if(frm == 60)
manufacturer = "CMC Magnetics Corporation";
break;
case 47:
if(frm == 10)
manufacturer = "Hitachi Maxell, Ltd.";
if(frm == 20)
manufacturer = "Princo Corporation";
if(frm == 40)
manufacturer = "POSTECH Corporation";
if(frm == 50)
manufacturer = "Ritek Co.";
if(frm == 60)
manufacturer = "Prodisc Technology Inc.";
break;
case 48:
if(frm == 00)
manufacturer = "Ricoh Company Ltd.";
if(frm == 10)
manufacturer = "Kodak Japan Ltd.";
if(frm == 20)
manufacturer = "Plasmon Data systems Ltd.";
if(frm == 30)
manufacturer = "Pioneer Video Corporation";
if(frm == 40)
manufacturer = "Digital Storage Technology Co., Ltd.";
if(frm == 50)
manufacturer = "Mitsui Chemicals, Inc.";
if(frm == 60)
manufacturer = "Lead Data Inc.";
break;
case 49:
if(frm == 00)
manufacturer = "TDK Corporation";
if(frm == 10)
manufacturer = "Gigastore Corporation";
if(frm == 20)
manufacturer = "King Pro Mediatek Inc.";
if(frm == 30)
manufacturer = "Opti.Me.S. S.p.A.";
if(frm == 40)
manufacturer = "Victor Company of Japan, Ltd.";
if(frm == 60)
manufacturer = "Matsushita Electric Industrial Co., Ltd.";
break;
case 50:
if(frm == 10)
manufacturer = "Vanguard Disc Inc.";
if(frm == 20)
manufacturer = "Mitsubishi Chemical Corporation";
if(frm == 30)
manufacturer = "CDA Datenträger Albrechts GmbH";
break;
case 51:
if(frm == 10)
manufacturer = "Grand Advance Technology Ltd.";
if(frm == 20)
manufacturer = "Infodisc Technology Co. Ltd.";
if(frm == 50)
manufacturer = "Hile Optical Disc Technology Corp.";
break;
}
if(manufacturer != "") if(manufacturer != "")
sb.AppendFormat("Disc manufactured by: {0}", manufacturer).AppendLine(); sb.AppendFormat("Disc manufactured by: {0}", manufacturer).AppendLine();
@@ -718,6 +440,291 @@ namespace DiscImageChef.Decoders.CD
CDATIP? decoded = Decode(CDATIPResponse); CDATIP? decoded = Decode(CDATIPResponse);
return Prettify(decoded); return Prettify(decoded);
} }
public static string ManufacturerFromATIP(byte sec, int frm)
{
switch(sec)
{
case 15:
if(frm == 00)
return "TDK Corporation";
if(frm == 10)
return "Ritek Co.";
if(frm == 20)
return "Mitsubishi Chemical Corporation";
if(frm == 30)
return "NAN-YA Plastics Corporation";
break;
case 16:
if(frm == 20)
return "Shenzen SG&Gast Digital Optical Discs";
if(frm == 30)
return "Grand Advance Technology Ltd.";
break;
case 17:
if(frm == 00)
return "Moser Baer India Limited";
break;
case 18:
if(frm == 10)
return "Wealth Fair Investment Ltd.";
if(frm == 60)
return "Taroko International Co. Ltd.";
break;
case 20:
if(frm == 10)
return "CDA Datenträger Albrechts GmbH";
break;
case 21:
if(frm == 10)
return "Grupo Condor S.L.";
if(frm == 30)
return "Bestdisc Technology Corporation";
if(frm == 40)
return "Optical Disc Manufacturing Equipment";
if(frm == 50)
return "Sound Sound Multi-Media Development Ltd.";
break;
case 22:
if(frm == 00)
return "Woongjin Media Corp.";
if(frm == 10)
return "Seantram Technology Inc.";
if(frm == 20)
return "Advanced Digital Media";
if(frm == 30)
return "EXIMPO";
if(frm == 40)
return "CIS Technology Inc.";
if(frm == 50)
return "Hong Kong Digital Technology Co., Ltd.";
if(frm == 60)
return "Acer Media Technology, Inc.";
break;
case 23:
if(frm == 00)
return "Matsushita Electric Industrial Co., Ltd.";
if(frm == 10)
return "Doremi Media Co., Ltd.";
if(frm == 20)
return "Nacar Media s.r.l.";
if(frm == 30)
return "Audio Distributors Co., Ltd.";
if(frm == 40)
return "Victor Company of Japan, Ltd.";
if(frm == 50)
return "Optrom Inc.";
if(frm == 60)
return "Customer Pressing Oosterhout";
break;
case 24:
if(frm == 00)
return "Taiyo Yuden Company Ltd.";
if(frm == 10)
return "SONY Corporation";
if(frm == 20)
return "Computer Support Italy s.r.l.";
if(frm == 30)
return "Unitech Japan Inc.";
if(frm == 40)
return "kdg mediatech AG";
if(frm == 50)
return "Guann Yinn Co., Ltd.";
if(frm == 60)
return "Harmonic Hall Optical Disc Ltd.";
break;
case 25:
if(frm == 00)
return "MPO";
if(frm == 20)
return "Hitachi Maxell, Ltd.";
if(frm == 30)
return "Infodisc Technology Co. Ltd.";
if(frm == 40)
return "Vivastar AG";
if(frm == 50)
return "AMS Technology Inc.";
if(frm == 60)
return "Xcitec Inc.";
break;
case 26:
if(frm == 00)
return "Fornet International Pte Ltd.";
if(frm == 10)
return "POSTECH Corporation";
if(frm == 20)
return "SKC Co., Ltd.";
if(frm == 30)
return "Optical Disc Corporation";
if(frm == 40)
return "FUJI Photo Film Co., Ltd.";
if(frm == 50)
return "Lead Data Inc.";
if(frm == 60)
return "CMC Magnetics Corporation";
break;
case 27:
if(frm == 00)
return "Digital Storage Technology Co., Ltd.";
if(frm == 10)
return "Plasmon Data systems Ltd.";
if(frm == 20)
return "Princo Corporation";
if(frm == 30)
return "Pioneer Video Corporation";
if(frm == 40)
return "Kodak Japan Ltd.";
if(frm == 50)
return "Mitsui Chemicals, Inc.";
if(frm == 60)
return "Ricoh Company Ltd.";
break;
case 28:
if(frm == 00)
return "Opti.Me.S. S.p.A.";
if(frm == 10)
return "Gigastore Corporation";
if(frm == 20)
return "Multi Media Masters & Machinary SA";
if(frm == 30)
return "Auvistar Industry Co., Ltd.";
if(frm == 40)
return "King Pro Mediatek Inc.";
if(frm == 50)
return "Delphi Technology Inc.";
if(frm == 60)
return "Friendly CD-Tek Co.";
break;
case 29:
if(frm == 00)
return "Taeil Media Co., Ltd.";
if(frm == 10)
return "Vanguard Disc Inc.";
if(frm == 20)
return "Unidisc Technology Co., Ltd.";
if(frm == 30)
return "Hile Optical Disc Technology Corp.";
if(frm == 40)
return "Viva Magnetics Ltd.";
if(frm == 50)
return "General Magnetics Ltd.";
break;
case 30:
if(frm == 10)
return "CDA Datenträger Albrechts GmbH";
break;
case 31:
if(frm == 00)
return "Ritek Co.";
if(frm == 30)
return "Grand Advance Technology Ltd.";
break;
case 32:
if(frm == 00)
return "TDK Corporation";
if(frm == 10)
return "Prodisc Technology Inc.";
break;
case 34:
if(frm == 20)
return "Mitsubishi Chemical Corporation";
break;
case 42:
if(frm == 20)
return "Advanced Digital Media";
break;
case 45:
if(frm == 00)
return "Fornet International Pte Ltd.";
if(frm == 10)
return "Unitech Japan Inc.";
if(frm == 20)
return "Acer Media Technology, Inc.";
if(frm == 40)
return "CIS Technology Inc.";
if(frm == 50)
return "Guann Yinn Co., Ltd.";
if(frm == 60)
return "Xcitec Inc.";
break;
case 46:
if(frm == 00)
return "Taiyo Yuden Company Ltd.";
if(frm == 10)
return "Hong Kong Digital Technology Co., Ltd.";
if(frm == 20)
return "Multi Media Masters & Machinary SA";
if(frm == 30)
return "Computer Support Italy s.r.l.";
if(frm == 40)
return "FUJI Photo Film Co., Ltd.";
if(frm == 50)
return "Auvistar Industry Co., Ltd.";
if(frm == 60)
return "CMC Magnetics Corporation";
break;
case 47:
if(frm == 10)
return "Hitachi Maxell, Ltd.";
if(frm == 20)
return "Princo Corporation";
if(frm == 40)
return "POSTECH Corporation";
if(frm == 50)
return "Ritek Co.";
if(frm == 60)
return "Prodisc Technology Inc.";
break;
case 48:
if(frm == 00)
return "Ricoh Company Ltd.";
if(frm == 10)
return "Kodak Japan Ltd.";
if(frm == 20)
return "Plasmon Data systems Ltd.";
if(frm == 30)
return "Pioneer Video Corporation";
if(frm == 40)
return "Digital Storage Technology Co., Ltd.";
if(frm == 50)
return "Mitsui Chemicals, Inc.";
if(frm == 60)
return "Lead Data Inc.";
break;
case 49:
if(frm == 00)
return "TDK Corporation";
if(frm == 10)
return "Gigastore Corporation";
if(frm == 20)
return "King Pro Mediatek Inc.";
if(frm == 30)
return "Opti.Me.S. S.p.A.";
if(frm == 40)
return "Victor Company of Japan, Ltd.";
if(frm == 60)
return "Matsushita Electric Industrial Co., Ltd.";
break;
case 50:
if(frm == 10)
return "Vanguard Disc Inc.";
if(frm == 20)
return "Mitsubishi Chemical Corporation";
if(frm == 30)
return "CDA Datenträger Albrechts GmbH";
break;
case 51:
if(frm == 10)
return "Grand Advance Technology Ltd.";
if(frm == 20)
return "Infodisc Technology Co. Ltd.";
if(frm == 50)
return "Hile Optical Disc Technology Corp.";
break;
}
return "";
}
} }
} }

View File

@@ -1,3 +1,11 @@
2016-08-18 Natalia Portillo <claunia@claunia.com>
* ATIP.cs: Make ATIP manufacturer resolver a public method.
* Features.cs: Added HDBurn profiles.
* Modes.cs: Corrected typo.
2016-08-09 Natalia Portillo <claunia@claunia.com> 2016-08-09 Natalia Portillo <claunia@claunia.com>
* DiscImageChef.Decoders.csproj: Bumped version to 3.2.99.2. * DiscImageChef.Decoders.csproj: Bumped version to 3.2.99.2.

View File

@@ -428,6 +428,18 @@ namespace DiscImageChef.Decoders.SCSI.MMC
/// </summary> /// </summary>
HDDVDRWDL = 0x005A, HDDVDRWDL = 0x005A,
/// <summary> /// <summary>
/// HDBurn CD-ROM
/// </summary>
HDBURNROM = 0x0080,
/// <summary>
/// HDBurn CD-R
/// </summary>
HDBURNR = 0x0081,
/// <summary>
/// HDBurn CD-RW
/// </summary>
HDBURNRW = 0x0082,
/// <summary>
/// Drive does not conform to any profiles /// Drive does not conform to any profiles
/// </summary> /// </summary>
Unconforming = 0xFFFF Unconforming = 0xFFFF
@@ -4099,6 +4111,15 @@ namespace DiscImageChef.Decoders.SCSI.MMC
case ProfileNumber.HDDVDRWDL: case ProfileNumber.HDDVDRWDL:
sb.Append("\tDrive supports HD DVD-RW DL"); sb.Append("\tDrive supports HD DVD-RW DL");
break; break;
case ProfileNumber.HDBURNROM:
sb.Append("\tDrive supports HDBurn CD-ROM");
break;
case ProfileNumber.HDBURNR:
sb.Append("\tDrive supports HDBurn CD-R");
break;
case ProfileNumber.HDBURNRW:
sb.Append("\tDrive supports HDBurn CD-RW");
break;
case ProfileNumber.Unconforming: case ProfileNumber.Unconforming:
sb.Append("\tDrive is not conforming to any profile"); sb.Append("\tDrive is not conforming to any profile");
break; break;

View File

@@ -5143,7 +5143,7 @@ namespace DiscImageChef.Decoders.SCSI
} }
if(page.Composite) if(page.Composite)
sb.AppendLine("\tDrive can deliver a compositve audio and video data stream"); sb.AppendLine("\tDrive can deliver a composite audio and video data stream");
if(page.DigitalPort1) if(page.DigitalPort1)
sb.AppendLine("\tDrive supports IEC-958 digital output on port 1"); sb.AppendLine("\tDrive supports IEC-958 digital output on port 1");
if(page.DigitalPort2) if(page.DigitalPort2)

View File

@@ -199,6 +199,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
public override bool IdentifyImage(string imagePath) public override bool IdentifyImage(string imagePath)

View File

@@ -194,6 +194,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
public override bool IdentifyImage(string imagePath) public override bool IdentifyImage(string imagePath)

View File

@@ -90,6 +90,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
public override bool IdentifyImage(string imagePath) public override bool IdentifyImage(string imagePath)

View File

@@ -202,6 +202,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
public override bool IdentifyImage(string imagePath) public override bool IdentifyImage(string imagePath)
@@ -785,7 +786,9 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.mediaType = MediaType.CD; ImageInfo.mediaType = MediaType.CD;
ImageInfo.imageApplication = "BlindRead 4"; ImageInfo.imageApplication = "BlindWrite";
ImageInfo.imageApplicationVersion = "4";
ImageInfo.imageVersion = "4";
FileInfo fi = new FileInfo(dataFile); FileInfo fi = new FileInfo(dataFile);
ImageInfo.imageSize = (ulong)fi.Length; ImageInfo.imageSize = (ulong)fi.Length;
@@ -1116,7 +1119,7 @@ namespace DiscImageChef.ImagePlugins
break; break;
} }
case SectorTagType.CDSectorSubchannel: case SectorTagType.CDSectorSubchannel:
throw new NotImplementedException("Subchannel interleaving not yet implemented"); throw new NotImplementedException("Packed subchannel not yet supported");
default: default:
throw new ArgumentException("Unsupported tag requested", nameof(tag)); throw new ArgumentException("Unsupported tag requested", nameof(tag));
} }
@@ -1146,7 +1149,7 @@ namespace DiscImageChef.ImagePlugins
break; break;
} }
case SectorTagType.CDSectorSubchannel: case SectorTagType.CDSectorSubchannel:
throw new NotImplementedException("Subchannel interleaving not yet implemented"); throw new NotImplementedException("Packed subchannel not yet supported");
default: default:
throw new ArgumentException("Unsupported tag requested", nameof(tag)); throw new ArgumentException("Unsupported tag requested", nameof(tag));
} }
@@ -1157,7 +1160,7 @@ namespace DiscImageChef.ImagePlugins
switch(tag) switch(tag)
{ {
case SectorTagType.CDSectorSubchannel: case SectorTagType.CDSectorSubchannel:
throw new NotImplementedException("Subchannel interleaving not yet implemented"); throw new NotImplementedException("Packed subchannel not yet supported");
default: default:
throw new ArgumentException("Unsupported tag requested", nameof(tag)); throw new ArgumentException("Unsupported tag requested", nameof(tag));
} }

View File

@@ -0,0 +1,42 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : BlindWrite5.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : Component
//
// --[ Description ] ----------------------------------------------------------
//
// Description
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2016 Natalia Portillo
// ****************************************************************************/
using System;
namespace DiscImageChef.DiscImages
{
public class BlindWrite5
{
public BlindWrite5()
{
}
}
}

View File

@@ -232,6 +232,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
#endregion Public methods #endregion Public methods

View File

@@ -305,6 +305,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
// Due to .cue format, this method must parse whole file, ignoring errors (those will be thrown by OpenImage()). // Due to .cue format, this method must parse whole file, ignoring errors (those will be thrown by OpenImage()).

View File

@@ -1,3 +1,25 @@
2016-08-18 Natalia Portillo <claunia@claunia.com>
* BLU.cs:
* GDI.cs:
* VHD.cs:
* Nero.cs:
* CopyQM.cs:
* CDRDAO.cs:
* CDRWin.cs:
* TeleDisk.cs:
* Apple2MG.cs:
* ImageInfo.cs:
* Alcohol120.cs:
* DiskCopy42.cs:
* ZZZRawImage.cs: Added field for drive firmware revision.
* BlindWrite4.cs: Added field for drive firmware revision.
Change subchannel informative exception.
Change application name and version.
* ImagePlugin.cs: Added subchannel types for Q only.
2016-08-17 Natalia Portillo <claunia@claunia.com> 2016-08-17 Natalia Portillo <claunia@claunia.com>
* BlindWrite4.cs: * BlindWrite4.cs:

View File

@@ -186,6 +186,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
#region Public methods #region Public methods

View File

@@ -154,6 +154,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
public override bool IdentifyImage(string imagePath) public override bool IdentifyImage(string imagePath)

View File

@@ -124,6 +124,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
// Due to .gdi format, this method must parse whole file, ignoring errors (those will be thrown by OpenImage()). // Due to .gdi format, this method must parse whole file, ignoring errors (those will be thrown by OpenImage()).

View File

@@ -64,6 +64,7 @@ namespace DiscImageChef.ImagePlugins
public string driveManufacturer; public string driveManufacturer;
public string driveModel; public string driveModel;
public string driveSerialNumber; public string driveSerialNumber;
public string driveFirmwareRevision;
public XmlMediaType xmlMediaType; public XmlMediaType xmlMediaType;
} }
} }

View File

@@ -503,7 +503,15 @@ namespace DiscImageChef.ImagePlugins
/// <summary> /// <summary>
/// Subchannel is interleaved and comes interleaved with main channel in same file /// Subchannel is interleaved and comes interleaved with main channel in same file
/// </summary> /// </summary>
RawInterleaved RawInterleaved,
/// <summary>
/// Only Q subchannel is stored as 16 bytes
/// </summary>
Q16,
/// <summary>
/// Only Q subchannel is stored as 16 bytes and comes interleaved with main channel in same file
/// </summary>
Q16Interleaved
} }
/// <summary> /// <summary>
@@ -653,6 +661,8 @@ namespace DiscImageChef.ImagePlugins
MMC_POWResourcesInformation, MMC_POWResourcesInformation,
/// <summary>SCSI INQUIRY response</summary> /// <summary>SCSI INQUIRY response</summary>
SCSI_INQUIRY, SCSI_INQUIRY,
/// <summary>SCSI MODE PAGE 2Ah</summary>
SCSI_MODEPAGE_2A,
/// <summary>ATA IDENTIFY DEVICE response</summary> /// <summary>ATA IDENTIFY DEVICE response</summary>
ATA_IDENTIFY, ATA_IDENTIFY,
/// <summary>ATA IDENTIFY PACKET DEVICE response</summary> /// <summary>ATA IDENTIFY PACKET DEVICE response</summary>

View File

@@ -1488,6 +1488,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
ImageInfo.mediaSequence = 0; ImageInfo.mediaSequence = 0;
ImageInfo.lastMediaSequence = 0; ImageInfo.lastMediaSequence = 0;
if(imageNewFormat) if(imageNewFormat)

View File

@@ -219,6 +219,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
ADiskCRCHasFailed = false; ADiskCRCHasFailed = false;
SectorsWhereCRCHasFailed = new List<ulong>(); SectorsWhereCRCHasFailed = new List<ulong>();
} }

View File

@@ -386,6 +386,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
#region public methods #region public methods

View File

@@ -72,6 +72,7 @@ namespace DiscImageChef.ImagePlugins
ImageInfo.driveManufacturer = null; ImageInfo.driveManufacturer = null;
ImageInfo.driveModel = null; ImageInfo.driveModel = null;
ImageInfo.driveSerialNumber = null; ImageInfo.driveSerialNumber = null;
ImageInfo.driveFirmwareRevision = null;
} }
public override bool IdentifyImage(string imagePath) public override bool IdentifyImage(string imagePath)

View File

@@ -1,3 +1,13 @@
2016-08-18 Natalia Portillo <claunia@claunia.com>
* Commands/Compare.cs:
Added field for drive firmware revision.
* Commands/CreateSidecar.cs:
If drive image contains information about the dumping drive,
use it.
Added subchannel types for Q only.
2016-08-09 Natalia Portillo <claunia@claunia.com> 2016-08-09 Natalia Portillo <claunia@claunia.com>
* DiscImageChef.csproj: * DiscImageChef.csproj:

View File

@@ -147,6 +147,7 @@ namespace DiscImageChef.Commands
try { image1Info.driveManufacturer = input1Format.GetDriveManufacturer(); } catch { image1Info.driveManufacturer = null; } try { image1Info.driveManufacturer = input1Format.GetDriveManufacturer(); } catch { image1Info.driveManufacturer = null; }
try { image1Info.driveModel = input1Format.GetDriveModel(); } catch { image1Info.driveModel = null; } try { image1Info.driveModel = input1Format.GetDriveModel(); } catch { image1Info.driveModel = null; }
try { image1Info.driveSerialNumber = input1Format.GetDriveSerialNumber(); } catch { image1Info.driveSerialNumber = null; } try { image1Info.driveSerialNumber = input1Format.GetDriveSerialNumber(); } catch { image1Info.driveSerialNumber = null; }
try { image1Info.driveFirmwareRevision = input1Format.ImageInfo.driveFirmwareRevision; } catch { image1Info.driveFirmwareRevision = null; }
foreach(MediaTagType disktag in Enum.GetValues(typeof(MediaTagType))) foreach(MediaTagType disktag in Enum.GetValues(typeof(MediaTagType)))
{ {
try try
@@ -188,6 +189,7 @@ namespace DiscImageChef.Commands
try { image2Info.driveManufacturer = input2Format.GetDriveManufacturer(); } catch { image2Info.driveManufacturer = null; } try { image2Info.driveManufacturer = input2Format.GetDriveManufacturer(); } catch { image2Info.driveManufacturer = null; }
try { image2Info.driveModel = input2Format.GetDriveModel(); } catch { image2Info.driveModel = null; } try { image2Info.driveModel = input2Format.GetDriveModel(); } catch { image2Info.driveModel = null; }
try { image2Info.driveSerialNumber = input2Format.GetDriveSerialNumber(); } catch { image2Info.driveSerialNumber = null; } try { image2Info.driveSerialNumber = input2Format.GetDriveSerialNumber(); } catch { image2Info.driveSerialNumber = null; }
try { image2Info.driveFirmwareRevision = input2Format.ImageInfo.driveFirmwareRevision; } catch { image2Info.driveFirmwareRevision = null; }
foreach(MediaTagType disktag in Enum.GetValues(typeof(MediaTagType))) foreach(MediaTagType disktag in Enum.GetValues(typeof(MediaTagType)))
{ {
try try
@@ -226,6 +228,7 @@ namespace DiscImageChef.Commands
sb.AppendFormat("Disk sequence\t{0}\t{1}", image1Info.mediaSequence, image2Info.mediaSequence).AppendLine(); sb.AppendFormat("Disk sequence\t{0}\t{1}", image1Info.mediaSequence, image2Info.mediaSequence).AppendLine();
sb.AppendFormat("Last disk on sequence\t{0}\t{1}", image1Info.lastMediaSequence, image2Info.lastMediaSequence).AppendLine(); sb.AppendFormat("Last disk on sequence\t{0}\t{1}", image1Info.lastMediaSequence, image2Info.lastMediaSequence).AppendLine();
sb.AppendFormat("Drive manufacturer\t{0}\t{1}", image1Info.driveManufacturer, image2Info.driveManufacturer).AppendLine(); sb.AppendFormat("Drive manufacturer\t{0}\t{1}", image1Info.driveManufacturer, image2Info.driveManufacturer).AppendLine();
sb.AppendFormat("Drive firmware revision\t{0}\t{1}", image1Info.driveFirmwareRevision, image2Info.driveFirmwareRevision).AppendLine();
sb.AppendFormat("Drive model\t{0}\t{1}", image1Info.driveModel, image2Info.driveModel).AppendLine(); sb.AppendFormat("Drive model\t{0}\t{1}", image1Info.driveModel, image2Info.driveModel).AppendLine();
sb.AppendFormat("Drive serial number\t{0}\t{1}", image1Info.driveSerialNumber, image2Info.driveSerialNumber).AppendLine(); sb.AppendFormat("Drive serial number\t{0}\t{1}", image1Info.driveSerialNumber, image2Info.driveSerialNumber).AppendLine();
foreach(MediaTagType disktag in Enum.GetValues(typeof(MediaTagType))) foreach(MediaTagType disktag in Enum.GetValues(typeof(MediaTagType)))
@@ -380,6 +383,12 @@ namespace DiscImageChef.Commands
if(!options.Verbose) if(!options.Verbose)
sb.AppendLine("Drive serial number differ"); sb.AppendLine("Drive serial number differ");
} }
if(image1Info.driveFirmwareRevision != image2Info.driveFirmwareRevision)
{
imagesDiffer = true;
if(!options.Verbose)
sb.AppendLine("Drive firmware revision differ");
}
ulong leastSectors; ulong leastSectors;
if(image1Info.sectors < image2Info.sectors) if(image1Info.sectors < image2Info.sectors)

View File

@@ -453,6 +453,10 @@ namespace DiscImageChef.Commands
case TrackSubchannelType.RawInterleaved: case TrackSubchannelType.RawInterleaved:
xmlTrk.SubChannel.Image.format = "rw_raw"; xmlTrk.SubChannel.Image.format = "rw_raw";
break; break;
case TrackSubchannelType.Q16:
case TrackSubchannelType.Q16Interleaved:
xmlTrk.SubChannel.Image.format = "q16";
break;
} }
if(trk.TrackFileOffset > 0) if(trk.TrackFileOffset > 0)
@@ -617,6 +621,24 @@ namespace DiscImageChef.Commands
sidecar.OpticalDisc[0].DiscSubType = dscSubType; sidecar.OpticalDisc[0].DiscSubType = dscSubType;
Core.Statistics.AddMedia(dskType, false); Core.Statistics.AddMedia(dskType, false);
if(!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveManufacturer) ||
!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveModel) ||
!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveFirmwareRevision) ||
!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveSerialNumber))
{
sidecar.OpticalDisc[0].DumpHardwareArray = new DumpHardwareType[1];
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents = new ExtentType[0];
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents[0].Start = 0;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents[0].End = (int)_imageFormat.ImageInfo.sectors;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Manufacturer = _imageFormat.ImageInfo.driveManufacturer;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Model = _imageFormat.ImageInfo.driveModel;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Firmware = _imageFormat.ImageInfo.driveFirmwareRevision;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Serial = _imageFormat.ImageInfo.driveSerialNumber;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software = new SoftwareType();
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software.Name = _imageFormat.GetImageApplication();
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software.Version = _imageFormat.GetImageApplicationVersion();
}
break; break;
} }
case XmlMediaType.BlockMedia: case XmlMediaType.BlockMedia: