mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2026-04-28 03:08:08 +00:00
101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Сравнение трасс decode по carraw3 vs pointraw_3 для кадра pkt[33] (car: CRC fail)."""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
_TOOLS = Path(__file__).resolve().parent
|
|
if str(_TOOLS) not in sys.path:
|
|
sys.path.insert(0, str(_TOOLS))
|
|
|
|
from ir_decoder_raw_sim import (
|
|
BIT_TIME_US,
|
|
RISE_MAX,
|
|
RISE_MIN,
|
|
SimState,
|
|
first_rx,
|
|
parse_raw_csv,
|
|
segments_to_edges,
|
|
tick,
|
|
)
|
|
|
|
|
|
def run_traced(path: Path) -> tuple[SimState, list[dict]]:
|
|
rows = parse_raw_csv(path)
|
|
assert rows is not None
|
|
edges = segments_to_edges(rows)
|
|
st = SimState()
|
|
tr: list[dict] = []
|
|
for t_us, rising in edges:
|
|
tick(st, t_us, rising, BIT_TIME_US, trace_rise=tr)
|
|
return st, tr
|
|
|
|
|
|
def main() -> None:
|
|
root = Path(__file__).resolve().parents[1] / "Analyzer" / "raw"
|
|
car_p = root / "carraw3.txt"
|
|
pt_p = root / "pointraw_3.txt"
|
|
st_c, tr_c = run_traced(car_p)
|
|
st_p, tr_p = run_traced(pt_p)
|
|
|
|
bad_i = next(i for i, x in enumerate(st_c.packets) if not x[0])
|
|
print(f"carraw3: bad packet index {bad_i}, bytes {st_c.packets[bad_i][2].hex()}")
|
|
print(f"carraw3 packets={len(st_c.packets)} ok={sum(1 for x in st_c.packets if x[0])}")
|
|
print(f"pointraw_3 packets={len(st_p.packets)} ok={sum(1 for x in st_p.packets if x[0])}")
|
|
print(f"rise window us: min={RISE_MIN} max={RISE_MAX} bit={BIT_TIME_US}")
|
|
print()
|
|
|
|
# Пока кадр №bad_i собирается, в списке уже bad_i завершённых пакетов → len(packets)==bad_i.
|
|
build_i = bad_i
|
|
|
|
def frame_trace(tr: list[dict]) -> list[dict]:
|
|
return [r for r in tr if r["n_pkt"] == build_i]
|
|
|
|
fc = frame_trace(tr_c)
|
|
fp = frame_trace(tr_p)
|
|
print(
|
|
f"decode rises while building packet[{bad_i}] (trace n_pkt=={build_i}): "
|
|
f"car {len(fc)} vs point {len(fp)} lines"
|
|
)
|
|
print("--- car (first 40 decode steps of this frame) ---")
|
|
for i, r in enumerate(fc[:40]):
|
|
br = r["branch"]
|
|
ex = ""
|
|
if br == "ceil":
|
|
ex = f" hc={r['hc']} lc={r['lc']} ac={r['ac']}"
|
|
print(
|
|
f" {i:2} t={r['t_us'] / 1e6:.6f}s rp={r['rp']} ht={r['ht']} lt={r['lt']} "
|
|
f"{br} bits_out={r['bits_out']} i_buf={r['i_buf']}{ex}"
|
|
)
|
|
print("--- point (first 40) ---")
|
|
for i, r in enumerate(fp[:40]):
|
|
br = r["branch"]
|
|
ex = ""
|
|
if br == "ceil":
|
|
ex = f" hc={r['hc']} lc={r['lc']} ac={r['ac']}"
|
|
print(
|
|
f" {i:2} t={r['t_us'] / 1e6:.6f}s rp={r['rp']} ht={r['ht']} lt={r['lt']} "
|
|
f"{br} bits_out={r['bits_out']} i_buf={r['i_buf']}{ex}"
|
|
)
|
|
|
|
print()
|
|
# Первое расхождение по (rp, ht, lt, branch, bits_out)
|
|
for i, (a, b) in enumerate(zip(fc, fp)):
|
|
ka = (a["rp"], a["ht"], a["lt"], a["branch"], a["bits_out"])
|
|
kb = (b["rp"], b["ht"], b["lt"], b["branch"], b["bits_out"])
|
|
if ka != kb:
|
|
print(f"First decode diff at step {i} within frame:")
|
|
print(f" car {a}")
|
|
print(f" point {b}")
|
|
break
|
|
else:
|
|
if len(fc) != len(fp):
|
|
print(f"Same tuples for min(len)={min(len(fc), len(fp))}; length car={len(fc)} point={len(fp)}")
|
|
else:
|
|
print("Identical decode trace for full frame (unexpected if CRC differs)")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|