Release notes
Release notes for the CAN Commander Flipper Zero app and the firmware features it depends on.
Mirrored from CAN_Commander_FlipperZero/can_commander/CHANGELOG.md in the repository.
v2.3.1 (Current)
This release spans two major feature additions (Replay tool and WiFi CLI over TCP), firmware compatibility checking, LED brightness control, RAM-usage work, Reverse-mode quick jumps, and a series of defaults/UX fixes. It supersedes v2.1.1 (previous release).
Compatibility
- Minimum ESP32 firmware supported: v2.2. The app performs a firmware version handshake at startup (see below). Pairing this app with firmware < v2.2 surfaces an in-app warning but otherwise lets the user continue.
New Features
Replay tool (end-to-end)
Companion UI for the firmware's new replay tool (Tool ID 12). Records CAN
frames for a single ID with original inter-frame timing, then plays them back.
- New menu entry under Tools → Control & Injection → Replay.
- Standalone args editor lets the user set
bus,id, andextbefore starting.countandspeedare not exposed in the editor — the dashboard owns them at runtime. - Dedicated dashboard view (
AppDashboardReplay) with a state-aware layout and stable row positions (bus/ID never shifts between states). - Context-sensitive controls:
- IDLE (no frames recorded): OK → start recording
- IDLE (has recorded frames):
- OK → play back N loops at 100% speed
- UP → clear recorded frames (press OK afterward to record again)
- LEFT / RIGHT → decrement / increment loop count (1–99)
- RECORDING: OK → stop, live elapsed-time counter and frame count
- REPLAYING: OK or DOWN → stop, live
frame/totalandloop/total
- Event parsing covers every firmware event format:
ready,recording started,recording stopped,buffer full,replay started,replay complete,state=… frames=…,progress=… remaining_loops=…,recording cleared. - Auto RE quick-jump: from the Byte Watcher (Auto Reverse Engineer) monitor
phase, pressing Left on a selected CAN ID stops the current tool and
starts Replay with the matching
bus/id/ext(mirrors the existing Right action that starts Bit Tracker). - Monitor scene polls
cmd=statuson each tick while the replay dashboard is active, so the frame-counter and loop-progress update live (firmware does not stream per-frame progress events automatically).
Firmware version check / compatibility warning
- Added UART protocol parsing of the firmware
GET_INFO(0x02) response'sSTATUS_EVTpayload:[major, minor, string_len, version string…]. - Runs at app boot (after a settling delay and clean UART open) and on Settings → Connect / Reconnect. Never runs from implicit reconnects in the tool-start path, so tools don't re-trigger the handshake.
- If the firmware version is below
v2.2(or the command is unsupported and times out — indicating pre-2.2 firmware), the app pushes a status screen on top of the main menu at boot, displaying:Firmware out of date! Firmware is: <detected or "unknown"> Firmware needs: v2.2+ App: v2.3.1 Update at: www.cancommander.com - Dismissing the warning (back button) returns the user to the main menu and sets a "shown" flag so the warning doesn't re-fire during the same session.
LED brightness control
- Added UART command
CcCmdLedSetCfg = 0x60and thecc_client_led_set_brightness()helper (single-byte payload, 1–10 = 10%–100%). - Settings menu converted from
SubmenutoVariableItemList, adding a new LED Brightness item with left/right cycling through values 1–10 and live firmware updates on each change. Default is 5 (50%). - All existing Settings entries (Connect/Reconnect, Bus Config, Bus Filters, WiFi Settings, Stats, Ping, Get Info) preserved as clickable action items in the same list.
WiFi CLI over TCP (major feature, app + firmware)
The CAN Commander board can now broadcast a Wi-Fi access point and expose
the full CLI over TCP. Any device on the AP that can open a raw TCP
socket — laptop (netcat/telnet), phone, ESP32-based dev kit, etc. —
becomes a remote terminal for the board with zero hardware UART
required. Same exact command set as the USB CLI (read frames, set
filters, start tools, drive injection, manage DBC, etc.).
App-side support:
- New
scenes/wifi_menu.cscene and WiFi Settings entry in the Settings menu, backed by anargs_wifi_cfg[192]buffer in the App struct. - Edit SSID, password, autostart, and AP-on flags directly from the Flipper UI — values are persisted to NVS on the ESP32.
- Uses
cc_client_wifi_get_cfg/cc_client_wifi_set_cfg(new UART command IDs0x50/0x51).
Connect from any device with a terminal:
$ nc <board_ip> 7777 # macOS / Linux / WSL
> telnet <board_ip> 7777 # Windows / cross-platform
Or via PuTTY, Termius, JuiceSSH (Android), Termius/iSH (iOS), or any other TCP/raw-mode terminal.
Companion app hooks (planned / in-progress):
- CYD (Cheap Yellow Display, ESP32 + 2.8" touchscreen) — touch UI for injection slots, DBC dashboards, and Replay control over Wi-Fi.
- M5Stack Cardputer — pocket-size keyboard CLI client tuned for the CAN Commander command set.
- Pineapple Pager — passive monitoring + injection trigger surface while in the field.
These third-party clients all reuse the same TCP CLI exposed by the firmware, so any new command added to the firmware's CLI is immediately available to all of them with no protocol changes required.
UX and Defaults
- About screen now shows both the app and firmware versions:
CAN Commander App: v2.3.1 Firmware: v<detected> (or "unknown") Made by Matthew KuKanich www.cancommander.com - Default bus changed from
bothtocan0across all the tools that previously defaulted toboth:read_all,speed,valtrack,unique_ids,dbc_decode
- Reverse Engineer defaults tuned:
calibration_ms:10000→20000monitor_ms:20000→200000
- Write Frames default
interval_msdashboard display now syncs cleanly with the tool's internalperiod_ms. - Dashboard live updates during Replay recording/replay no longer require
button input — the monitor scene periodically refreshes for
AppDashboardReverseand the newAppDashboardReplaymode.
Reliability
- Ping retry:
app_connectnow retries the UART ping up to 3 times with a 50 ms delay between attempts. Fixes the intermittent "CAN Commander not connected" pop-up when the ESP32 was fine but the first ping glitched. - Boot-time handshake: app startup now adds a 400 ms settle delay after
enabling OTG power, then uses
app_connect(force_reconnect=true)to get a clean UART open before the firmware version check runs.
Memory / Performance
Screen streaming through qFlipper / mobile app can push a CAN Commander session to the RAM limit. Three major reductions were made:
- Dashboard model union — all mode-specific arrays (read, speed, valtrack, unique_ids, bittrack, reverse, obd, dbc_decode, custom_inject, replay) were moved into an anonymous union of anonymous structs. Since only one tool is active at a time, the model's mode-specific section now costs the size of the largest member (~1.7 KB) instead of the sum (~5.5 KB). ~3.5 KB saved.
- Lazy-allocated DBC signal cache —
App.dbc_config_signalschanged from a fixedAppDbcSignalCache[16]array (6.8 KB, always resident) to a pointer that ismalloc'd on first DBC use andfree'd on reset/exit. ~6.8 KB saved whenever DBC features are not in use. - Monitor buffer caps —
APP_MONITOR_KEEP_MAXreduced from2500to1500bytes;APP_MONITOR_KEEP_TAILfrom1500to1000. ~1 KB saved.
- Stack size reduced from
14 * 1024→10 * 1024inapplication.fam.
Note: with the DBC array lazy-allocated, using DBC features while streaming can still push RAM over budget on some qFlipper sessions.
Build / Tooling
fap_versionadded toapplication.fam("2.3").application.famsources list now includesscenes/wifi_menu.c.PROGRAM_VERSIONbumped:v2.1.1→v2.3.1.- New compile-time constants in
can_commander.h:APP_FW_MIN_MAJOR = 2,APP_FW_MIN_MINOR = 2APP_FW_MIN_STRING "v2.2"APP_FW_UPDATE_URL "www.cancommander.com"
Previous release — v2.1.1
Baseline for this changelog. Feature set: Read All, Filtered, Write, Speed, ValTrack, UniqueIds, BitTrack, Reverse, OBD PID, DBC Decode, Custom Inject. No firmware version handshake, no Replay tool, no LED brightness, no WiFi settings scene, all mode-specific dashboard fields allocated concurrently.