feat: rewrite SniffSession with live streaming and REPL auto-load

Replace lightweight async SniffSession with persistent synchronous
session using raw pyserial (mirroring SimSession pattern). Background
reader thread decodes and prints trace frames live as they arrive.

API:
  session = SniffSession.open()
  session.start_15693()          # live streaming (default)
  session.start_15693(live=False) # legacy batch mode
  session.stop()                 # or button press to pause/resume
  session.entries                # all captured frames
  session.clear()

.pythonstartup.py auto-creates session in sniff mode.
This commit is contained in:
michael
2026-03-19 12:34:05 -07:00
parent 580ab2b63f
commit e90a907630
2 changed files with 281 additions and 53 deletions

View File

@@ -95,6 +95,22 @@ for module_name, attr_name in imports:
if loaded:
print(f"[pm3py:{_MODE}] Loaded: {', '.join(loaded.keys())}")
if _MODE == "core":
try:
pm3 = Proxmark3.sync()
print()
print("Synchronous connection established")
print()
except Exception as e:
print(f" (Proxmark3 connection failed: {e})")
if _MODE == "sniff":
try:
session = SniffSession.open()
print("Sniff session ready -- session.start_15693()")
except Exception as e:
print(f" (Sniff session failed: {e})")
if failed:
print(f"\n[pm3py:{_MODE}] Failed:")
for name, (mod, err) in failed.items():