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().
This commit is contained in:
@@ -150,19 +150,19 @@ def parse_binary_data(data_bytes: bytes, family_code: str) -> Optional[list[list
|
|||||||
if family_code == "X":
|
if family_code == "X":
|
||||||
return _parse_x_binary(data_bytes)
|
return _parse_x_binary(data_bytes)
|
||||||
else:
|
else:
|
||||||
return _parse_p_binary(data_bytes)
|
return _parse_p_binary(data_bytes, family_code)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
log.error("Binary parse failed: %s", exc)
|
log.error("Binary parse failed: %s", exc)
|
||||||
return None
|
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.
|
"""Parse P-family (and A/B/C/D/E/F) binary data.
|
||||||
|
|
||||||
Each block of 256 readings has 244 valid + 12 overhead.
|
Each block of 256 readings has 244 valid + 12 overhead.
|
||||||
Valid readings are chunked into rows of the family's sensor count (244).
|
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] = []
|
readings: list[str] = []
|
||||||
|
|
||||||
# Read 2 bytes at a time (UInt16 little-endian)
|
# 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])
|
result.append(readings[idx : idx + sensor_count])
|
||||||
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
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user