Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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());
        }