Adds back the UI plumbing that the baseline controlsd doesn't have, so
the existing UI features keep working without changing driving logic:
- ScreenDisplayMode 5-state machine (auto-normal, auto-nightrider,
manual normal, screen-off, manual nightrider) driven by the LFA
debug button + gear edges. Replaces baseline's simple 0..2 cycle.
Pure params write — no actuator effect.
- Speed/cruise-warning overlay tick at ~2Hz feeding SpeedState, which
writes ClearpilotSpeedDisplay / ClearpilotSpeedLimitDisplay /
ClearpilotCruiseWarning for the onroad UI. Reads gpsLocation,
CarSpeedLimit, and CS.cruiseState — no actuator effect.
- frogpilot_variables.no_lat_lane_change is now populated alongside
the existing Params write, so the perf-optimized carcontroller (which
takes the bit as an argument instead of re-reading Params on the
100Hz hot path) still sees the lane-change suppression signal.
- ScreenDisplayMode init switched from put_bool to put_int (UI reads
it as int).
- gpsLocation added to SubMaster (ignore_alive/avg_freq/valid set,
since gpsd is a ClearPilot addition not present everywhere).
No changes to controlsd's lateral or longitudinal control paths.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>