meshcore_py/src/meshcore
Matthew Wolter d9197faf3a G1: F06 — wrap handle_rx dispatch in catch-all try/except
Why: handle_rx is invoked from a detached task in MessageReader, so any
exception escaping its ~850-line if/elif dispatch is silently swallowed
by asyncio as "Task exception was never retrieved." The only crash
guard previously was a single try/except IndexError around the first
byte read; everything past line 73 was unguarded. This commit adds an
umbrella try: ... except Exception as e: around the entire dispatch
body that logs the exception class, message, raw frame hex, and full
traceback via logger.error. The umbrella neutralizes the crash surface
of F10, F11, N07, N08, R01, NEW-B, and NEW-C, which the next commits
will then fix individually now that they are observable.

Refs: Forensics report finding F06 (umbrella crash protection)
2026-04-11 18:06:53 -07:00
..
commands Use firmware suggested_timeout for login and path discovery sync methods 2026-04-08 21:42:21 -07:00
__init__.py Export binary req type 2025-09-07 12:28:26 -07:00
ble_cx.py Add optional bleak package import handling 2026-02-10 10:30:51 +01:00
connection_manager.py Revert "Refactor command system to be queue based" 2025-09-04 15:08:08 -07:00
events.py add code_string to error event 2026-03-07 21:05:00 -04:00
lpp_json_encoder.py fix lpp values for voltage and current as signed 2026-02-17 08:52:56 -04:00
meshcore.py if possible, add path and rssi to channel messages 2026-03-05 11:50:41 -04:00
meshcore_parser.py don't put chan_name in log_rx if we don't know it 2026-03-29 10:53:43 -04:00
packets.py implement advert_path 2026-03-07 17:42:41 -04:00
parsing.py Revert "Refactor command system to be queue based" 2025-09-04 15:08:08 -07:00
reader.py G1: F06 — wrap handle_rx dispatch in catch-all try/except 2026-04-11 18:06:53 -07:00
serial_cx.py Use the frame start once we've found it 2026-03-21 21:08:04 -07:00
tcp_cx.py apply frame header fix to tcp as well 2026-03-22 12:51:01 -04:00