"""ISO 14443-A sim live trace: firmware CMD_HF_ISO14443A_SIM_TRACE -> entries. Mirrors the SimSession portion of test_trace_scripting.py but for the 14a sim trace path (protocol tag 1, decode_14443a). Uses synthetic response frames fed through SimSession._trace_reader with a mocked serial port — no hardware. """ import struct from unittest.mock import MagicMock from pm3py.core.protocol import RESP_PREAMBLE_MAGIC from pm3py.core.transport import RESP_POSTAMBLE_NOCRC from pm3py.sim.sim_session import SimSession, CMD_HF_ISO14443A_SIM_TRACE from pm3py.trace.decode_iso14a import decode_14443a from pm3py.trace.format import TraceFormatter REQA = bytes.fromhex("26") # reader -> tag, short frame ATQA = bytes.fromhex("0400") # tag -> reader, no CRC def _fmt(): return TraceFormatter(mode="sim", decoder=decode_14443a, crc_len=2, is_tty=False) def _trace_frame(direction, payload): """Build one CMD_HF_ISO14443A_SIM_TRACE response frame (USB, no CRC).""" data = bytes([direction]) + payload header = struct.pack("