From 87cfbabb4a95d0e9e6491a066bfce5edd2e1071f Mon Sep 17 00:00:00 2001 From: jack Date: Mon, 13 Jul 2026 13:38:45 -0700 Subject: [PATCH] fix(serialcomm): support dynamic family sensor count in binary parser Previously, parse_binary_data() hardcoded P-family's sensor count (244) for all non-X wafers, causing misalignment when parsing A/B/C/D/E/F wafers. Now passes family_code to _parse_p_binary(). --- src/pygui/serialcomm/data_parser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pygui/serialcomm/data_parser.py b/src/pygui/serialcomm/data_parser.py index dea1337..b91ee82 100644 --- a/src/pygui/serialcomm/data_parser.py +++ b/src/pygui/serialcomm/data_parser.py @@ -150,19 +150,19 @@ def parse_binary_data(data_bytes: bytes, family_code: str) -> Optional[list[list if family_code == "X": return _parse_x_binary(data_bytes) else: - return _parse_p_binary(data_bytes) + return _parse_p_binary(data_bytes, family_code) except Exception as exc: log.error("Binary parse failed: %s", exc) return None -def _parse_p_binary(data_bytes: bytes) -> list[list[str]]: +def _parse_p_binary(data_bytes: bytes, family_code: str = "P") -> list[list[str]]: """Parse P-family (and A/B/C/D/E/F) binary data. Each block of 256 readings has 244 valid + 12 overhead. Valid readings are chunked into rows of the family's sensor count (244). """ - sensor_count = sensor_count_for("P") + sensor_count = sensor_count_for(family_code or "P") readings: list[str] = [] # Read 2 bytes at a time (UInt16 little-endian) @@ -180,7 +180,7 @@ def _parse_p_binary(data_bytes: bytes) -> list[list[str]]: result.append(readings[idx : idx + sensor_count]) idx += sensor_count - log.info("Parsed P-family: %d rows × %d cols", len(result), sensor_count) + log.info("Parsed %s-family: %d rows × %d cols", family_code or "P", len(result), sensor_count) return result