# Copyright 2021 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import collections #from google3.third_party.devsite.androidsource.en.docs.core.architecture.bootloader.tools.pixel.fw_unpack import packedstruct import packedstruct FBPACK_MAGIC = 0x4b504246 # "FBPK" FastBook PacK FBPACK_VERSION = 2 FBPACK_DEFAULT_DATA_ALIGN = 16 FBPACK_PARTITION_TABLE = 0 FBPACK_PARTITION_DATA = 1 FBPACK_SIDELOAD_DATA = 2 class PackEntry(packedstruct.PackedStruct): """Pack entry info.""" type: int name: bytes product: bytes offset: int size: int slotted: int crc32: int _FIELDS = collections.OrderedDict([ ('type', 'I'), ('name', '36s'), ('product', '40s'), ('offset', 'Q'), ('size', 'Q'), ('slotted', 'I'), ('crc32', 'I'), ]) # Provide defaults. # pylint: disable=useless-super-delegation def __init__(self, type_=0, name=b'', prod=b'', offset=0, size=0, slotted=0, crc32=0): super(PackEntry, self).__init__(type_, name, prod, offset, size, slotted, crc32) class PackHeader(packedstruct.PackedStruct): """ A packed image representation""" magic: int version: int header_size: int entry_header_size: int platform: bytes pack_version: bytes slot_type: int data_align: int total_entries: int total_size: int _FIELDS = collections.OrderedDict([ ('magic', 'I'), ('version', 'I'), ('header_size', 'I'), ('entry_header_size', 'I'), ('platform', '16s'), ('pack_version', '64s'), ('slot_type', 'I'), ('data_align', 'I'), ('total_entries', 'I'), ('total_size', 'I'), ]) def __init__(self, magic=FBPACK_MAGIC, version=FBPACK_VERSION, header_size=0, entry_header_size=len(PackEntry()), platform=b'', pack_version=b'', slot_type=0, data_align=FBPACK_DEFAULT_DATA_ALIGN, total_entries=0, total_size=0): super(PackHeader, self).__init__(magic, version, header_size, entry_header_size, platform, pack_version, slot_type, data_align, total_entries, total_size) # update header size once we know all fields self.header_size = len(self)