internal bool ReadFullFile(out DataBlockCollection blocks) { if (IsDisposed) { throw new InvalidOperationException(); } blocks = new DataBlockCollection(); if (!File.Exists(archive.FilePath)) { return(false); } if (!headerLoaded) { if (!loadHeader()) { throw new InvalidDataException("Header is missing from file."); } } try { //blocks = new DataBlockCollection(); readAllBlocks(ref blocks); return(false); } catch (Exception) { return(false); } }
/// <summary> /// Parse the <see cref="EEDID"/> given. /// </summary> /// <param name="instance"><see cref="EEDID"/> instance to parse.</param> public void Parse(EEDID instance) { // Prints raw data. ParserHelper.PrintsRawData(Logger, instance.GetRawData()); // Prints blocks. int index = 0; DataBlockCollection blocks = instance.Blocks; foreach (DataBlock block in blocks) { ParserHelper.PrintsBlock(Logger, block, index); index++; } }
private void readAllBlocks(ref DataBlockCollection blocks) { int position; int length; byte[] data; foreach (string fileName in header.HeaderOrder.Values) { header.TryGet(fileName, out position, out length); //readBlock(position, length, out data); readRawBlock(position, length, out data); blocks.Append(fileName, data); } }
/// <summary> /// Parse the <see cref="EEDID"/> given. /// </summary> /// <param name="instance"><see cref="EEDID"/> instance to parse.</param> public void Parse(EEDID instance) { // Instance raw data. ReadOnlyCollection <byte> rawData = instance.GetRawData(); // Prints raw data. ParserHelper.PrintsRawData(Logger, rawData); // Prints blocks. DataBlockCollection blocks = instance.Blocks; foreach (DataBlock block in blocks) { ParserHelper.PrintsBlock(Logger, block); } }
static void Main(string[] args) { EEDID[] instances = EEDID.Instance; foreach (var instance in instances) { //EEDID instance = EEDID.Parse(MacBookPro2018.IntegratedLaptopPanelEdidTable3); Console.WriteLine(); Console.WriteLine(@" Implemented Blocks"); Console.WriteLine(@" ══════════════════"); DataBlockCollection blocks = instance.Blocks; foreach (KnownDataBlock block in blocks.ImplementedBlocks) { Console.WriteLine($@" │ {block}"); } foreach (DataBlock block in blocks) { var blockLiteral = $@"{block.Key} Block"; Console.WriteLine(); Console.WriteLine($@" {blockLiteral}"); Console.WriteLine($@" {new string('═', blockLiteral.Length)}"); Console.WriteLine(); Console.WriteLine(@" Implemented Sections"); Console.WriteLine(@" ┌───────────────────"); var implSections = instance.Blocks[block.Key].Sections.ImplementedSections; foreach (Enum section in implSections) { Console.WriteLine($@" │ {GetFriendlyName(section)}"); } Console.WriteLine(); Console.WriteLine(@" Sections"); Console.WriteLine(@" ┌───────"); BaseDataSectionCollection sections = block.Sections; foreach (DataSection section in sections) { var sectionLiteral = $"{GetFriendlyName(section.Key) } Section"; Console.WriteLine($@" │"); Console.WriteLine($@" ├ {sectionLiteral}"); Console.WriteLine($@" │ ┌{new string('─', sectionLiteral.Length - 1)}"); IEnumerable <IPropertyKey> properties = section.ImplementedProperties; foreach (IPropertyKey property in properties) { string friendlyName = property.GetPropertyName(); PropertyUnit valueUnit = property.PropertyUnit; string unit = valueUnit == PropertyUnit.None ? string.Empty : valueUnit.ToString(); QueryPropertyResult queryResult = section.GetProperty(property); PropertyItem propertyItem = queryResult.Value; object value = propertyItem.Value; if (value == null) { Console.WriteLine($@" │ │ {friendlyName}: NULL"); continue; } if (value is string) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit}"); } else if (value is bool) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit}"); } else if (value is double) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit}"); } else if (value is byte) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit} [{value:X2}h]"); } else if (value is short) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is ushort) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is int) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is uint) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is long) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit} [{value:X8}h]"); } else if (value is ulong) { Console.WriteLine($@" │ │ {friendlyName}: {value}{unit} [{value:X8}h]"); } else if (value is PointF) { var pointLiteral = $"{ friendlyName }"; Console.WriteLine($@" │ │ {pointLiteral}"); Console.WriteLine($@" │ │ ┌{new string('─', pointLiteral.Length - 1)}"); Console.WriteLine($@" │ │ │ X: {((PointF)value).X}"); Console.WriteLine($@" │ │ │ Y: {((PointF)value).Y}"); Console.WriteLine($@" │ │"); } else if (value is StandardTimingIdentifierDescriptorItem) { Console.WriteLine($@" │ │ {(StandardTimingIdentifierDescriptorItem)value}"); } else if (value.GetType() == typeof(ReadOnlyCollection <byte>)) { Console.WriteLine($@" │ │ {friendlyName}: {string.Join(", ", (ReadOnlyCollection<byte>)value)}"); } else if (value.GetType() == typeof(ReadOnlyCollection <string>)) { Console.WriteLine($@" │ │ {friendlyName}"); Console.WriteLine($@" │ │ ┌{new string('─', friendlyName.Length - 1)}"); var items = (ReadOnlyCollection <string>)value; foreach (string item in items) { Console.WriteLine($@" │ │ │ {item}"); } } else if (value.GetType() == typeof(ReadOnlyCollection <MonitorResolutionInfo>)) { var items = (ReadOnlyCollection <MonitorResolutionInfo>)value; foreach (MonitorResolutionInfo item in items) { Console.WriteLine($@" │ │ {item}"); } } else if (value.GetType() == typeof(SectionPropertiesTable)) { Console.WriteLine($@" │ │ {friendlyName}"); Console.WriteLine($@" │ │ ┌{new string('─', friendlyName.Length - 1)}"); var dataBlockProperties = (SectionPropertiesTable)value; foreach (PropertyItem dataBlockProperty in dataBlockProperties) { IPropertyKey dataBlockPropertyKey = (PropertyKey)dataBlockProperty.Key; string dataBlockPropertyName = dataBlockPropertyKey.GetPropertyName(); PropertyUnit dataBlockPropertyUnit = dataBlockPropertyKey.PropertyUnit; string dataUnit = dataBlockPropertyKey.PropertyUnit == PropertyUnit.None ? string.Empty : dataBlockPropertyUnit.ToString(); object dataBlockPropertyValue = dataBlockProperty.Value; if (dataBlockPropertyValue.GetType() == typeof(ReadOnlyCollection <byte>)) { Console.WriteLine($@" │ │ │ {dataBlockPropertyName}: {string.Join(" ", (ReadOnlyCollection<byte>)dataBlockPropertyValue)}"); } else if (dataBlockPropertyValue.GetType() == typeof(ReadOnlyCollection <string>)) { var items = (ReadOnlyCollection <string>)dataBlockPropertyValue; foreach (string item in items) { Console.WriteLine($@" │ │ │ {item}"); } } else { Console.WriteLine($@" │ │ │ {dataBlockPropertyName}: {dataBlockPropertyValue} {dataUnit}"); } } Console.WriteLine($@" │ │"); } else if (value.GetType() == typeof(List <SectionPropertiesTable>)) { Console.WriteLine($@" │ │ {friendlyName}"); Console.WriteLine($@" │ │ ┌{new string('─', friendlyName.Length - 1)}"); var sectionPropertiesCollection = (List <SectionPropertiesTable>)value; foreach (SectionPropertiesTable sectionProperty in sectionPropertiesCollection) { foreach (PropertyItem dataBlockProperty in sectionProperty) { IPropertyKey dataBlockPropertyKey = (PropertyKey)dataBlockProperty.Key; string dataBlockPropertyName = dataBlockPropertyKey.GetPropertyName(); PropertyUnit dataBlockPropertyUnit = dataBlockPropertyKey.PropertyUnit; string dataUnit = dataBlockPropertyKey.PropertyUnit == PropertyUnit.None ? string.Empty : dataBlockPropertyUnit.ToString(); object dataBlockPropertyValue = dataBlockProperty.Value; if (dataBlockPropertyValue.GetType() == typeof(ReadOnlyCollection <string>)) { Console.WriteLine($@" │ │ │ {dataBlockPropertyName}"); Console.WriteLine($@" │ │ │ ┌{new string('─', dataBlockPropertyName.Length - 1)}"); var items = (ReadOnlyCollection <string>)dataBlockPropertyValue; foreach (string item in items) { Console.WriteLine($@" │ │ │ │ {item}"); } } else { Console.WriteLine($@" │ │ │ {dataBlockPropertyName}: {dataBlockPropertyValue} {dataUnit}"); } } } Console.WriteLine($@" │ │"); } else { Console.WriteLine($@" │ │ {friendlyName} > {value}{unit}"); } } } Console.WriteLine(); } } Console.WriteLine(); Console.WriteLine(@" > Gets A Single Property Directly From Parsed EDID Data"); EEDID parsed = EEDID.Parse(MacBookPro2018.IntegratedLaptopPanelEdidTable); DataBlock edidBlock = parsed.Blocks[KnownDataBlock.EDID]; BaseDataSectionCollection edidSections = edidBlock.Sections; DataSection basicDisplaySection = edidSections[(int)KnownEdidSection.BasicDisplay]; QueryPropertyResult gammaResult = basicDisplaySection.GetProperty(EedidProperty.Edid.BasicDisplay.Gamma); if (gammaResult.Success) { Console.WriteLine($@" > Gamma > {gammaResult.Value.Value}"); } Console.ReadLine(); }
/// <summary> /// Parse the <see cref="EEDID"/> given. /// </summary> /// <param name="instance"><see cref="EEDID"/> instance to parse.</param> public void Parse(EEDID instance) { Logger.Info(""); Logger.Info(@" Implemented Blocks"); Logger.Info(@" ══════════════════"); DataBlockCollection blocks = instance.Blocks; foreach (KnownDataBlock block in blocks.ImplementedBlocks) { Logger.Info($@" │ {block}"); } foreach (DataBlock block in blocks) { var blockLiteral = $@"{block.Key} Block"; Logger.Info(""); Logger.Info($@" {blockLiteral}"); Logger.Info($@" {new string('═', blockLiteral.Length)}"); Logger.Info(""); Logger.Info(@" Implemented Sections"); Logger.Info(@" ┌───────────────────"); var implSections = instance.Blocks[block.Key].Sections.ImplementedSections; foreach (Enum section in implSections) { Logger.Info($@" │ {section.AsFriendlyName()}"); } Logger.Info(""); Logger.Info(@" Sections"); Logger.Info(@" ┌───────"); BaseDataSectionCollection sections = block.Sections; foreach (DataSection section in sections) { var sectionLiteral = $"{section.Key.AsFriendlyName()} Section"; Logger.Info($@" │"); Logger.Info($@" ├ {sectionLiteral}"); Logger.Info($@" │ ┌{new string('─', sectionLiteral.Length - 1)}"); IEnumerable <IPropertyKey> properties = section.ImplementedProperties; foreach (IPropertyKey property in properties) { string friendlyName = property.GetPropertyName(); PropertyUnit valueUnit = property.PropertyUnit; string unit = valueUnit == PropertyUnit.None ? string.Empty : valueUnit.ToString(); QueryPropertyResult queryResult = section.GetProperty(property); PropertyItem propertyItem = queryResult.Result; object value = propertyItem.Value; if (value == null) { Logger.Info($@" │ │ {friendlyName}: NULL"); continue; } if (value is string) { Logger.Info($@" │ │ {friendlyName}: {value}{unit}"); } else if (value is bool) { Logger.Info($@" │ │ {friendlyName}: {value}{unit}"); } else if (value is double) { Logger.Info($@" │ │ {friendlyName}: {value}{unit}"); } else if (value is byte) { Logger.Info($@" │ │ {friendlyName}: {value}{unit} [{value:X2}h]"); } else if (value is short) { Logger.Info($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is ushort) { Logger.Info($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is int) { Logger.Info($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is uint) { Logger.Info($@" │ │ {friendlyName}: {value}{unit} [{value:X4}h]"); } else if (value is long) { Logger.Info($@" │ │ {friendlyName}: {value}{unit} [{value:X8}h]"); } else if (value is ulong) { Logger.Info($@" │ │ {friendlyName}: {value}{unit} [{value:X8}h]"); } else if (value is PointF) { var pointLiteral = $"{ friendlyName }"; Logger.Info($@" │ │ {pointLiteral}"); Logger.Info($@" │ │ ┌{new string('─', pointLiteral.Length - 1)}"); Logger.Info($@" │ │ │ X: {((PointF)value).X}"); Logger.Info($@" │ │ │ Y: {((PointF)value).Y}"); Logger.Info($@" │ │"); } else if (value is StandardTimingIdentifierDescriptorItem) { Logger.Info($@" │ │ {(StandardTimingIdentifierDescriptorItem)value}"); } else if (value.GetType() == typeof(ReadOnlyCollection <byte>)) { Logger.Info($@" │ │ {friendlyName}: {string.Join(", ", (ReadOnlyCollection<byte>)value)}"); } else if (value.GetType() == typeof(ReadOnlyCollection <string>)) { Logger.Info($@" │ │ {friendlyName}"); Logger.Info($@" │ │ ┌{new string('─', friendlyName.Length - 1)}"); var items = (ReadOnlyCollection <string>)value; foreach (string item in items) { Logger.Info($@" │ │ │ {item}"); } } else if (value.GetType() == typeof(ReadOnlyCollection <MonitorResolutionInfo>)) { var items = (ReadOnlyCollection <MonitorResolutionInfo>)value; foreach (MonitorResolutionInfo item in items) { Logger.Info($@" │ │ {item}"); } } else if (value.GetType() == typeof(SectionPropertiesTable)) { Logger.Info($@" │ │ {friendlyName}"); Logger.Info($@" │ │ ┌{new string('─', friendlyName.Length - 1)}"); var dataBlockProperties = (SectionPropertiesTable)value; foreach (PropertyItem dataBlockProperty in dataBlockProperties) { IPropertyKey dataBlockPropertyKey = (PropertyKey)dataBlockProperty.Key; string dataBlockPropertyName = dataBlockPropertyKey.GetPropertyName(); PropertyUnit dataBlockPropertyUnit = dataBlockPropertyKey.PropertyUnit; string dataUnit = dataBlockPropertyKey.PropertyUnit == PropertyUnit.None ? string.Empty : dataBlockPropertyUnit.ToString(); object dataBlockPropertyValue = dataBlockProperty.Value; if (dataBlockPropertyValue.GetType() == typeof(ReadOnlyCollection <byte>)) { Logger.Info($@" │ │ │ {dataBlockPropertyName}: {string.Join(" ", (ReadOnlyCollection<byte>)dataBlockPropertyValue)}"); } else if (dataBlockPropertyValue.GetType() == typeof(ReadOnlyCollection <string>)) { var items = (ReadOnlyCollection <string>)dataBlockPropertyValue; foreach (string item in items) { Logger.Info($@" │ │ │ {item}"); } } else { Logger.Info($@" │ │ │ {dataBlockPropertyName}: {dataBlockPropertyValue} {dataUnit}"); } } Logger.Info($@" │ │"); } else if (value.GetType() == typeof(List <SectionPropertiesTable>)) { Logger.Info($@" │ │ {friendlyName}"); Logger.Info($@" │ │ ┌{new string('─', friendlyName.Length - 1)}"); var sectionPropertiesCollection = (List <SectionPropertiesTable>)value; foreach (SectionPropertiesTable sectionProperty in sectionPropertiesCollection) { foreach (PropertyItem dataBlockProperty in sectionProperty) { IPropertyKey dataBlockPropertyKey = (PropertyKey)dataBlockProperty.Key; string dataBlockPropertyName = dataBlockPropertyKey.GetPropertyName(); PropertyUnit dataBlockPropertyUnit = dataBlockPropertyKey.PropertyUnit; string dataUnit = dataBlockPropertyKey.PropertyUnit == PropertyUnit.None ? string.Empty : dataBlockPropertyUnit.ToString(); object dataBlockPropertyValue = dataBlockProperty.Value; if (dataBlockPropertyValue.GetType() == typeof(ReadOnlyCollection <string>)) { Logger.Info($@" │ │ │ {dataBlockPropertyName}"); Logger.Info($@" │ │ │ ┌{new string('─', dataBlockPropertyName.Length - 1)}"); var items = (ReadOnlyCollection <string>)dataBlockPropertyValue; foreach (string item in items) { Logger.Info($@" │ │ │ │ {item}"); } } else { Logger.Info($@" │ │ │ {dataBlockPropertyName}: {dataBlockPropertyValue} {dataUnit}"); } } } Logger.Info($@" │ │"); } else { Logger.Info($@" │ │ {friendlyName} > {value}{unit}"); } } } } }