traces
This commit is contained in:
59
ccu_emulator/frames.py
Normal file
59
ccu_emulator/frames.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from h8536.bench_connect_lcd import format_frame, frame_checksum, frame_checksum_ok, parse_frame
|
||||
|
||||
|
||||
FRAME_LENGTH = 6
|
||||
|
||||
HEARTBEAT_FRAME = bytes.fromhex("0000000080DA")
|
||||
|
||||
# Command 0, selector 0, value 0x8080. This seeds E000/E800 selector zero.
|
||||
ACTIVE_SEED_COMMAND0 = bytes.fromhex("00000080805A")
|
||||
|
||||
# The older bench cadence sequence. It is still useful as an optional wake-up
|
||||
# strategy because the real panel proved timing-sensitive around these frames.
|
||||
CONNECT_CADENCE_SEQUENCE = (
|
||||
bytes.fromhex("04000040001E"),
|
||||
bytes.fromhex("0400008000DE"),
|
||||
bytes.fromhex("040000C0009E"),
|
||||
)
|
||||
|
||||
# Command 5, selector 0x0040, value ignored. ROM trace shows this is the safest
|
||||
# neutral report-consume candidate.
|
||||
NEUTRAL_ACK_FRAME = bytes.fromhex("05004000001F")
|
||||
|
||||
|
||||
def build_frame(command: int, selector: int, value: int) -> bytes:
|
||||
"""Build a six-byte host frame for simple page-0/page-1 selectors.
|
||||
|
||||
This helper covers the selector encodings we currently use in fake-CCU
|
||||
probes. Keep more exotic mapping in one place when we learn it.
|
||||
"""
|
||||
|
||||
if not 0 <= command <= 0xFF:
|
||||
raise ValueError("command byte out of range")
|
||||
if not 0 <= selector <= 0x01FF:
|
||||
raise ValueError("selector out of supported range 0x000-0x1FF")
|
||||
if not 0 <= value <= 0xFFFF:
|
||||
raise ValueError("value out of range")
|
||||
|
||||
if selector <= 0x007F:
|
||||
byte1 = 0x00
|
||||
byte2 = selector
|
||||
elif selector <= 0x017F:
|
||||
byte1 = 0x01
|
||||
byte2 = selector - 0x0080
|
||||
else:
|
||||
byte1 = 0x02
|
||||
byte2 = selector - 0x0180
|
||||
|
||||
frame = bytes(
|
||||
[
|
||||
command & 0xFF,
|
||||
byte1 & 0xFF,
|
||||
byte2 & 0xFF,
|
||||
(value >> 8) & 0xFF,
|
||||
value & 0xFF,
|
||||
]
|
||||
)
|
||||
return frame + bytes([frame_checksum(frame)])
|
||||
Reference in New Issue
Block a user