コード例 #1
0
        public static RecognizedFormatLayers?DecodeFormatLayers(byte[] FormatLayersResponse)
        {
            if (FormatLayersResponse == null)
            {
                return(null);
            }

            if (FormatLayersResponse.Length < 8)
            {
                return(null);
            }

            RecognizedFormatLayers decoded = new RecognizedFormatLayers();

            BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;

            decoded.DataLength         = BigEndianBitConverter.ToUInt16(FormatLayersResponse, 0);
            decoded.Reserved1          = FormatLayersResponse[2];
            decoded.Reserved2          = FormatLayersResponse[3];
            decoded.NumberOfLayers     = FormatLayersResponse[4];
            decoded.Reserved3          = (byte)((FormatLayersResponse[5] & 0xC0) >> 6);
            decoded.DefaultFormatLayer = (byte)((FormatLayersResponse[5] & 0x30) >> 4);
            decoded.Reserved4          = (byte)((FormatLayersResponse[5] & 0x0C) >> 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++)
            {
                decoded.FormatLayers[i] = BigEndianBitConverter.ToUInt16(FormatLayersResponse, i * 2 + 6);
            }

            return(decoded);
        }
コード例 #2
0
        public static RecognizedFormatLayers?DecodeFormatLayers(byte[] FormatLayersResponse)
        {
            if (FormatLayersResponse == null)
            {
                return(null);
            }

            if (FormatLayersResponse.Length < 8)
            {
                return(null);
            }

            var decoded = new RecognizedFormatLayers
            {
                DataLength         = BigEndianBitConverter.ToUInt16(FormatLayersResponse, 0),
                Reserved1          = FormatLayersResponse[2],
                Reserved2          = FormatLayersResponse[3],
                NumberOfLayers     = FormatLayersResponse[4],
                Reserved3          = (byte)((FormatLayersResponse[5] & 0xC0) >> 6),
                DefaultFormatLayer = (byte)((FormatLayersResponse[5] & 0x30) >> 4),
                Reserved4          = (byte)((FormatLayersResponse[5] & 0x0C) >> 2),
                OnlineFormatLayer  = (byte)(FormatLayersResponse[5] & 0x03),
                FormatLayers       = new ushort[(FormatLayersResponse.Length - 6) / 2]
            };

            for (int i = 0; i < (FormatLayersResponse.Length - 6) / 2; i++)
            {
                decoded.FormatLayers[i] = BigEndianBitConverter.ToUInt16(FormatLayersResponse, (i * 2) + 6);
            }

            return(decoded);
        }
コード例 #3
0
        public static string PrettifyFormatLayers(RecognizedFormatLayers?FormatLayersResponse)
        {
            if (FormatLayersResponse == null)
            {
                return(null);
            }

            RecognizedFormatLayers response = FormatLayersResponse.Value;

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("{0} format layers recognized", response.NumberOfLayers);

            for (int i = 0; i < response.FormatLayers.Length; i++)
            {
                switch (response.FormatLayers[i])
                {
                case (ushort)FormatLayerTypeCodes.BDLayer:
                {
                    sb.AppendFormat("Layer {0} is of type Blu-ray", i).AppendLine();
                    if (response.DefaultFormatLayer == i)
                    {
                        sb.AppendLine("This is the default layer.");
                    }
                    if (response.OnlineFormatLayer == i)
                    {
                        sb.AppendLine("This is the layer actually in use.");
                    }
                    break;
                }

                case (ushort)FormatLayerTypeCodes.CDLayer:
                {
                    sb.AppendFormat("Layer {0} is of type CD", i).AppendLine();
                    if (response.DefaultFormatLayer == i)
                    {
                        sb.AppendLine("This is the default layer.");
                    }
                    if (response.OnlineFormatLayer == i)
                    {
                        sb.AppendLine("This is the layer actually in use.");
                    }
                    break;
                }

                case (ushort)FormatLayerTypeCodes.DVDLayer:
                {
                    sb.AppendFormat("Layer {0} is of type DVD", i).AppendLine();
                    if (response.DefaultFormatLayer == i)
                    {
                        sb.AppendLine("This is the default layer.");
                    }
                    if (response.OnlineFormatLayer == i)
                    {
                        sb.AppendLine("This is the layer actually in use.");
                    }
                    break;
                }

                case (ushort)FormatLayerTypeCodes.HDDVDLayer:
                {
                    sb.AppendFormat("Layer {0} is of type HD DVD", i).AppendLine();
                    if (response.DefaultFormatLayer == i)
                    {
                        sb.AppendLine("This is the default layer.");
                    }
                    if (response.OnlineFormatLayer == i)
                    {
                        sb.AppendLine("This is the layer actually in use.");
                    }
                    break;
                }

                default:
                {
                    sb.AppendFormat("Layer {0} is of unknown type 0x{1:X4}", i, response.FormatLayers[i])
                    .AppendLine();
                    if (response.DefaultFormatLayer == i)
                    {
                        sb.AppendLine("This is the default layer.");
                    }
                    if (response.OnlineFormatLayer == i)
                    {
                        sb.AppendLine("This is the layer actually in use.");
                    }
                    break;
                }
                }
            }

            return(sb.ToString());
        }