Remove the ability to support little endian from BigEndianBitConverter.

This commit is contained in:
2019-05-11 20:49:32 +01:00
parent e4c2890552
commit 71cb591368
16 changed files with 159 additions and 163 deletions

View File

@@ -70,14 +70,14 @@ namespace DiscImageChef.Decoders.Bluray
return null; return null;
} }
BurstCuttingArea decoded = new BurstCuttingArea(); BurstCuttingArea decoded = new BurstCuttingArea
{
DataLength = BigEndianBitConverter.ToUInt16(BCAResponse, 0),
Reserved1 = BCAResponse[2],
Reserved2 = BCAResponse[3],
BCA = new byte[64]
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(BCAResponse, 0);
decoded.Reserved1 = BCAResponse[2];
decoded.Reserved2 = BCAResponse[3];
decoded.BCA = new byte[64];
Array.Copy(BCAResponse, 4, decoded.BCA, 0, 64); Array.Copy(BCAResponse, 4, decoded.BCA, 0, 64);
return decoded; return decoded;

View File

@@ -72,21 +72,20 @@ namespace DiscImageChef.Decoders.Bluray
return null; return null;
} }
CartridgeStatus decoded = new CartridgeStatus(); CartridgeStatus decoded = new CartridgeStatus
{
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; DataLength = BigEndianBitConverter.ToUInt16(CSResponse, 0),
Reserved1 = CSResponse[2],
decoded.DataLength = BigEndianBitConverter.ToUInt16(CSResponse, 0); Reserved2 = CSResponse[3],
decoded.Reserved1 = CSResponse[2]; Cartridge = Convert.ToBoolean(CSResponse[4] & 0x80),
decoded.Reserved2 = CSResponse[3]; OUT = Convert.ToBoolean(CSResponse[4] & 0x40),
decoded.Cartridge = Convert.ToBoolean(CSResponse[4] & 0x80); Reserved3 = (byte)((CSResponse[4] & 0x38) >> 3),
decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x40); CWP = Convert.ToBoolean(CSResponse[4] & 0x04),
decoded.Reserved3 = (byte)((CSResponse[4] & 0x38) >> 3); Reserved4 = (byte)(CSResponse[4] & 0x03),
decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x04); Reserved5 = CSResponse[5],
decoded.Reserved4 = (byte)(CSResponse[4] & 0x03); Reserved6 = CSResponse[6],
decoded.Reserved5 = CSResponse[5]; Reserved7 = CSResponse[7]
decoded.Reserved6 = CSResponse[6]; };
decoded.Reserved7 = CSResponse[7];
return decoded; return decoded;
} }

View File

@@ -70,14 +70,14 @@ namespace DiscImageChef.Decoders.Bluray
{ {
if(DDSResponse == null) return null; if(DDSResponse == null) return null;
DiscDefinitionStructure decoded = new DiscDefinitionStructure(); DiscDefinitionStructure decoded = new DiscDefinitionStructure
{
DataLength = BigEndianBitConverter.ToUInt16(DDSResponse, 0),
Reserved1 = DDSResponse[2],
Reserved2 = DDSResponse[3],
Signature = BigEndianBitConverter.ToUInt16(DDSResponse, 4)
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(DDSResponse, 0);
decoded.Reserved1 = DDSResponse[2];
decoded.Reserved2 = DDSResponse[3];
decoded.Signature = BigEndianBitConverter.ToUInt16(DDSResponse, 4);
if(decoded.Signature != DDSIdentifier) if(decoded.Signature != DDSIdentifier)
{ {
DicConsole.DebugWriteLine("BD DDS decoder", "Found incorrect DDS signature (0x{0:X4})", DicConsole.DebugWriteLine("BD DDS decoder", "Found incorrect DDS signature (0x{0:X4})",

View File

@@ -83,13 +83,12 @@ namespace DiscImageChef.Decoders.Bluray
return null; return null;
} }
DiscInformation decoded = new DiscInformation(); DiscInformation decoded = new DiscInformation
{
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; DataLength = BigEndianBitConverter.ToUInt16(DIResponse, 0),
Reserved1 = DIResponse[2],
decoded.DataLength = BigEndianBitConverter.ToUInt16(DIResponse, 0); Reserved2 = DIResponse[3]
decoded.Reserved1 = DIResponse[2]; };
decoded.Reserved2 = DIResponse[3];
int offset = 4; int offset = 4;
List<DiscInformationUnits> units = new List<DiscInformationUnits>(); List<DiscInformationUnits> units = new List<DiscInformationUnits>();
@@ -141,6 +140,7 @@ namespace DiscImageChef.Decoders.Bluray
Array.Copy(DIResponse, 32 + offset, unit.FormatDependentContents, 0, 32); Array.Copy(DIResponse, 32 + offset, unit.FormatDependentContents, 0, 32);
break; break;
} }
case DiscTypeBDRE: case DiscTypeBDRE:
case DiscTypeBDR: case DiscTypeBDR:
{ {
@@ -156,6 +156,7 @@ namespace DiscImageChef.Decoders.Bluray
offset += 14; offset += 14;
break; break;
} }
default: default:
{ {
DicConsole.DebugWriteLine("BD Disc Information decoder", DicConsole.DebugWriteLine("BD Disc Information decoder",

View File

@@ -30,7 +30,6 @@
// Copyright © 2011-2019 Natalia Portillo // Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/ // ****************************************************************************/
using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Text; using System.Text;
using DiscImageChef.Console; using DiscImageChef.Console;
@@ -71,16 +70,15 @@ namespace DiscImageChef.Decoders.Bluray
return null; return null;
} }
SpareAreaInformation decoded = new SpareAreaInformation(); SpareAreaInformation decoded = new SpareAreaInformation
{
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; DataLength = BigEndianBitConverter.ToUInt16(SAIResponse, 0),
Reserved1 = SAIResponse[2],
decoded.DataLength = BigEndianBitConverter.ToUInt16(SAIResponse, 0); Reserved2 = SAIResponse[3],
decoded.Reserved1 = SAIResponse[2]; Reserved3 = BigEndianBitConverter.ToUInt32(SAIResponse, 4),
decoded.Reserved2 = SAIResponse[3]; FreeSpareBlocks = BigEndianBitConverter.ToUInt32(SAIResponse, 8),
decoded.Reserved3 = BigEndianBitConverter.ToUInt32(SAIResponse, 4); AllocatedSpareBlocks = BigEndianBitConverter.ToUInt32(SAIResponse, 12)
decoded.FreeSpareBlocks = BigEndianBitConverter.ToUInt32(SAIResponse, 8); };
decoded.AllocatedSpareBlocks = BigEndianBitConverter.ToUInt32(SAIResponse, 12);
return decoded; return decoded;
} }

View File

@@ -228,8 +228,6 @@ namespace DiscImageChef.Decoders.CD
CDATIP decoded = new CDATIP(); CDATIP decoded = new CDATIP();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
if(CDATIPResponse.Length != 32 && CDATIPResponse.Length != 28) if(CDATIPResponse.Length != 32 && CDATIPResponse.Length != 28)
{ {
DicConsole.DebugWriteLine("CD ATIP decoder", DicConsole.DebugWriteLine("CD ATIP decoder",

View File

@@ -194,14 +194,14 @@ namespace DiscImageChef.Decoders.CD
{ {
if(CDTextResponse == null) return null; if(CDTextResponse == null) return null;
CDText decoded = new CDText(); CDText decoded = new CDText
{
DataLength = BigEndianBitConverter.ToUInt16(CDTextResponse, 0),
Reserved1 = CDTextResponse[2],
Reserved2 = CDTextResponse[3]
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; decoded.DataPacks = new CDTextPack[(decoded.DataLength - 2) / 18];
decoded.DataLength = BigEndianBitConverter.ToUInt16(CDTextResponse, 0);
decoded.Reserved1 = CDTextResponse[2];
decoded.Reserved2 = CDTextResponse[3];
decoded.DataPacks = new CDTextPack[(decoded.DataLength - 2) / 18];
if(decoded.DataLength == 2) return null; if(decoded.DataLength == 2) return null;
@@ -260,6 +260,7 @@ namespace DiscImageChef.Decoders.CD
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine(); else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
break; break;
} }
case 0x81: case 0x81:
{ {
sb.Append("CD-Text pack contains performer for "); sb.Append("CD-Text pack contains performer for ");
@@ -267,6 +268,7 @@ namespace DiscImageChef.Decoders.CD
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine(); else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
break; break;
} }
case 0x82: case 0x82:
{ {
sb.Append("CD-Text pack contains songwriter for "); sb.Append("CD-Text pack contains songwriter for ");
@@ -274,12 +276,14 @@ namespace DiscImageChef.Decoders.CD
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine(); else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
break; break;
} }
case 0x83: case 0x83:
{ {
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album"); if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album");
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine(); else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
break; break;
} }
case 0x84: case 0x84:
{ {
sb.Append("CD-Text pack contains arranger for "); sb.Append("CD-Text pack contains arranger for ");
@@ -287,6 +291,7 @@ namespace DiscImageChef.Decoders.CD
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine(); else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
break; break;
} }
case 0x85: case 0x85:
{ {
sb.Append("CD-Text pack contains content provider's message for "); sb.Append("CD-Text pack contains content provider's message for ");
@@ -294,26 +299,31 @@ namespace DiscImageChef.Decoders.CD
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine(); else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
break; break;
} }
case 0x86: case 0x86:
{ {
sb.AppendLine("CD-Text pack contains disc identification information"); sb.AppendLine("CD-Text pack contains disc identification information");
break; break;
} }
case 0x87: case 0x87:
{ {
sb.AppendLine("CD-Text pack contains genre identification information"); sb.AppendLine("CD-Text pack contains genre identification information");
break; break;
} }
case 0x88: case 0x88:
{ {
sb.AppendLine("CD-Text pack contains table of contents information"); sb.AppendLine("CD-Text pack contains table of contents information");
break; break;
} }
case 0x89: case 0x89:
{ {
sb.AppendLine("CD-Text pack contains second table of contents information"); sb.AppendLine("CD-Text pack contains second table of contents information");
break; break;
} }
case 0x8A: case 0x8A:
case 0x8B: case 0x8B:
case 0x8C: case 0x8C:
@@ -321,17 +331,20 @@ namespace DiscImageChef.Decoders.CD
sb.AppendLine("CD-Text pack contains reserved data"); sb.AppendLine("CD-Text pack contains reserved data");
break; break;
} }
case 0x8D: case 0x8D:
{ {
sb.AppendLine("CD-Text pack contains data reserved for content provider only"); sb.AppendLine("CD-Text pack contains data reserved for content provider only");
break; break;
} }
case 0x8E: case 0x8E:
{ {
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("CD-Text pack contains UPC"); if(descriptor.HeaderID2 == 0x00) sb.AppendLine("CD-Text pack contains UPC");
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine(); else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
break; break;
} }
case 0x8F: case 0x8F:
{ {
sb.AppendLine("CD-Text pack contains size block information"); sb.AppendLine("CD-Text pack contains size block information");
@@ -359,6 +372,7 @@ namespace DiscImageChef.Decoders.CD
Encoding.GetEncoding("iso-8859-1"))).AppendLine(); Encoding.GetEncoding("iso-8859-1"))).AppendLine();
break; break;
} }
default: default:
{ {
sb.AppendFormat("Binary contents: {0}", sb.AppendFormat("Binary contents: {0}",

View File

@@ -30,7 +30,6 @@
// Copyright © 2011-2019 Natalia Portillo // Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/ // ****************************************************************************/
using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Text; using System.Text;
using DiscImageChef.Console; using DiscImageChef.Console;
@@ -153,14 +152,14 @@ namespace DiscImageChef.Decoders.CD
{ {
if(CDFullTOCResponse == null) return null; if(CDFullTOCResponse == null) return null;
CDFullTOC decoded = new CDFullTOC(); CDFullTOC decoded = new CDFullTOC
{
DataLength = BigEndianBitConverter.ToUInt16(CDFullTOCResponse, 0),
FirstCompleteSession = CDFullTOCResponse[2],
LastCompleteSession = CDFullTOCResponse[3]
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; decoded.TrackDescriptors = new TrackDataDescriptor[(decoded.DataLength - 2) / 11];
decoded.DataLength = BigEndianBitConverter.ToUInt16(CDFullTOCResponse, 0);
decoded.FirstCompleteSession = CDFullTOCResponse[2];
decoded.LastCompleteSession = CDFullTOCResponse[3];
decoded.TrackDescriptors = new TrackDataDescriptor[(decoded.DataLength - 2) / 11];
if(decoded.DataLength + 2 != CDFullTOCResponse.Length) if(decoded.DataLength + 2 != CDFullTOCResponse.Length)
{ {
@@ -271,6 +270,7 @@ namespace DiscImageChef.Decoders.CD
break; break;
} }
case 0xA0 when descriptor.ADR == 1: case 0xA0 when descriptor.ADR == 1:
{ {
sb.AppendFormat("First track number: {0} (", descriptor.PMIN); sb.AppendFormat("First track number: {0} (", descriptor.PMIN);
@@ -301,6 +301,7 @@ namespace DiscImageChef.Decoders.CD
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine(); //sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
break; break;
} }
case 0xA1 when descriptor.ADR == 4: case 0xA1 when descriptor.ADR == 4:
sb.AppendFormat("Last video track number: {0}", descriptor.PMIN).AppendLine(); sb.AppendFormat("Last video track number: {0}", descriptor.PMIN).AppendLine();
break; break;
@@ -333,6 +334,7 @@ namespace DiscImageChef.Decoders.CD
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine(); //sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
break; break;
} }
case 0xA2: case 0xA2:
{ {
if(descriptor.PHOUR > 0) if(descriptor.PHOUR > 0)
@@ -361,6 +363,7 @@ namespace DiscImageChef.Decoders.CD
break; break;
} }
case 0xF0: case 0xF0:
{ {
sb.AppendFormat("Book type: 0x{0:X2}", descriptor.PMIN); sb.AppendFormat("Book type: 0x{0:X2}", descriptor.PMIN);
@@ -374,6 +377,7 @@ namespace DiscImageChef.Decoders.CD
descriptor.Sec, descriptor.Frame).AppendLine(); descriptor.Sec, descriptor.Frame).AppendLine();
break; break;
} }
default: default:
{ {
if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x63) if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x63)
@@ -444,6 +448,7 @@ namespace DiscImageChef.Decoders.CD
break; break;
} }
case 5: case 5:
{ {
switch(descriptor.POINT) switch(descriptor.POINT)
@@ -474,6 +479,7 @@ namespace DiscImageChef.Decoders.CD
break; break;
} }
case 0xB1: case 0xB1:
{ {
sb.AppendFormat("Number of skip interval pointers: {0}", descriptor.PMIN) sb.AppendFormat("Number of skip interval pointers: {0}", descriptor.PMIN)
@@ -481,6 +487,7 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("Number of skip track pointers: {0}", descriptor.PSEC).AppendLine(); sb.AppendFormat("Number of skip track pointers: {0}", descriptor.PSEC).AppendLine();
break; break;
} }
case 0xB2: case 0xB2:
case 0xB3: case 0xB3:
case 0xB4: case 0xB4:
@@ -494,6 +501,7 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("Skip track {0}", descriptor.PFRAME).AppendLine(); sb.AppendFormat("Skip track {0}", descriptor.PFRAME).AppendLine();
break; break;
} }
case 0xC0: case 0xC0:
{ {
sb.AppendFormat("Optimum recording power: 0x{0:X2}", descriptor.Min).AppendLine(); sb.AppendFormat("Optimum recording power: 0x{0:X2}", descriptor.Min).AppendLine();
@@ -509,6 +517,7 @@ namespace DiscImageChef.Decoders.CD
.AppendLine(); .AppendLine();
break; break;
} }
case 0xC1: case 0xC1:
{ {
sb.AppendFormat("Copy of information of A1 from ATIP found"); sb.AppendFormat("Copy of information of A1 from ATIP found");
@@ -521,6 +530,7 @@ namespace DiscImageChef.Decoders.CD
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine(); sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
break; break;
} }
case 0xCF: case 0xCF:
{ {
if(descriptor.PHOUR > 0) if(descriptor.PHOUR > 0)
@@ -547,6 +557,7 @@ namespace DiscImageChef.Decoders.CD
break; break;
} }
default: default:
{ {
if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x40) if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x40)
@@ -581,6 +592,7 @@ namespace DiscImageChef.Decoders.CD
break; break;
} }
case 6: case 6:
{ {
uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame); uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame);

View File

@@ -30,7 +30,6 @@
// Copyright © 2011-2019 Natalia Portillo // Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/ // ****************************************************************************/
using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Text; using System.Text;
using DiscImageChef.Console; using DiscImageChef.Console;
@@ -140,13 +139,13 @@ namespace DiscImageChef.Decoders.CD
{ {
if(CDPMAResponse == null) return null; if(CDPMAResponse == null) return null;
CDPMA decoded = new CDPMA(); CDPMA decoded = new CDPMA
{
DataLength = BigEndianBitConverter.ToUInt16(CDPMAResponse, 0),
Reserved1 = CDPMAResponse[2],
Reserved2 = CDPMAResponse[3]
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(CDPMAResponse, 0);
decoded.Reserved1 = CDPMAResponse[2];
decoded.Reserved2 = CDPMAResponse[3];
decoded.PMADescriptors = new CDPMADescriptors[(decoded.DataLength - 2) / 11]; decoded.PMADescriptors = new CDPMADescriptors[(decoded.DataLength - 2) / 11];
if(decoded.DataLength + 2 != CDPMAResponse.Length) if(decoded.DataLength + 2 != CDPMAResponse.Length)

View File

@@ -30,7 +30,6 @@
// Copyright © 2011-2019 Natalia Portillo // Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/ // ****************************************************************************/
using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Text; using System.Text;
using DiscImageChef.Console; using DiscImageChef.Console;
@@ -115,14 +114,14 @@ namespace DiscImageChef.Decoders.CD
{ {
if(CDSessionInfoResponse == null) return null; if(CDSessionInfoResponse == null) return null;
CDSessionInfo decoded = new CDSessionInfo(); CDSessionInfo decoded = new CDSessionInfo
{
DataLength = BigEndianBitConverter.ToUInt16(CDSessionInfoResponse, 0),
FirstCompleteSession = CDSessionInfoResponse[2],
LastCompleteSession = CDSessionInfoResponse[3]
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; decoded.TrackDescriptors = new TrackDataDescriptor[(decoded.DataLength - 2) / 8];
decoded.DataLength = BigEndianBitConverter.ToUInt16(CDSessionInfoResponse, 0);
decoded.FirstCompleteSession = CDSessionInfoResponse[2];
decoded.LastCompleteSession = CDSessionInfoResponse[3];
decoded.TrackDescriptors = new TrackDataDescriptor[(decoded.DataLength - 2) / 8];
if(decoded.DataLength + 2 != CDSessionInfoResponse.Length) if(decoded.DataLength + 2 != CDSessionInfoResponse.Length)
{ {

View File

@@ -30,7 +30,6 @@
// Copyright © 2011-2019 Natalia Portillo // Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/ // ****************************************************************************/
using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Text; using System.Text;
using DiscImageChef.Console; using DiscImageChef.Console;
@@ -117,13 +116,13 @@ namespace DiscImageChef.Decoders.CD
{ {
if(CDTOCResponse == null) return null; if(CDTOCResponse == null) return null;
CDTOC decoded = new CDTOC(); CDTOC decoded = new CDTOC
{
DataLength = BigEndianBitConverter.ToUInt16(CDTOCResponse, 0),
FirstTrack = CDTOCResponse[2],
LastTrack = CDTOCResponse[3]
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataLength = BigEndianBitConverter.ToUInt16(CDTOCResponse, 0);
decoded.FirstTrack = CDTOCResponse[2];
decoded.LastTrack = CDTOCResponse[3];
decoded.TrackDescriptors = new CDTOCTrackDataDescriptor[(decoded.DataLength - 2) / 8]; decoded.TrackDescriptors = new CDTOCTrackDataDescriptor[(decoded.DataLength - 2) / 8];
if(decoded.DataLength + 2 != CDTOCResponse.Length) if(decoded.DataLength + 2 != CDTOCResponse.Length)

View File

@@ -134,8 +134,6 @@ namespace DiscImageChef.Decoders
{ {
byte[] tagBytes = new byte[20]; byte[] tagBytes = new byte[20];
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
byte[] tmp = BigEndianBitConverter.GetBytes(Version); byte[] tmp = BigEndianBitConverter.GetBytes(Version);
Array.Copy(tmp, 0, tagBytes, 0, 2); Array.Copy(tmp, 0, tagBytes, 0, 2);
tagBytes[2] = (byte)(Kind << 6); tagBytes[2] = (byte)(Kind << 6);
@@ -257,8 +255,6 @@ namespace DiscImageChef.Decoders
{ {
byte[] tagBytes = new byte[24]; byte[] tagBytes = new byte[24];
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
byte[] tmp = BigEndianBitConverter.GetBytes(Version); byte[] tmp = BigEndianBitConverter.GetBytes(Version);
Array.Copy(tmp, 0, tagBytes, 0, 2); Array.Copy(tmp, 0, tagBytes, 0, 2);
tagBytes[2] = (byte)(Kind << 6); tagBytes[2] = (byte)(Kind << 6);
@@ -358,8 +354,6 @@ namespace DiscImageChef.Decoders
{ {
byte[] tagBytes = new byte[12]; byte[] tagBytes = new byte[12];
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
byte[] tmp = BigEndianBitConverter.GetBytes(Version); byte[] tmp = BigEndianBitConverter.GetBytes(Version);
Array.Copy(tmp, 0, tagBytes, 0, 2); Array.Copy(tmp, 0, tagBytes, 0, 2);
tagBytes[2] = (byte)(Kind << 6); tagBytes[2] = (byte)(Kind << 6);
@@ -381,18 +375,17 @@ namespace DiscImageChef.Decoders
{ {
if(tag == null || tag.Length != 12) return null; if(tag == null || tag.Length != 12) return null;
SonyTag snTag = new SonyTag(); SonyTag snTag = new SonyTag
{
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; Version = BigEndianBitConverter.ToUInt16(tag, 0),
Kind = (byte)((tag[2] & 0xC0) >> 6),
snTag.Version = BigEndianBitConverter.ToUInt16(tag, 0); Reserved = (byte)(tag[2] & 0x3F),
snTag.Kind = (byte)((tag[2] & 0xC0) >> 6); Volume = tag[3],
snTag.Reserved = (byte)(tag[2] & 0x3F); FileId = BigEndianBitConverter.ToInt16(tag, 4),
snTag.Volume = tag[3]; RelPage = BigEndianBitConverter.ToUInt16(tag, 6),
snTag.FileId = BigEndianBitConverter.ToInt16(tag, 4); NextBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 8) & 0x7FF),
snTag.RelPage = BigEndianBitConverter.ToUInt16(tag, 6); PrevBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 10) & 0x7FF)
snTag.NextBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 8) & 0x7FF); };
snTag.PrevBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 10) & 0x7FF);
snTag.IsLast = snTag.NextBlock == 0x7FF; snTag.IsLast = snTag.NextBlock == 0x7FF;
snTag.IsFirst = snTag.PrevBlock == 0x7FF; snTag.IsFirst = snTag.PrevBlock == 0x7FF;
@@ -406,8 +399,6 @@ namespace DiscImageChef.Decoders
ProfileTag phTag = new ProfileTag(); ProfileTag phTag = new ProfileTag();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
byte[] tmp = new byte[4]; byte[] tmp = new byte[4];
phTag.Version = BigEndianBitConverter.ToUInt16(tag, 0); phTag.Version = BigEndianBitConverter.ToUInt16(tag, 0);
@@ -451,8 +442,6 @@ namespace DiscImageChef.Decoders
PriamTag pmTag = new PriamTag(); PriamTag pmTag = new PriamTag();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
byte[] tmp = new byte[4]; byte[] tmp = new byte[4];
pmTag.Version = BigEndianBitConverter.ToUInt16(tag, 0); pmTag.Version = BigEndianBitConverter.ToUInt16(tag, 0);

View File

@@ -227,8 +227,6 @@ namespace DiscImageChef.Decoders.SCSI.MMC
AACSVolumeIdentifier decoded = new AACSVolumeIdentifier(); AACSVolumeIdentifier decoded = new AACSVolumeIdentifier();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.VolumeIdentifier = new byte[AACSVIResponse.Length - 4]; decoded.VolumeIdentifier = new byte[AACSVIResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSVIResponse, 0); decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSVIResponse, 0);
@@ -269,8 +267,6 @@ namespace DiscImageChef.Decoders.SCSI.MMC
AACSMediaSerialNumber decoded = new AACSMediaSerialNumber(); AACSMediaSerialNumber decoded = new AACSMediaSerialNumber();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.MediaSerialNumber = new byte[AACSMSNResponse.Length - 4]; decoded.MediaSerialNumber = new byte[AACSMSNResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMSNResponse, 0); decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMSNResponse, 0);
@@ -311,8 +307,6 @@ namespace DiscImageChef.Decoders.SCSI.MMC
AACSMediaIdentifier decoded = new AACSMediaIdentifier(); AACSMediaIdentifier decoded = new AACSMediaIdentifier();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.MediaIdentifier = new byte[AACSMIResponse.Length - 4]; decoded.MediaIdentifier = new byte[AACSMIResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMIResponse, 0); decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMIResponse, 0);
@@ -353,8 +347,6 @@ namespace DiscImageChef.Decoders.SCSI.MMC
AACSMediaKeyBlock decoded = new AACSMediaKeyBlock(); AACSMediaKeyBlock decoded = new AACSMediaKeyBlock();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.MediaKeyBlockPacks = new byte[AACSMKBResponse.Length - 4]; decoded.MediaKeyBlockPacks = new byte[AACSMKBResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMKBResponse, 0); decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSMKBResponse, 0);
@@ -396,8 +388,6 @@ namespace DiscImageChef.Decoders.SCSI.MMC
AACSDataKeys decoded = new AACSDataKeys(); AACSDataKeys decoded = new AACSDataKeys();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.DataKeys = new byte[AACSDKResponse.Length - 4]; decoded.DataKeys = new byte[AACSDKResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSDKResponse, 0); decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSDKResponse, 0);
@@ -436,13 +426,12 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{ {
if(AACSLBAExtsResponse == null) return null; if(AACSLBAExtsResponse == null) return null;
AACSLBAExtentsResponse decoded = new AACSLBAExtentsResponse(); AACSLBAExtentsResponse decoded = new AACSLBAExtentsResponse
{
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; DataLength = BigEndianBitConverter.ToUInt16(AACSLBAExtsResponse, 0),
Reserved = AACSLBAExtsResponse[2],
decoded.DataLength = BigEndianBitConverter.ToUInt16(AACSLBAExtsResponse, 0); MaxLBAExtents = AACSLBAExtsResponse[3]
decoded.Reserved = AACSLBAExtsResponse[2]; };
decoded.MaxLBAExtents = AACSLBAExtsResponse[3];
if((AACSLBAExtsResponse.Length - 4) % 16 != 0) return decoded; if((AACSLBAExtsResponse.Length - 4) % 16 != 0) return decoded;

View File

@@ -85,15 +85,14 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{ {
if(CPRMMKBResponse == null) return null; if(CPRMMKBResponse == null) return null;
CPRMMediaKeyBlock decoded = new CPRMMediaKeyBlock(); CPRMMediaKeyBlock decoded = new CPRMMediaKeyBlock
{
MKBPackData = new byte[CPRMMKBResponse.Length - 4],
DataLength = BigEndianBitConverter.ToUInt16(CPRMMKBResponse, 0),
Reserved = CPRMMKBResponse[2],
TotalPacks = CPRMMKBResponse[3]
};
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
decoded.MKBPackData = new byte[CPRMMKBResponse.Length - 4];
decoded.DataLength = BigEndianBitConverter.ToUInt16(CPRMMKBResponse, 0);
decoded.Reserved = CPRMMKBResponse[2];
decoded.TotalPacks = CPRMMKBResponse[3];
Array.Copy(CPRMMKBResponse, 4, decoded.MKBPackData, 0, CPRMMKBResponse.Length - 4); Array.Copy(CPRMMKBResponse, 4, decoded.MKBPackData, 0, CPRMMKBResponse.Length - 4);
return decoded; return decoded;

View File

@@ -30,7 +30,6 @@
// Copyright © 2011-2019 Natalia Portillo // Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/ // ****************************************************************************/
using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Text; using System.Text;
@@ -112,20 +111,18 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(FormatLayersResponse.Length < 8) return null; if(FormatLayersResponse.Length < 8) return null;
RecognizedFormatLayers decoded = new RecognizedFormatLayers(); RecognizedFormatLayers decoded = new RecognizedFormatLayers
{
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; DataLength = BigEndianBitConverter.ToUInt16(FormatLayersResponse, 0),
Reserved1 = FormatLayersResponse[2],
decoded.DataLength = BigEndianBitConverter.ToUInt16(FormatLayersResponse, 0); Reserved2 = FormatLayersResponse[3],
decoded.Reserved1 = FormatLayersResponse[2]; NumberOfLayers = FormatLayersResponse[4],
decoded.Reserved2 = FormatLayersResponse[3]; Reserved3 = (byte)((FormatLayersResponse[5] & 0xC0) >> 6),
decoded.NumberOfLayers = FormatLayersResponse[4]; DefaultFormatLayer = (byte)((FormatLayersResponse[5] & 0x30) >> 4),
decoded.Reserved3 = (byte)((FormatLayersResponse[5] & 0xC0) >> 6); Reserved4 = (byte)((FormatLayersResponse[5] & 0x0C) >> 2),
decoded.DefaultFormatLayer = (byte)((FormatLayersResponse[5] & 0x30) >> 4); OnlineFormatLayer = (byte)(FormatLayersResponse[5] & 0x03),
decoded.Reserved4 = (byte)((FormatLayersResponse[5] & 0x0C) >> 2); FormatLayers = new ushort[(FormatLayersResponse.Length - 6) / 2]
decoded.OnlineFormatLayer = (byte)(FormatLayersResponse[5] & 0x03); };
decoded.FormatLayers = new ushort[(FormatLayersResponse.Length - 6) / 2];
for(int i = 0; i < (FormatLayersResponse.Length - 6) / 2; i++) for(int i = 0; i < (FormatLayersResponse.Length - 6) / 2; i++)
decoded.FormatLayers[i] = BigEndianBitConverter.ToUInt16(FormatLayersResponse, i * 2 + 6); decoded.FormatLayers[i] = BigEndianBitConverter.ToUInt16(FormatLayersResponse, i * 2 + 6);
@@ -153,6 +150,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use."); if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break; break;
} }
case (ushort)FormatLayerTypeCodes.CDLayer: case (ushort)FormatLayerTypeCodes.CDLayer:
{ {
sb.AppendFormat("Layer {0} is of type CD", i).AppendLine(); sb.AppendFormat("Layer {0} is of type CD", i).AppendLine();
@@ -160,6 +158,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use."); if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break; break;
} }
case (ushort)FormatLayerTypeCodes.DVDLayer: case (ushort)FormatLayerTypeCodes.DVDLayer:
{ {
sb.AppendFormat("Layer {0} is of type DVD", i).AppendLine(); sb.AppendFormat("Layer {0} is of type DVD", i).AppendLine();
@@ -167,6 +166,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use."); if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break; break;
} }
case (ushort)FormatLayerTypeCodes.HDDVDLayer: case (ushort)FormatLayerTypeCodes.HDDVDLayer:
{ {
sb.AppendFormat("Layer {0} is of type HD DVD", i).AppendLine(); sb.AppendFormat("Layer {0} is of type HD DVD", i).AppendLine();
@@ -174,6 +174,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC
if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use."); if(response.OnlineFormatLayer == i) sb.AppendLine("This is the layer actually in use.");
break; break;
} }
default: default:
{ {
sb.AppendFormat("Layer {0} is of unknown type 0x{1:X4}", i, response.FormatLayers[i]) sb.AppendFormat("Layer {0} is of unknown type 0x{1:X4}", i, response.FormatLayers[i])

View File

@@ -120,21 +120,20 @@ namespace DiscImageChef.Decoders.SCSI.MMC
{ {
if(WPSResponse == null) return null; if(WPSResponse == null) return null;
WriteProtectionStatus decoded = new WriteProtectionStatus(); WriteProtectionStatus decoded = new WriteProtectionStatus
{
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; DataLength = BigEndianBitConverter.ToUInt16(WPSResponse, 0),
Reserved1 = WPSResponse[2],
decoded.DataLength = BigEndianBitConverter.ToUInt16(WPSResponse, 0); Reserved2 = WPSResponse[3],
decoded.Reserved1 = WPSResponse[2]; Reserved3 = (byte)((WPSResponse[4] & 0xF0) >> 4),
decoded.Reserved2 = WPSResponse[3]; MSWI = Convert.ToBoolean(WPSResponse[4] & 0x08),
decoded.Reserved3 = (byte)((WPSResponse[4] & 0xF0) >> 4); CWP = Convert.ToBoolean(WPSResponse[4] & 0x04),
decoded.MSWI = Convert.ToBoolean(WPSResponse[4] & 0x08); PWP = Convert.ToBoolean(WPSResponse[4] & 0x02),
decoded.CWP = Convert.ToBoolean(WPSResponse[4] & 0x04); SWPP = Convert.ToBoolean(WPSResponse[4] & 0x01),
decoded.PWP = Convert.ToBoolean(WPSResponse[4] & 0x02); Reserved4 = WPSResponse[5],
decoded.SWPP = Convert.ToBoolean(WPSResponse[4] & 0x01); Reserved5 = WPSResponse[6],
decoded.Reserved4 = WPSResponse[5]; Reserved6 = WPSResponse[7]
decoded.Reserved5 = WPSResponse[6]; };
decoded.Reserved6 = WPSResponse[7];
return decoded; return decoded;
} }