add new block info
This commit is contained in:
parent
b93c75710b
commit
ad25970cc8
@ -55,6 +55,11 @@ BLOCK_TYPE_MAP = {
|
|||||||
5265477: "EXP",
|
5265477: "EXP",
|
||||||
17232: "PC",
|
17232: "PC",
|
||||||
5522756: "DET",
|
5522756: "DET",
|
||||||
|
1413893971: "TIMER",
|
||||||
|
1347635524: "SOFT",
|
||||||
|
1162692948: "EXTLINK",
|
||||||
|
1280463939: "CTRLINK",
|
||||||
|
1280596037: "SOFTDFE",
|
||||||
}
|
}
|
||||||
|
|
||||||
SIGNAL_DATA_MARKER = 1313304915
|
SIGNAL_DATA_MARKER = 1313304915
|
||||||
|
|||||||
@ -172,58 +172,70 @@ class RadarFileReader:
|
|||||||
[]
|
[]
|
||||||
) # (start_offset_words, size_words, name)
|
) # (start_offset_words, size_words, name)
|
||||||
|
|
||||||
def _parse_legacy_block_header(
|
def _parse_fw_block_header(self, start_index: int) -> Optional[Tuple[int, int, str]]:
|
||||||
self, start_index: int
|
|
||||||
) -> Optional[Tuple[int, int, str]]:
|
|
||||||
"""Parses a legacy block header (marker 0x5A5A5A5A)."""
|
|
||||||
try:
|
|
||||||
name_id = self.data_vector[start_index + LEGACY_NAME_OFFSET_WORDS]
|
|
||||||
block_name = ds.BLOCK_TYPE_MAP.get(name_id, f"UNKNOWN_{name_id}")
|
|
||||||
|
|
||||||
# The size in the header is the total size of the block data
|
|
||||||
payload_size_bytes = self.data_vector[
|
|
||||||
start_index + LEGACY_SIZE_OFFSET_WORDS
|
|
||||||
]
|
|
||||||
if not (0 < payload_size_bytes < (20 * 1024 * 1024)):
|
|
||||||
self.log.debug(
|
|
||||||
f"Invalid legacy payload size {payload_size_bytes} at word {start_index}."
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
|
|
||||||
payload_size_words = (payload_size_bytes + 3) // 4
|
|
||||||
# For legacy blocks, the payload starts after the marker.
|
|
||||||
# The exact header size is complex, but we assume the data follows immediately.
|
|
||||||
payload_start_offset = start_index
|
|
||||||
return payload_start_offset, payload_size_words, block_name
|
|
||||||
except IndexError:
|
|
||||||
self.log.warning(
|
|
||||||
f"IndexError while parsing legacy block at word {start_index}."
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
|
|
||||||
def _parse_fw_block_header(
|
|
||||||
self, start_index: int
|
|
||||||
) -> Optional[Tuple[int, int, str]]:
|
|
||||||
"""Parses a firmware block header (marker 0x7A7A7A7A)."""
|
"""Parses a firmware block header (marker 0x7A7A7A7A)."""
|
||||||
try:
|
try:
|
||||||
name_id = self.data_vector[start_index + FW_NAME_OFFSET_WORDS]
|
name_id = self.data_vector[start_index + FW_NAME_OFFSET_WORDS]
|
||||||
block_name = ds.BLOCK_TYPE_MAP.get(name_id, f"UNKNOWN_{name_id}")
|
block_name = ds.BLOCK_TYPE_MAP.get(name_id)
|
||||||
|
|
||||||
|
if not block_name:
|
||||||
|
self.log.debug(f"Found unknown Firmware block with ID: {name_id}")
|
||||||
|
block_name = f"UNKNOWN_{name_id}"
|
||||||
|
|
||||||
payload_size_bytes = self.data_vector[start_index + FW_SIZE_OFFSET_WORDS]
|
payload_size_bytes = self.data_vector[start_index + FW_SIZE_OFFSET_WORDS]
|
||||||
if not (0 < payload_size_bytes < (20 * 1024 * 1024)):
|
if not (0 < payload_size_bytes < (20 * 1024 * 1024)):
|
||||||
self.log.debug(
|
self.log.debug(f"Invalid firmware payload size {payload_size_bytes} at word {start_index}.")
|
||||||
f"Invalid firmware payload size {payload_size_bytes} at word {start_index}."
|
|
||||||
)
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
payload_size_words = (payload_size_bytes + 3) // 4
|
payload_size_words = (payload_size_bytes + 3) // 4
|
||||||
# For firmware blocks, the payload starts after the 8-word header.
|
|
||||||
payload_start_offset = start_index + FW_HEADER_SIZE_WORDS
|
payload_start_offset = start_index + FW_HEADER_SIZE_WORDS
|
||||||
return payload_start_offset, payload_size_words, block_name
|
return payload_start_offset, payload_size_words, block_name
|
||||||
except IndexError:
|
except IndexError:
|
||||||
self.log.warning(
|
self.log.warning(f"IndexError while parsing firmware block at word {start_index}.")
|
||||||
f"IndexError while parsing firmware block at word {start_index}."
|
return None
|
||||||
)
|
|
||||||
|
def _parse_fw_block_header(self, start_index: int) -> Optional[Tuple[int, int, str]]:
|
||||||
|
"""Parses a firmware block header (marker 0x7A7A7A7A)."""
|
||||||
|
try:
|
||||||
|
name_id = self.data_vector[start_index + FW_NAME_OFFSET_WORDS]
|
||||||
|
block_name = ds.BLOCK_TYPE_MAP.get(name_id)
|
||||||
|
|
||||||
|
if not block_name:
|
||||||
|
self.log.debug(f"Found unknown Firmware block with ID: {name_id}")
|
||||||
|
block_name = f"UNKNOWN_{name_id}"
|
||||||
|
|
||||||
|
payload_size_bytes = self.data_vector[start_index + FW_SIZE_OFFSET_WORDS]
|
||||||
|
if not (0 < payload_size_bytes < (20 * 1024 * 1024)):
|
||||||
|
self.log.debug(f"Invalid firmware payload size {payload_size_bytes} at word {start_index}.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
payload_size_words = (payload_size_bytes + 3) // 4
|
||||||
|
payload_start_offset = start_index + FW_HEADER_SIZE_WORDS
|
||||||
|
return payload_start_offset, payload_size_words, block_name
|
||||||
|
except IndexError:
|
||||||
|
self.log.warning(f"IndexError while parsing firmware block at word {start_index}.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _parse_legacy_block_header(self, start_index: int) -> Optional[Tuple[int, int, str]]:
|
||||||
|
"""Parses a legacy block header (marker 0x5A5A5A5A)."""
|
||||||
|
try:
|
||||||
|
name_id = self.data_vector[start_index + LEGACY_NAME_OFFSET_WORDS]
|
||||||
|
block_name = ds.BLOCK_TYPE_MAP.get(name_id)
|
||||||
|
|
||||||
|
if not block_name:
|
||||||
|
self.log.debug(f"Found unknown Legacy block with ID: {name_id}")
|
||||||
|
block_name = f"UNKNOWN_{name_id}"
|
||||||
|
|
||||||
|
payload_size_bytes = self.data_vector[start_index + LEGACY_SIZE_OFFSET_WORDS]
|
||||||
|
if not (0 < payload_size_bytes < (20 * 1024 * 1024)):
|
||||||
|
self.log.debug(f"Invalid legacy payload size {payload_size_bytes} at word {start_index}.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
payload_size_words = (payload_size_bytes + 3) // 4
|
||||||
|
payload_start_offset = start_index
|
||||||
|
return payload_start_offset, payload_size_words, block_name
|
||||||
|
except IndexError:
|
||||||
|
self.log.warning(f"IndexError while parsing legacy block at word {start_index}.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def load_and_find_blocks(self) -> bool:
|
def load_and_find_blocks(self) -> bool:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user