private UInt32 MakeUInt32(String param) { param = param.ToUpper(); if (4 == param.Length) { return(FirmwareTables.StringToUInt32(param)); } if (param.StartsWith("0X")) { param = param.Substring(2); } return(Convert.ToUInt32(param, 16)); }
private void DecodeAcpiTable(UInt32 tableId) { var tableIdString = FirmwareTables.UInt32ToString(tableId); Console.WriteLine("=== '{0}' ACPI table 0x{1:X8} or '{2}'", tableIdString.Reverse(), tableId, tableIdString); var acpiTable = FirmwareTables.GetAcpiTable(tableId); Console.WriteLine("Table size: {0:N0} bytes", acpiTable.RawData.Length); Console.WriteLine("--- ACPI table header"); Console.WriteLine("Signature: '{0}'", acpiTable.Signature); Console.WriteLine("Length: {0:N0} bytes", acpiTable.Length); Console.WriteLine("Revision: {0:N0}", acpiTable.Revision); Console.WriteLine("Checksum: 0x{0:X2} - {1}OK", acpiTable.Checksum, acpiTable.ChecksumIsValid ? "" : "NOT "); Console.WriteLine("OEM ID: '{0}'", acpiTable.OemId); Console.WriteLine("OEM Table ID: '{0}'", acpiTable.OemTableId); Console.WriteLine("OEM Revison: {0}", acpiTable.OemRevision); Console.WriteLine("Creator ID: '{0}'", acpiTable.CreatorId); Console.WriteLine("Creator Revison: {0} or 0x{0:X8}", acpiTable.CreatorRevision); Console.WriteLine("--- ACPI table payload"); Console.WriteLine("Length: {0:N0} bytes", acpiTable.Payload.Length); PrintArray(acpiTable.Payload); }
public static AcpiTable GetAcpiTable(UInt32 tableId) { var data = FirmwareTables.GetFirmwareTable(FirmwareTableType.Acpi, tableId); return(new AcpiTable(data)); }
protected override Int32 Execute() { if (_commandLineParser.IsOptionSet("l", "list")) { foreach (FirmwareTableType tableType in Enum.GetValues(typeof(FirmwareTableType))) { var tableIds = FirmwareTables.EnumFirmwareTables(tableType); foreach (var tableId in tableIds) { Console.WriteLine("0x{0:X8} '{1}' - 0x{2:X8} '{3}'", (UInt32)tableType, tableType.ToString().ToUpper(), tableId, FirmwareTables.UInt32ToString(tableId)); } } } else if (_commandLineParser.IsOptionSet("s", "save")) { if ((_commandLineParser.FileNames.Length < 2) || (_commandLineParser.FileNames.Length > 3)) { Help(); } var tableType = MakeUInt32(_commandLineParser.FileNames[0]); var tableId = MakeUInt32(_commandLineParser.FileNames[1]); var data = FirmwareTables.GetFirmwareTable(tableType, tableId); var fileName = 3 == _commandLineParser.FileNames.Length ? _commandLineParser.FileNames[2] : FormatFileName(tableType, tableId); File.WriteAllBytes(fileName, data); Console.WriteLine("OK: '{0}' ({1:N0} bytes)", fileName, data.Length); } else if (_commandLineParser.IsOptionSet("a", "all")) { foreach (FirmwareTableType tableType in Enum.GetValues(typeof(FirmwareTableType))) { var tableIds = FirmwareTables.EnumFirmwareTables(tableType); foreach (var tableId in tableIds) { var data = FirmwareTables.GetFirmwareTable(tableType, tableId); var fileName = FormatFileName((UInt32)tableType, tableId); File.WriteAllBytes(fileName, data); Console.WriteLine("'{0}' ({1:N0} bytes)", fileName, data.Length); } } Console.WriteLine("All OK"); } else if (_commandLineParser.IsOptionSet("d", "decode")) { if ((_commandLineParser.FileNames.Length < 1) || (_commandLineParser.FileNames.Length > 2)) { Help(); } var tableType = MakeUInt32(_commandLineParser.FileNames[0]); if (tableType != (UInt32)FirmwareTableType.Acpi) { throw new NotSupportedException("Only the following frimware tables can be decoded: ACPI"); } if (2 == _commandLineParser.FileNames.Length) { var tableId = MakeUInt32(_commandLineParser.FileNames[1]); DecodeAcpiTable(tableId); } else { var tableIds = FirmwareTables.EnumFirmwareTables(tableType); foreach (var tableId in tableIds) { DecodeAcpiTable(tableId); Console.WriteLine(); } } } #if false else if (_commandLineParser.IsOptionSet("i", "info")) { var tableIds = FirmwareTables.EnumFirmwareTables(FirmwareTableType.Acpi); foreach (var tableId in tableIds) { var acpiTable = FirmwareTables.GetAcpiTable(tableId); switch (acpiTable.Signature.ToUpper()) { case "DBGP": break; } } } #endif else { Help(); } return(0); }