public static CartridgeStatus?Decode(byte[] CSResponse) { if (CSResponse == null) { return(null); } if (CSResponse.Length != 8) { DicConsole.DebugWriteLine("BD Cartridge Status decoder", "Found incorrect Blu-ray Cartridge Status size ({0} bytes)", CSResponse.Length); return(null); } CartridgeStatus decoded = new CartridgeStatus(); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; decoded.DataLength = BigEndianBitConverter.ToUInt16(CSResponse, 0); decoded.Reserved1 = CSResponse[2]; decoded.Reserved2 = CSResponse[3]; decoded.Cartridge = Convert.ToBoolean(CSResponse[4] & 0x80); decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x40); decoded.Reserved3 = (byte)((CSResponse[4] & 0x38) >> 3); decoded.OUT = Convert.ToBoolean(CSResponse[4] & 0x04); decoded.Reserved4 = (byte)(CSResponse[4] & 0x03); decoded.Reserved5 = CSResponse[5]; decoded.Reserved6 = CSResponse[6]; decoded.Reserved7 = CSResponse[7]; return(decoded); }
public static CartridgeStatus?Decode(byte[] CSResponse) { if (CSResponse == null) { return(null); } if (CSResponse.Length != 8) { AaruConsole.DebugWriteLine("BD Cartridge Status decoder", "Found incorrect Blu-ray Cartridge Status size ({0} bytes)", CSResponse.Length); return(null); } var decoded = new CartridgeStatus { DataLength = BigEndianBitConverter.ToUInt16(CSResponse, 0), Reserved1 = CSResponse[2], Reserved2 = CSResponse[3], Cartridge = Convert.ToBoolean(CSResponse[4] & 0x80), OUT = Convert.ToBoolean(CSResponse[4] & 0x40), Reserved3 = (byte)((CSResponse[4] & 0x38) >> 3), CWP = Convert.ToBoolean(CSResponse[4] & 0x04), Reserved4 = (byte)(CSResponse[4] & 0x03), Reserved5 = CSResponse[5], Reserved6 = CSResponse[6], Reserved7 = CSResponse[7] }; return(decoded); }
public static string Prettify(CartridgeStatus?CSResponse) { if (CSResponse == null) { return(null); } CartridgeStatus response = CSResponse.Value; StringBuilder sb = new StringBuilder(); #if DEBUG if (response.Reserved1 != 0) { sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine(); } if (response.Reserved2 != 0) { sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine(); } if (response.Reserved3 != 0) { sb.AppendFormat("Reserved3 = 0x{0:X8}", response.Reserved3).AppendLine(); } if (response.Reserved4 != 0) { sb.AppendFormat("Reserved4 = 0x{0:X8}", response.Reserved4).AppendLine(); } if (response.Reserved5 != 0) { sb.AppendFormat("Reserved5 = 0x{0:X8}", response.Reserved5).AppendLine(); } if (response.Reserved6 != 0) { sb.AppendFormat("Reserved6 = 0x{0:X8}", response.Reserved6).AppendLine(); } if (response.Reserved7 != 0) { sb.AppendFormat("Reserved7 = 0x{0:X8}", response.Reserved7).AppendLine(); } #endif if (response.Cartridge) { sb.AppendLine("Media is inserted in a cartridge"); if (response.OUT) { sb.AppendLine("Media has been taken out, or inserted in, the cartridge"); } if (response.CWP) { sb.AppendLine("Media is write protected"); } } else { sb.AppendLine("Media is not in a cartridge"); #if DEBUG if (response.OUT) { sb.AppendLine("Media has out bit marked, shouldn't"); } if (response.CWP) { sb.AppendLine("Media has write protection bit marked, shouldn't"); } #endif } return(sb.ToString()); }