K1Guitar/tools/k1_harness/transports/rtt_session.py

41 lines
1.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""RTT 传输:薄封装 rtt_pitch_reg_test 的 J-Link/RTT 实现(单一事实来源,避免复制)."""
from __future__ import annotations
from contextlib import contextmanager
from ..paths import TOOLS_DIR # noqa: F401 (确保 sys.path 已注入)
import rtt_pitch_reg_test as _rtt
# 直接复用,保持零行为变更
connect_jlink = _rtt.connect_jlink
find_rtt_control_block = _rtt.find_rtt_control_block
wait_rtt_ready = _rtt.wait_rtt_ready
RttSession = _rtt.RttSession
analyze_lines = _rtt.analyze_lines
CheckResult = _rtt.CheckResult
@contextmanager
def open_session(device: str = "AT32F403AC"):
"""连接 J-Link + 启动 RTTyield RttSession退出时清理."""
_rtt.import_deps()
jlink = connect_jlink(device)
try:
cb = find_rtt_control_block(jlink)
if cb is None:
raise SystemExit("SEGGER RTT control block 未找到(固件未运行?)")
print(f"RTT CB @ 0x{cb:08X}", flush=True)
jlink.rtt_start(cb)
wait_rtt_ready(jlink)
sess = RttSession(jlink)
sess.pump(0.3)
yield sess
finally:
try:
jlink.rtt_stop()
except Exception:
pass
jlink.close()