Decode writable DVD media tags from image info in GUI.

This commit is contained in:
2018-10-07 18:51:19 +01:00
parent 6b67836021
commit 79fcc19cea
6 changed files with 487 additions and 300 deletions

View File

@@ -1618,6 +1618,8 @@
<e p="tabCompactDiscInfo.xeto.cs" t="Include" />
<e p="tabDvdInfo.xeto" t="Include" />
<e p="tabDvdInfo.xeto.cs" t="Include" />
<e p="tabDvdWritableInfo.xeto" t="Include" />
<e p="tabDvdWritableInfo.xeto.cs" t="Include" />
<e p="tabScsiInfo.xeto" t="Include" />
<e p="tabScsiInfo.xeto.cs" t="Include" />
</e>

View File

@@ -423,6 +423,85 @@ namespace DiscImageChef.Gui.Panels
tabDvdInfo.LoadData(imageFormat.Info.MediaType, dvdPfi, dvdDmi, dvdCmi, hddvdCopyrightInformation, dvdBca,
null, decodedPfi);
tabInfos.Pages.Add(tabDvdInfo);
byte[] dvdRamDds = null;
byte[] dvdRamCartridgeStatus = null;
byte[] dvdRamSpareArea = null;
byte[] lastBorderOutRmd = null;
byte[] dvdPreRecordedInfo = null;
byte[] dvdrMediaIdentifier = null;
byte[] dvdrPhysicalInformation = null;
byte[] hddvdrMediumStatus = null;
byte[] dvdrLayerCapacity = null;
byte[] dvdrDlMiddleZoneStart = null;
byte[] dvdrDlJumpIntervalSize = null;
byte[] dvdrDlManualLayerJumpStartLba = null;
byte[] dvdPlusAdip = null;
byte[] dvdPlusDcb = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_DDS))
dvdRamDds = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_DDS);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_MediumStatus))
dvdRamCartridgeStatus = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_MediumStatus);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_SpareArea))
dvdRamSpareArea = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_SpareArea);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_RMD))
lastBorderOutRmd = imageFormat.ReadDiskTag(MediaTagType.DVDR_RMD);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_PreRecordedInfo))
dvdPreRecordedInfo = imageFormat.ReadDiskTag(MediaTagType.DVDR_PreRecordedInfo);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_MediaIdentifier))
dvdrMediaIdentifier = imageFormat.ReadDiskTag(MediaTagType.DVDR_MediaIdentifier);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_PFI))
dvdrPhysicalInformation = imageFormat.ReadDiskTag(MediaTagType.DVDR_PFI);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.HDDVD_MediumStatus))
hddvdrMediumStatus = imageFormat.ReadDiskTag(MediaTagType.HDDVD_MediumStatus);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_LayerCapacity))
dvdrLayerCapacity = imageFormat.ReadDiskTag(MediaTagType.DVDDL_LayerCapacity);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_MiddleZoneAddress))
dvdrDlMiddleZoneStart = imageFormat.ReadDiskTag(MediaTagType.DVDDL_MiddleZoneAddress);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_JumpIntervalSize))
dvdrDlJumpIntervalSize = imageFormat.ReadDiskTag(MediaTagType.DVDDL_JumpIntervalSize);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_ManualLayerJumpLBA))
dvdrDlManualLayerJumpStartLba = imageFormat.ReadDiskTag(MediaTagType.DVDDL_ManualLayerJumpLBA);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_ADIP))
dvdPlusAdip = imageFormat.ReadDiskTag(MediaTagType.DVD_ADIP);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DCB))
dvdPlusDcb = imageFormat.ReadDiskTag(MediaTagType.DCB);
tabDvdWritableInfo tabDvdWritableInfo = new tabDvdWritableInfo();
tabDvdWritableInfo.LoadData(imageFormat.Info.MediaType, dvdRamDds, dvdRamCartridgeStatus, dvdRamSpareArea,
lastBorderOutRmd, dvdPreRecordedInfo, dvdrMediaIdentifier,
dvdrPhysicalInformation, hddvdrMediumStatus, null, dvdrLayerCapacity,
dvdrDlMiddleZoneStart, dvdrDlJumpIntervalSize, dvdrDlManualLayerJumpStartLba,
null, dvdPlusAdip, dvdPlusDcb);
tabInfos.Pages.Add(tabDvdWritableInfo);
}
#region XAML controls

View File

@@ -155,58 +155,6 @@
Visible="False"/>
</StackLayout>
</TabPage>
<TabPage ID="tabDvdr" Text="DVD-R(W)" Visible="False">
<StackLayout Orientation="Vertical">
<StackLayoutItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Expand="True">
<GroupBox ID="grpDvdRamDds" Text="Disc Definition Structure" Visible="False">
<TextArea ID="txtDvdRamDds" ReadOnly="True"/>
</GroupBox>
</StackLayoutItem>
<StackLayoutItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Expand="True">
<GroupBox ID="grpDvdRamCartridgeStatus" Text="Cartridge Status" Visible="False">
<TextArea ID="txtDvdRamCartridgeStatus" ReadOnly="True"/>
</GroupBox>
</StackLayoutItem>
<StackLayoutItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Expand="True">
<GroupBox ID="grpDvdRamSpareAreaInformation" Text="Spare Area Information" Visible="False">
<TextArea ID="txtDvdRamSpareAreaInformation" ReadOnly="True"/>
</GroupBox>
</StackLayoutItem>
<Button Click="OnBtnSaveDvdRamDdsClick" ID="btnSaveDvdRamDds"
Text="Save Disc Definition Structure" Visible="False"/>
<Button Click="OnBtnSaveDvdRamCartridgeStatusClick" ID="btnSaveDvdRamCartridgeStatus"
Text="Save Cartridge Status" Visible="False"/>
<Button Click="OnBtnSaveDvdRamSpareAreaInformationClick" ID="btnSaveDvdRamSpareAreaInformation"
Text="Save Spare Area Information" Visible="False"/>
<Button Click="OnBtnSaveLastBorderOutRmdClick" ID="btnSaveLastBorderOutRmd"
Text="Save Last Border-Out RMD" Visible="False"/>
<Button Click="OnBtnSaveDvdPreRecordedInfoClick" ID="btnSaveDvdPreRecordedInfo"
Text="Save Pre-Recorded Physical Information" Visible="False"/>
<Button Click="OnBtnSaveDvdrMediaIdentifierClick" ID="btnSaveDvdrMediaIdentifier"
Text="Save Media Identifier" Visible="False"/>
<Button Click="OnBtnSaveDvdrPhysicalInformationClick" ID="btnSaveDvdrPhysicalInformation"
Text="Save Recordable Physical Information" Visible="False"/>
<Button Click="OnBtnSaveHddvdrMediumStatusClick" ID="btnSaveHddvdrMediumStatus"
Text="Save Medium Status" Visible="False"/>
<Button Click="OnBtnSaveHddvdrLastRmdClick" ID="btnSaveHddvdrLastRmd"
Text="Save Last Border-Out RMD" Visible="False"/>
<Button Click="OnBtnSaveDvdrLayerCapacityClick" ID="btnSaveDvdrLayerCapacity"
Text="Save Layer Capacity" Visible="False"/>
<Button Click="OnBtnSaveDvdrDlMiddleZoneStartClick" ID="btnSaveDvdrDlMiddleZoneStart"
Text="Save Middle Zone Start" Visible="False"/>
<Button Click="OnBtnSaveDvdrDlJumpIntervalSizeClick" ID="btnSaveDvdrDlJumpIntervalSize"
Text="Save Jump Interval Size" Visible="False"/>
<Button Click="OnBtnSaveDvdrDlManualLayerJumpStartLbaClick"
ID="btnSaveDvdrDlManualLayerJumpStartLba" Text="Save Manual Layer Jump Start LBA"
Visible="False"/>
<Button Click="OnBtnSaveDvdrDlRemapAnchorPointClick" ID="btnSaveDvdrDlRemapAnchorPoint"
Text="Save Remap Anchor Point" Visible="False"/>
<Button Click="OnBtnSaveDvdPlusAdipClick" ID="btnSaveDvdPlusAdip" Text="Save ADIP"
Visible="False"/>
<Button Click="OnBtnSaveDvdPlusDcbClick" ID="btnSaveDvdPlusDcb" Text="Save Disc Control Blocks"
Visible="False"/>
</StackLayout>
</TabPage>
<TabPage ID="tabBluray" Text="Blu-ray" Visible="False">
<StackLayout Orientation="Vertical">
<StackLayoutItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Expand="True">

View File

@@ -45,10 +45,6 @@ using DiscImageChef.Gui.Tabs;
using Eto.Drawing;
using Eto.Forms;
using Eto.Serialization.Xaml;
using Cartridge = DiscImageChef.Decoders.DVD.Cartridge;
using DDS = DiscImageChef.Decoders.DVD.DDS;
using DMI = DiscImageChef.Decoders.Xbox.DMI;
using Spare = DiscImageChef.Decoders.DVD.Spare;
namespace DiscImageChef.Gui.Panels
{
@@ -80,52 +76,6 @@ namespace DiscImageChef.Gui.Panels
}
//}
switch(this.scsiInfo.MediaType)
{
case MediaType.DVDR:
tabDvdr.Text = "DVD-R";
break;
case MediaType.DVDRW:
tabDvdr.Text = "DVD-RW";
break;
case MediaType.DVDPR:
tabDvdr.Text = "DVD+R";
break;
case MediaType.DVDPRW:
tabDvdr.Text = "DVD+RW";
break;
case MediaType.DVDPRWDL:
tabDvdr.Text = "DVD+RW DL";
break;
case MediaType.DVDRDL:
tabDvdr.Text = "DVD-R DL";
break;
case MediaType.DVDPRDL:
tabDvdr.Text = "DVD+R DL";
break;
case MediaType.DVDRAM:
tabDvdr.Text = "DVD-RAM";
break;
case MediaType.DVDRWDL:
tabDvdr.Text = "DVD-RW DL";
break;
case MediaType.HDDVDRAM:
tabDvdr.Text = "HD DVD-RAM";
break;
case MediaType.HDDVDR:
tabDvdr.Text = "HD DVD-R";
break;
case MediaType.HDDVDRW:
tabDvdr.Text = "HD DVD-RW";
break;
case MediaType.HDDVDRDL:
tabDvdr.Text = "HD DVD-R DL";
break;
case MediaType.HDDVDRWDL:
tabDvdr.Text = "HD DVD-RW DL";
break;
}
txtType.Text = scsiInfo.MediaType.ToString();
lblMediaSize.Text =
$"Media has {scsiInfo.Blocks} blocks of {scsiInfo.BlockSize} bytes/each. (for a total of {scsiInfo.Blocks * scsiInfo.BlockSize} bytes)";
@@ -218,54 +168,16 @@ namespace DiscImageChef.Gui.Panels
tabXbox.Visible = stkXboxInformation.Visible || grpXboxDmi.Visible || grpXboxSs.Visible ||
btnSaveXboxSs.Visible;
if(this.scsiInfo.DvdRamDds != null)
{
grpDvdRamDds.Visible = true;
btnSaveDvdRamDds.Visible = true;
txtDvdRamDds.Text = DDS.Prettify(this.scsiInfo.DvdRamDds);
}
if(this.scsiInfo.DvdRamCartridgeStatus != null)
{
grpDvdRamCartridgeStatus.Visible = true;
btnSaveDvdRamCartridgeStatus.Visible = true;
txtDvdRamCartridgeStatus.Text = Cartridge.Prettify(this.scsiInfo.DvdRamCartridgeStatus);
}
if(this.scsiInfo.DvdRamSpareArea != null)
{
grpDvdRamSpareAreaInformation.Visible = true;
btnSaveDvdRamSpareAreaInformation.Visible = true;
txtDvdRamSpareAreaInformation.Text = Spare.Prettify(this.scsiInfo.DvdRamSpareArea);
}
btnSaveDvdRamDds.Visible = this.scsiInfo.DvdRamDds != null;
btnSaveDvdRamCartridgeStatus.Visible = this.scsiInfo.DvdRamCartridgeStatus != null;
btnSaveDvdRamSpareAreaInformation.Visible = this.scsiInfo.DvdRamSpareArea != null;
btnSaveLastBorderOutRmd.Visible = this.scsiInfo.LastBorderOutRmd != null;
btnSaveDvdPreRecordedInfo.Visible = this.scsiInfo.DvdPreRecordedInfo != null;
btnSaveDvdrMediaIdentifier.Visible = this.scsiInfo.DvdrMediaIdentifier != null;
btnSaveDvdrPhysicalInformation.Visible = this.scsiInfo.DvdrPhysicalInformation != null;
btnSaveHddvdrMediumStatus.Visible = this.scsiInfo.HddvdrMediumStatus != null;
btnSaveHddvdrLastRmd.Visible = this.scsiInfo.HddvdrLastRmd != null;
btnSaveDvdrLayerCapacity.Visible = this.scsiInfo.DvdrLayerCapacity != null;
btnSaveDvdrDlMiddleZoneStart.Visible = this.scsiInfo.DvdrDlMiddleZoneStart != null;
btnSaveDvdrDlJumpIntervalSize.Visible = this.scsiInfo.DvdrDlJumpIntervalSize != null;
btnSaveDvdrDlManualLayerJumpStartLba.Visible = this.scsiInfo.DvdrDlManualLayerJumpStartLba != null;
btnSaveDvdrDlRemapAnchorPoint.Visible = this.scsiInfo.DvdrDlRemapAnchorPoint != null;
btnSaveDvdPlusAdip.Visible = this.scsiInfo.DvdPlusAdip != null;
btnSaveDvdPlusDcb.Visible = this.scsiInfo.DvdPlusDcb != null;
tabDvdr.Visible = grpDvdRamDds.Visible || grpDvdRamCartridgeStatus.Visible ||
grpDvdRamSpareAreaInformation.Visible || btnSaveDvdRamDds.Visible ||
btnSaveDvdRamCartridgeStatus.Visible || btnSaveDvdRamSpareAreaInformation.Visible ||
btnSaveLastBorderOutRmd.Visible || btnSaveDvdPreRecordedInfo.Visible ||
btnSaveDvdrMediaIdentifier.Visible || btnSaveDvdrPhysicalInformation.Visible ||
btnSaveHddvdrMediumStatus.Visible || btnSaveHddvdrLastRmd.Visible ||
btnSaveDvdrLayerCapacity.Visible || btnSaveDvdrDlMiddleZoneStart.Visible ||
btnSaveDvdrDlJumpIntervalSize.Visible || btnSaveDvdrDlManualLayerJumpStartLba.Visible ||
btnSaveDvdrDlRemapAnchorPoint.Visible || btnSaveDvdPlusAdip.Visible ||
btnSaveDvdPlusDcb.Visible;
tabDvdWritableInfo tabDvdWritableInfo = new tabDvdWritableInfo();
tabDvdWritableInfo.LoadData(scsiInfo.MediaType, scsiInfo.DvdRamDds, scsiInfo.DvdRamCartridgeStatus,
scsiInfo.DvdRamSpareArea, scsiInfo.LastBorderOutRmd,
scsiInfo.DvdPreRecordedInfo, scsiInfo.DvdrMediaIdentifier,
scsiInfo.DvdrPhysicalInformation, scsiInfo.HddvdrMediumStatus,
scsiInfo.HddvdrLastRmd, scsiInfo.DvdrLayerCapacity,
scsiInfo.DvdrDlMiddleZoneStart, scsiInfo.DvdrDlJumpIntervalSize,
scsiInfo.DvdrDlManualLayerJumpStartLba, scsiInfo.DvdrDlRemapAnchorPoint,
scsiInfo.DvdPlusAdip, scsiInfo.DvdPlusDcb);
tabInfos.Pages.Add(tabDvdWritableInfo);
if(this.scsiInfo.BlurayDiscInformation != null)
{
@@ -285,23 +197,21 @@ namespace DiscImageChef.Gui.Panels
{
grpBlurayDds.Visible = true;
btnSaveBlurayDds.Visible = true;
txtBlurayDds.Text = Decoders.Bluray.DDS.Prettify(this.scsiInfo.BlurayDds);
txtBlurayDds.Text = DDS.Prettify(this.scsiInfo.BlurayDds);
}
if(this.scsiInfo.BlurayCartridgeStatus != null)
{
grpBlurayCartridgeStatus.Visible = true;
btnSaveBlurayCartridgeStatus.Visible = true;
txtBlurayCartridgeStatus.Text =
Decoders.Bluray.Cartridge.Prettify(this.scsiInfo.BlurayCartridgeStatus);
txtBlurayCartridgeStatus.Text = Cartridge.Prettify(this.scsiInfo.BlurayCartridgeStatus);
}
if(this.scsiInfo.BluraySpareAreaInformation != null)
{
grpBluraySpareAreaInformation.Visible = true;
btnSaveBluraySpareAreaInformation.Visible = true;
txtBluraySpareAreaInformation.Text =
Decoders.Bluray.Spare.Prettify(this.scsiInfo.BluraySpareAreaInformation);
txtBluraySpareAreaInformation.Text = Spare.Prettify(this.scsiInfo.BluraySpareAreaInformation);
}
if(this.scsiInfo.BlurayPowResources != null)
@@ -384,156 +294,11 @@ namespace DiscImageChef.Gui.Panels
SaveElement(scsiInfo.MediaTypeSupport);
}
protected void OnBtnCdInformationClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.CompactDiscInformation);
}
protected void OnBtnCdTocClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.Toc);
}
protected void OnBtnCdFullTocClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.RawToc);
}
protected void OnBtnCdSessionClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.Session);
}
protected void OnBtnCdTextClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.CdTextLeadIn);
}
protected void OnBtnCdAtipClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.Atip);
}
protected void OnBtnCdPmaClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.Pma);
}
protected void OnBtnSaveDvdPfiClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdPfi);
}
protected void OnBtnSaveDvdDmiClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdDmi);
}
protected void OnBtnSaveDvdCmiClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdCmi);
}
protected void OnBtnSaveHdDvdCmiClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.HddvdCopyrightInformation);
}
protected void OnBtnSaveDvdBcaClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdBca);
}
protected void OnBtnSaveDvdAacsClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdAacs);
}
protected void OnBtnSaveXboxSsClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.XboxSecuritySector);
}
protected void OnBtnSaveDvdRamDdsClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdRamDds);
}
protected void OnBtnSaveDvdRamCartridgeStatusClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdRamCartridgeStatus);
}
protected void OnBtnSaveDvdRamSpareAreaInformationClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdRamSpareArea);
}
protected void OnBtnSaveLastBorderOutRmdClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.LastBorderOutRmd);
}
protected void OnBtnSaveDvdPreRecordedInfoClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdPreRecordedInfo);
}
protected void OnBtnSaveDvdrMediaIdentifierClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdrMediaIdentifier);
}
protected void OnBtnSaveDvdrPhysicalInformationClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdrPhysicalInformation);
}
protected void OnBtnSaveHddvdrMediumStatusClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.HddvdrMediumStatus);
}
protected void OnBtnSaveHddvdrLastRmdClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.HddvdrLastRmd);
}
protected void OnBtnSaveDvdrLayerCapacityClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdrLayerCapacity);
}
protected void OnBtnSaveDvdrDlMiddleZoneStartClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdrDlMiddleZoneStart);
}
protected void OnBtnSaveDvdrDlJumpIntervalSizeClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdrDlJumpIntervalSize);
}
protected void OnBtnSaveDvdrDlManualLayerJumpStartLbaClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdrDlManualLayerJumpStartLba);
}
protected void OnBtnSaveDvdrDlRemapAnchorPointClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdrDlRemapAnchorPoint);
}
protected void OnBtnSaveDvdPlusAdipClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdPlusAdip);
}
protected void OnBtnSaveDvdPlusDcbClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.DvdPlusDcb);
}
protected void OnBtnSaveBlurayDiscInformationClick(object sender, EventArgs e)
{
SaveElement(scsiInfo.BlurayDiscInformation);

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?><!--
// /***************************************************************************
// The Disc Image Chef
// ============================================================================
//
// Filename : pnlScsiInfo.xeto
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : SCSI media information panel.
//
// ==[ Description ] ==========================================================
//
// Defines the structure for the SCSI media information panel.
//
// ==[ License ] ==============================================================
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 General public License for more details.
//
// You should have received a copy of the GNU General public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ============================================================================
// Copyright © 2011-2018 Natalia Portillo
// ****************************************************************************/
-->
<TabPage Text="DVD-R(W)" Visible="False" xmlns="http://schema.picoe.ca/eto.forms"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackLayout Orientation="Vertical">
<StackLayoutItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Expand="True">
<GroupBox ID="grpDvdRamDds" Text="Disc Definition Structure" Visible="False">
<TextArea ID="txtDvdRamDds" ReadOnly="True"/>
</GroupBox>
</StackLayoutItem>
<StackLayoutItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Expand="True">
<GroupBox ID="grpDvdRamCartridgeStatus" Text="Cartridge Status" Visible="False">
<TextArea ID="txtDvdRamCartridgeStatus" ReadOnly="True"/>
</GroupBox>
</StackLayoutItem>
<StackLayoutItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Expand="True">
<GroupBox ID="grpDvdRamSpareAreaInformation" Text="Spare Area Information" Visible="False">
<TextArea ID="txtDvdRamSpareAreaInformation" ReadOnly="True"/>
</GroupBox>
</StackLayoutItem>
<Button Click="OnBtnSaveDvdRamDdsClick" ID="btnSaveDvdRamDds" Text="Save Disc Definition Structure"
Visible="False"/>
<Button Click="OnBtnSaveDvdRamCartridgeStatusClick" ID="btnSaveDvdRamCartridgeStatus"
Text="Save Cartridge Status" Visible="False"/>
<Button Click="OnBtnSaveDvdRamSpareAreaInformationClick" ID="btnSaveDvdRamSpareAreaInformation"
Text="Save Spare Area Information" Visible="False"/>
<Button Click="OnBtnSaveLastBorderOutRmdClick" ID="btnSaveLastBorderOutRmd" Text="Save Last Border-Out RMD"
Visible="False"/>
<Button Click="OnBtnSaveDvdPreRecordedInfoClick" ID="btnSaveDvdPreRecordedInfo"
Text="Save Pre-Recorded Physical Information" Visible="False"/>
<Button Click="OnBtnSaveDvdrMediaIdentifierClick" ID="btnSaveDvdrMediaIdentifier" Text="Save Media Identifier"
Visible="False"/>
<Button Click="OnBtnSaveDvdrPhysicalInformationClick" ID="btnSaveDvdrPhysicalInformation"
Text="Save Recordable Physical Information" Visible="False"/>
<Button Click="OnBtnSaveHddvdrMediumStatusClick" ID="btnSaveHddvdrMediumStatus" Text="Save Medium Status"
Visible="False"/>
<Button Click="OnBtnSaveHddvdrLastRmdClick" ID="btnSaveHddvdrLastRmd" Text="Save Last Border-Out RMD"
Visible="False"/>
<Button Click="OnBtnSaveDvdrLayerCapacityClick" ID="btnSaveDvdrLayerCapacity" Text="Save Layer Capacity"
Visible="False"/>
<Button Click="OnBtnSaveDvdrDlMiddleZoneStartClick" ID="btnSaveDvdrDlMiddleZoneStart"
Text="Save Middle Zone Start" Visible="False"/>
<Button Click="OnBtnSaveDvdrDlJumpIntervalSizeClick" ID="btnSaveDvdrDlJumpIntervalSize"
Text="Save Jump Interval Size" Visible="False"/>
<Button Click="OnBtnSaveDvdrDlManualLayerJumpStartLbaClick" ID="btnSaveDvdrDlManualLayerJumpStartLba"
Text="Save Manual Layer Jump Start LBA" Visible="False"/>
<Button Click="OnBtnSaveDvdrDlRemapAnchorPointClick" ID="btnSaveDvdrDlRemapAnchorPoint"
Text="Save Remap Anchor Point" Visible="False"/>
<Button Click="OnBtnSaveDvdPlusAdipClick" ID="btnSaveDvdPlusAdip" Text="Save ADIP" Visible="False"/>
<Button Click="OnBtnSaveDvdPlusDcbClick" ID="btnSaveDvdPlusDcb" Text="Save Disc Control Blocks"
Visible="False"/>
</StackLayout>
</TabPage>

View File

@@ -0,0 +1,309 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : pnlxeto.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : SCSI media information panel.
//
// --[ Description ] ----------------------------------------------------------
//
// Implements the SCSI media information panel.
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 General public License for more details.
//
// You should have received a copy of the GNU General public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2018 Natalia Portillo
// ****************************************************************************/
using System;
using System.IO;
using DiscImageChef.CommonTypes;
using DiscImageChef.Decoders.DVD;
using Eto.Forms;
using Eto.Serialization.Xaml;
namespace DiscImageChef.Gui.Tabs
{
public class tabDvdWritableInfo : TabPage
{
byte[] dvdLastBorderOutRmd;
byte[] dvdPlusAdip;
byte[] dvdPlusDcb;
byte[] dvdPreRecordedInfo;
byte[] dvdRamCartridgeStatus;
byte[] dvdRamDds;
byte[] dvdRamSpareArea;
byte[] dvdrDlJumpIntervalSize;
byte[] dvdrDlManualLayerJumpStartLba;
byte[] dvdrDlMiddleZoneStart;
byte[] dvdrDlRemapAnchorPoint;
byte[] dvdrLayerCapacity;
byte[] dvdrMediaIdentifier;
byte[] dvdrPhysicalInformation;
byte[] hddvdrLastRmd;
byte[] hddvdrMediumStatus;
public tabDvdWritableInfo()
{
XamlReader.Load(this);
}
internal void LoadData(MediaType mediaType, byte[] dds, byte[] cartridgeStatus,
byte[] spareArea,
byte[] lastBorderOutRmd, byte[] preRecordedInfo, byte[] mediaIdentifier,
byte[] physicalInformation, byte[] mediumStatus, byte[] hdLastRmd,
byte[] layerCapacity,
byte[] middleZoneStart, byte[] jumpIntervalSize, byte[] manualLayerJumpStartLba,
byte[] remapAnchorPoint, byte[] adip, byte[] dcb)
{
dvdRamDds = dds;
dvdRamCartridgeStatus = cartridgeStatus;
dvdRamSpareArea = spareArea;
dvdLastBorderOutRmd = lastBorderOutRmd;
dvdPreRecordedInfo = preRecordedInfo;
dvdrMediaIdentifier = mediaIdentifier;
dvdrPhysicalInformation = physicalInformation;
hddvdrMediumStatus = mediumStatus;
hddvdrLastRmd = hdLastRmd;
dvdrLayerCapacity = layerCapacity;
dvdrDlMiddleZoneStart = middleZoneStart;
dvdrDlJumpIntervalSize = jumpIntervalSize;
dvdrDlManualLayerJumpStartLba = manualLayerJumpStartLba;
dvdrDlRemapAnchorPoint = remapAnchorPoint;
dvdPlusAdip = adip;
dvdPlusDcb = dcb;
switch(mediaType)
{
case MediaType.DVDR:
Text = "DVD-R";
break;
case MediaType.DVDRW:
Text = "DVD-RW";
break;
case MediaType.DVDPR:
Text = "DVD+R";
break;
case MediaType.DVDPRW:
Text = "DVD+RW";
break;
case MediaType.DVDPRWDL:
Text = "DVD+RW DL";
break;
case MediaType.DVDRDL:
Text = "DVD-R DL";
break;
case MediaType.DVDPRDL:
Text = "DVD+R DL";
break;
case MediaType.DVDRAM:
Text = "DVD-RAM";
break;
case MediaType.DVDRWDL:
Text = "DVD-RW DL";
break;
case MediaType.HDDVDRAM:
Text = "HD DVD-RAM";
break;
case MediaType.HDDVDR:
Text = "HD DVD-R";
break;
case MediaType.HDDVDRW:
Text = "HD DVD-RW";
break;
case MediaType.HDDVDRDL:
Text = "HD DVD-R DL";
break;
case MediaType.HDDVDRWDL:
Text = "HD DVD-RW DL";
break;
}
if(dds != null)
{
grpDvdRamDds.Visible = true;
btnSaveDvdRamDds.Visible = true;
txtDvdRamDds.Text = DDS.Prettify(dds);
}
if(cartridgeStatus != null)
{
grpDvdRamCartridgeStatus.Visible = true;
btnSaveDvdRamCartridgeStatus.Visible = true;
txtDvdRamCartridgeStatus.Text = Cartridge.Prettify(cartridgeStatus);
}
if(spareArea != null)
{
grpDvdRamSpareAreaInformation.Visible = true;
btnSaveDvdRamSpareAreaInformation.Visible = true;
txtDvdRamSpareAreaInformation.Text = Spare.Prettify(spareArea);
}
btnSaveDvdRamDds.Visible = dds != null;
btnSaveDvdRamCartridgeStatus.Visible = cartridgeStatus != null;
btnSaveDvdRamSpareAreaInformation.Visible = spareArea != null;
btnSaveLastBorderOutRmd.Visible = lastBorderOutRmd != null;
btnSaveDvdPreRecordedInfo.Visible = preRecordedInfo != null;
btnSaveDvdrMediaIdentifier.Visible = mediaIdentifier != null;
btnSaveDvdrPhysicalInformation.Visible = physicalInformation != null;
btnSaveHddvdrMediumStatus.Visible = mediumStatus != null;
btnSaveHddvdrLastRmd.Visible = hdLastRmd != null;
btnSaveDvdrLayerCapacity.Visible = layerCapacity != null;
btnSaveDvdrDlMiddleZoneStart.Visible = middleZoneStart != null;
btnSaveDvdrDlJumpIntervalSize.Visible = jumpIntervalSize != null;
btnSaveDvdrDlManualLayerJumpStartLba.Visible = manualLayerJumpStartLba != null;
btnSaveDvdrDlRemapAnchorPoint.Visible = remapAnchorPoint != null;
btnSaveDvdPlusAdip.Visible = adip != null;
btnSaveDvdPlusDcb.Visible = dcb != null;
Visible = grpDvdRamDds.Visible || grpDvdRamCartridgeStatus.Visible ||
grpDvdRamSpareAreaInformation.Visible || btnSaveDvdRamDds.Visible ||
btnSaveDvdRamCartridgeStatus.Visible || btnSaveDvdRamSpareAreaInformation.Visible ||
btnSaveLastBorderOutRmd.Visible || btnSaveDvdPreRecordedInfo.Visible ||
btnSaveDvdrMediaIdentifier.Visible || btnSaveDvdrPhysicalInformation.Visible ||
btnSaveHddvdrMediumStatus.Visible || btnSaveHddvdrLastRmd.Visible ||
btnSaveDvdrLayerCapacity.Visible || btnSaveDvdrDlMiddleZoneStart.Visible ||
btnSaveDvdrDlJumpIntervalSize.Visible || btnSaveDvdrDlManualLayerJumpStartLba.Visible ||
btnSaveDvdrDlRemapAnchorPoint.Visible || btnSaveDvdPlusAdip.Visible ||
btnSaveDvdPlusDcb.Visible;
}
void SaveElement(byte[] data)
{
SaveFileDialog dlgSaveBinary = new SaveFileDialog();
dlgSaveBinary.Filters.Add(new FileFilter {Extensions = new[] {"*.bin"}, Name = "Binary"});
DialogResult result = dlgSaveBinary.ShowDialog(this);
if(result != DialogResult.Ok) return;
FileStream saveFs = new FileStream(dlgSaveBinary.FileName, FileMode.Create);
saveFs.Write(data, 0, data.Length);
saveFs.Close();
}
protected void OnBtnSaveDvdRamDdsClick(object sender, EventArgs e)
{
SaveElement(dvdRamDds);
}
protected void OnBtnSaveDvdRamCartridgeStatusClick(object sender, EventArgs e)
{
SaveElement(dvdRamCartridgeStatus);
}
protected void OnBtnSaveDvdRamSpareAreaInformationClick(object sender, EventArgs e)
{
SaveElement(dvdRamSpareArea);
}
protected void OnBtnSaveLastBorderOutRmdClick(object sender, EventArgs e)
{
SaveElement(dvdLastBorderOutRmd);
}
protected void OnBtnSaveDvdPreRecordedInfoClick(object sender, EventArgs e)
{
SaveElement(dvdPreRecordedInfo);
}
protected void OnBtnSaveDvdrMediaIdentifierClick(object sender, EventArgs e)
{
SaveElement(dvdrMediaIdentifier);
}
protected void OnBtnSaveDvdrPhysicalInformationClick(object sender, EventArgs e)
{
SaveElement(dvdrPhysicalInformation);
}
protected void OnBtnSaveHddvdrMediumStatusClick(object sender, EventArgs e)
{
SaveElement(hddvdrMediumStatus);
}
protected void OnBtnSaveHddvdrLastRmdClick(object sender, EventArgs e)
{
SaveElement(hddvdrLastRmd);
}
protected void OnBtnSaveDvdrLayerCapacityClick(object sender, EventArgs e)
{
SaveElement(dvdrLayerCapacity);
}
protected void OnBtnSaveDvdrDlMiddleZoneStartClick(object sender, EventArgs e)
{
SaveElement(dvdrDlMiddleZoneStart);
}
protected void OnBtnSaveDvdrDlJumpIntervalSizeClick(object sender, EventArgs e)
{
SaveElement(dvdrDlJumpIntervalSize);
}
protected void OnBtnSaveDvdrDlManualLayerJumpStartLbaClick(object sender, EventArgs e)
{
SaveElement(dvdrDlManualLayerJumpStartLba);
}
protected void OnBtnSaveDvdrDlRemapAnchorPointClick(object sender, EventArgs e)
{
SaveElement(dvdrDlRemapAnchorPoint);
}
protected void OnBtnSaveDvdPlusAdipClick(object sender, EventArgs e)
{
SaveElement(dvdPlusAdip);
}
protected void OnBtnSaveDvdPlusDcbClick(object sender, EventArgs e)
{
SaveElement(dvdPlusDcb);
}
#region XAML controls
#pragma warning disable 169
#pragma warning disable 649
GroupBox grpDvdRamDds;
TextArea txtDvdRamDds;
GroupBox grpDvdRamCartridgeStatus;
TextArea txtDvdRamCartridgeStatus;
GroupBox grpDvdRamSpareAreaInformation;
TextArea txtDvdRamSpareAreaInformation;
Button btnSaveDvdRamDds;
Button btnSaveDvdRamCartridgeStatus;
Button btnSaveDvdRamSpareAreaInformation;
Button btnSaveLastBorderOutRmd;
Button btnSaveDvdPreRecordedInfo;
Button btnSaveDvdrMediaIdentifier;
Button btnSaveDvdrPhysicalInformation;
Button btnSaveHddvdrMediumStatus;
Button btnSaveHddvdrLastRmd;
Button btnSaveDvdrLayerCapacity;
Button btnSaveDvdrDlMiddleZoneStart;
Button btnSaveDvdrDlJumpIntervalSize;
Button btnSaveDvdrDlManualLayerJumpStartLba;
Button btnSaveDvdrDlRemapAnchorPoint;
Button btnSaveDvdPlusAdip;
Button btnSaveDvdPlusDcb;
#pragma warning restore 169
#pragma warning restore 649
#endregion
}
}