def _InitializeLoggerInfo()

in AdvLoggerPkg/Application/DecodeUefiLog/DecodeUefiLog.py [0:0]


    def _InitializeLoggerInfo(self, InFile, StartLine):
        ''' Initialize log Header '''
        LoggerInfo = {}
        LoggerInfo["StartLine"] = StartLine
        LoggerInfo["CurrentLine"] = 0
        LoggerInfo["Signature"] = InFile.read(4).decode('utf-8', 'replace')
        Version = struct.unpack("=H", InFile.read(2))[0]
        LoggerInfo["Version"] = Version
        LoggerInfo["BaseTime"] = 0
        InFile.read(2)[0]           # Skip reserved field

        if LoggerInfo["Signature"] != "ALOG":
            raise Exception('Error initializing logger info. Invalid signature: %s' % LoggerInfo["Version"])

        if Version == self.V0_LOGGER_INFO_VERSION:
            InFile.seek(4)
            LoggerInfo["LogBufferSize"] = struct.unpack("=I", InFile.read(4))[0]
            BaseAddress = struct.unpack("=Q", InFile.read(8))[0] + self.V0_LOGGER_INFO_SIZE
            LoggerInfo["LogBuffer"] = self.V0_LOGGER_INFO_SIZE
            LoggerInfo["LogCurrent"] = struct.unpack("=Q", InFile.read(8))[0]
            LoggerInfo["DiscardedSize"] = struct.unpack("=I", InFile.read(4))[0]
            LoggerInfo["SerialInitialized"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["InPermanentRAM"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["ExitBootServices"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["PeiAllocated"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["LogCurrent"] += self.V0_LOGGER_INFO_SIZE
            LoggerInfo["Frequency"] = int(2.5e9)
            if InFile.tell() != (self.V0_LOGGER_INFO_SIZE):
                raise Exception('Error initializing logger info. AmountRead: %d' % InFile.tell())

        elif Version == self.V1_LOGGER_INFO_VERSION:
            BaseAddress = struct.unpack("=Q", InFile.read(8))[0] + self.V1_LOGGER_INFO_SIZE
            LoggerInfo["LogBuffer"] = self.V1_LOGGER_INFO_SIZE
            LoggerInfo["LogCurrent"] = struct.unpack("=Q", InFile.read(8))[0]
            LoggerInfo["DiscardedSize"] = struct.unpack("=I", InFile.read(4))[0]
            LoggerInfo["LogBufferSize"] = struct.unpack("=I", InFile.read(4))[0]
            LoggerInfo["InPermanentRAM"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["AtRuntime"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["GoneVirtual"] = struct.unpack("=B", InFile.read(1))[0]
            InFile.read(5)                 # skip reserved2 field
            LoggerInfo["Frequency"] = struct.unpack("=Q", InFile.read(8))[0]
            LoggerInfo["LogCurrent"] += self.V1_LOGGER_INFO_SIZE
            if InFile.tell() != (self.V1_LOGGER_INFO_SIZE):
                raise Exception('Error initializing logger info. AmountRead: %d' % InFile.tell())

        elif Version == self.V2_LOGGER_INFO_VERSION:
            BaseAddress = struct.unpack("=Q", InFile.read(8))[0] + self.V2_LOGGER_INFO_SIZE
            LoggerInfo["LogBuffer"] = self.V2_LOGGER_INFO_SIZE
            LoggerInfo["LogCurrent"] = struct.unpack("=Q", InFile.read(8))[0]
            LoggerInfo["DiscardedSize"] = struct.unpack("=I", InFile.read(4))[0]
            LoggerInfo["LogBufferSize"] = struct.unpack("=I", InFile.read(4))[0]
            LoggerInfo["InPermanentRAM"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["AtRuntime"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["GoneVirtual"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["HdwInitialized"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["HdwDisabled"] = struct.unpack("=B", InFile.read(1))[0]
            InFile.read(3)                 # skip reserved2 field
            LoggerInfo["Frequency"] = struct.unpack("=Q", InFile.read(8))[0]
            LoggerInfo["TicksAtTime"] = struct.unpack("=Q", InFile.read(8))[0]

            # Reading in the EFI_TIME structure
            LoggerInfo["Year"] = struct.unpack("=H", InFile.read(2))[0]
            LoggerInfo["Month"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["Day"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["Hour"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["Minute"] = struct.unpack("=B", InFile.read(1))[0]
            LoggerInfo["Second"] = struct.unpack("=B", InFile.read(1))[0]
            InFile.read(1)                 # skip Pad1 field
            LoggerInfo["Nanosecond"] = struct.unpack("=I", InFile.read(4))[0]
            LoggerInfo["TimeZone"] = struct.unpack("=H", InFile.read(2))[0]
            LoggerInfo["DayLight"] = struct.unpack("=B", InFile.read(1))[0]
            InFile.read(1)                 # skip Pad2 field

            self._Compute_Basetime(LoggerInfo)

            LoggerInfo["LogCurrent"] += self.V2_LOGGER_INFO_SIZE
            if InFile.tell() != (self.V2_LOGGER_INFO_SIZE):
                raise Exception('Error initializing logger info. AmountRead: %d' % InFile.tell())

        else:
            raise Exception('Error initializing logger info. Unsupported version: 0x%X' % LoggerInfo["Version"])

        LoggerInfo["BaseAddress"] = BaseAddress
        LoggerInfo["LogCurrent"] -= BaseAddress
        LoggerInfo["InFile"] = InFile

        return LoggerInfo