v2.16-beta — Flipper CAN Capture (please test) + shared protocol core
Pre-releaseTesting build. The headline is a new Flipper CAN Capture — and it is read-only, so it is safe to run on a live car. Please try it and report back.
New: CAN Capture (Flipper)
Settings → CAN Capture ON, then run in Listen-Only. Every received frame is written to the SD card at:
/ext/apps_data/tesla_mod/captures/cap_<n>.log
in candump format ((sec.usec) can0 ID#DATA). The running screen shows REC <n>. It never transmits.
The ESP32 already had capture (SD dump + the port-82 stream); this brings the Flipper to parity, so no laptop tap is needed to grab a log.
Why it matters
A capture drops straight into the checksum cracker:
python3 tools/tesla_crc_cracker.py --id 0xNNN cap_<n>.log
Captures of counter+checksum frames like 0x485 (Highland gear shift) and 0x229 (pre-Highland stalk) are exactly what is needed to recover their checksum and unlock those injections.
Under the hood
- Shared protocol core — Flipper and ESP32 now share one CAN frame type, the enums,
FSDState, the Tesla additive checksum, the candump formatter, and the stateless frame helpers. The checksum (which the car rejects on mismatch) is now a single tested implementation.OpModewas renumbered to the ESP32's persisted values, so there is no settings migration and behavior is unchanged. - 186 host tests + CI gate — every protocol-core handler now has a host test with an independent oracle; CI runs them on every push/PR and gates both builds, so a one-byte regression goes red instead of reaching a car.
How to help
- Flipper + CAN add-on on a car → CAN Capture ON → Listen-Only.
- Confirm
cap_*.logappears underapps_data/tesla_mod/captures/with(t) can0 ID#DATAlines. - Bonus: run the cracker on a capture and report what it finds.
- File a
car_compatibilityissue with your model / year / HW / firmware and attach the capture.
Downloads below: tesla_mod.fap (Flipper) and the ESP32 .bin variants, built by CI.
Thanks: @vrs11 (ESP32 HTTP CAN log + the candump format this mirrors), @BenjaminFaal (0x485 PM_locState finding driving the capture→cracker workflow), and everyone testing on-car.