mirror of
https://github.com/aaru-dps/Aaru.Decoders.git
synced 2025-12-16 19:24:32 +00:00
Add helper for printing region device info
This commit is contained in:
108
DVD/CSS&CPRM.cs
108
DVD/CSS&CPRM.cs
@@ -88,6 +88,108 @@ namespace Aaru.Decoders.DVD
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string PrettifyRegionalPlaybackControlState(RegionalPlaybackControlState? rpc)
|
||||||
|
{
|
||||||
|
if(rpc == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionalPlaybackControlState decoded = rpc.Value;
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
var typeCode =
|
||||||
|
(TypeCode)((decoded.TypeCode_VendorResetsAvailable_UserControlledChangesAvailable & 0xc0) >> 6);
|
||||||
|
|
||||||
|
int vendorResets = (decoded.TypeCode_VendorResetsAvailable_UserControlledChangesAvailable & 0x38) >> 3;
|
||||||
|
|
||||||
|
int userControlledChanges = decoded.TypeCode_VendorResetsAvailable_UserControlledChangesAvailable & 0x7;
|
||||||
|
|
||||||
|
switch(typeCode)
|
||||||
|
{
|
||||||
|
case TypeCode.None:
|
||||||
|
sb.AppendLine("No drive region setting.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TypeCode.Set:
|
||||||
|
sb.AppendLine("Drive region is set.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TypeCode.LastChance:
|
||||||
|
sb.AppendLine("Drive region is set, with additional restrictions required to make a change.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TypeCode.Perm:
|
||||||
|
sb.AppendLine("Drive region has been set permanently, but may be reset by the vendor if necessary.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.AppendLine($"Drive has {vendorResets} vendor resets available.");
|
||||||
|
sb.AppendLine($"Drive has {userControlledChanges} user controlled changes available.");
|
||||||
|
|
||||||
|
switch(decoded.RegionMask)
|
||||||
|
{
|
||||||
|
case 0xFF:
|
||||||
|
sb.AppendLine("Drive has no region set.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0xFE:
|
||||||
|
sb.AppendLine("Drive is set to region 1.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0xFD:
|
||||||
|
sb.AppendLine("Drive is set to region 2.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0xFB:
|
||||||
|
sb.AppendLine("Drive is set to region 3.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0xF7:
|
||||||
|
sb.AppendLine("Drive is set to region 4.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0xEF:
|
||||||
|
sb.AppendLine("Drive is set to region 5.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0xDF:
|
||||||
|
sb.AppendLine("Drive is set to region 6.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0xBF:
|
||||||
|
sb.AppendLine("Drive is set to region 7.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0x7F:
|
||||||
|
sb.AppendLine("Drive is set to region 8.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(decoded.RPCScheme)
|
||||||
|
{
|
||||||
|
case 0x00:
|
||||||
|
sb.AppendLine("The Logical Unit does not enforce Region Playback Controls (RPC).");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 0x01:
|
||||||
|
sb.AppendLine("The Logical Unit shall adhere to the specification and all requirements of the CSS license agreement concerning RPC.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sb.AppendLine("The Logical Unit uses an unknown region enforcement scheme.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string PrettifyRegionalPlaybackControlState(byte[] response) =>
|
||||||
|
PrettifyRegionalPlaybackControlState(DecodeRegionalPlaybackControlState(response));
|
||||||
|
|
||||||
public static string PrettifyLeadInCopyright(LeadInCopyright? cmi)
|
public static string PrettifyLeadInCopyright(LeadInCopyright? cmi)
|
||||||
{
|
{
|
||||||
if(cmi == null)
|
if(cmi == null)
|
||||||
@@ -245,5 +347,11 @@ namespace Aaru.Decoders.DVD
|
|||||||
/// <summary>Byte 7 Reserved</summary>
|
/// <summary>Byte 7 Reserved</summary>
|
||||||
public byte Reserved3;
|
public byte Reserved3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum TypeCode
|
||||||
|
{
|
||||||
|
None = 0, Set = 1, LastChance = 2,
|
||||||
|
Perm = 3
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user