Fan control rework (thermald → 4Hz):
- DT_TRML 0.5s → 0.25s (thermald loop + fan PID now at 4Hz)
- New clamp rules based on (gear, cruise_engaged, standstill):
parked → 0-100%
in drive + cruise engaged (any speed) → 30-100%
in drive + cruise off + standstill → 10-100%
in drive + cruise off + moving → 30-100%
- thermald now reads gearShifter (via carState) and controlsState.enabled,
passes them to fan_controller.update()
- Removed BENCH_MODE special case — new rules cover bench automatically
- Removed ignition-based branches — gear is the correct signal
System health overlay:
- Subscribed UI to peripheralState so we can read fanSpeedRpm
- Added FAN row: actual fan% (RPM / 65) to sit alongside LAG/DROP/TEMP/CPU/MEM.
Shows the real fan output vs. what the PID is asking for.
Migrate hot signals from paramsMemory to cereal (frogpilotCarControl):
- Added latRequested @3 and noLatLaneChange @4 to FrogPilotCarControl schema
- controlsd sets FPCC.latRequested / FPCC.noLatLaneChange (send-on-change
already gates the IPC)
- modeld reads from sm['frogpilotCarControl'] (added to its subscribers)
instead of paramsMemory (saves ~20 file-read syscalls/sec)
- carcontroller reads from frogpilot_variables (set in-process by controlsd)
instead of paramsMemory (saves ~100 file-read syscalls/sec in 100Hz path).
Dropped carcontroller's now-unused Params instance and import.
- UI (ui.cc, onroad.cc) reads from sm['frogpilotCarControl'].noLatLaneChange
- Removed LatRequested and no_lat_lane_change param registrations + defaults
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
79 lines
2.1 KiB
Cap'n Proto
Executable File
79 lines
2.1 KiB
Cap'n Proto
Executable File
using Cxx = import "./include/c++.capnp";
|
|
$Cxx.namespace("cereal");
|
|
|
|
@0xb526ba661d550a59;
|
|
|
|
# custom.capnp: a home for empty structs reserved for custom forks
|
|
# These structs are guaranteed to remain reserved and empty in mainline
|
|
# cereal, so use these if you want custom events in your fork.
|
|
|
|
# you can rename the struct, but don't change the identifier
|
|
struct FrogPilotCarControl @0x81c2f05a394cf4af {
|
|
alwaysOnLateral @0 :Bool;
|
|
speedLimitChanged @1 :Bool;
|
|
trafficModeActive @2 :Bool;
|
|
# CLEARPILOT: migrated from paramsMemory to avoid file-read syscalls in modeld/UI/carcontroller
|
|
latRequested @3 :Bool; # controlsd's request to enable lat before ramp-up delay
|
|
noLatLaneChange @4 :Bool; # lat is temporarily suppressed during a lane change
|
|
}
|
|
|
|
struct FrogPilotCarState @0xaedffd8f31e7b55d {
|
|
struct ButtonEvent {
|
|
enum Type {
|
|
lkas @0;
|
|
}
|
|
}
|
|
}
|
|
|
|
struct FrogPilotDeviceState @0xf35cc4560bbf6ec2 {
|
|
freeSpace @0 :Int16;
|
|
usedSpace @1 :Int16;
|
|
}
|
|
|
|
struct FrogPilotNavigation @0xda96579883444c35 {
|
|
approachingIntersection @0 :Bool;
|
|
approachingTurn @1 :Bool;
|
|
}
|
|
|
|
struct FrogPilotPlan @0x80ae746ee2596b11 {
|
|
accelerationJerk @0 :Float32;
|
|
accelerationJerkStock @1 :Float32;
|
|
adjustedCruise @2 :Float64;
|
|
conditionalExperimental @3 :Bool;
|
|
desiredFollowDistance @4 :Int16;
|
|
egoJerk @5 :Float32;
|
|
egoJerkStock @6 :Float32;
|
|
jerk @7 :Float32;
|
|
laneWidthLeft @8 :Float32;
|
|
laneWidthRight @9 :Float32;
|
|
minAcceleration @10 :Float32;
|
|
maxAcceleration @11 :Float32;
|
|
redLight @12 :Bool;
|
|
safeObstacleDistance @13 :Int16;
|
|
safeObstacleDistanceStock @14 :Int16;
|
|
slcOverridden @15 :Bool;
|
|
slcOverriddenSpeed @16 :Float64;
|
|
slcSpeedLimit @17 :Float64;
|
|
slcSpeedLimitOffset @18 :Float32;
|
|
stoppedEquivalenceFactor @19 :Int16;
|
|
tFollow @20 :Float32;
|
|
unconfirmedSlcSpeedLimit @21 :Float64;
|
|
vCruise @22 :Float32;
|
|
vtscControllingCurve @23 :Bool;
|
|
}
|
|
|
|
struct CustomReserved5 @0xa5cd762cd951a455 {
|
|
}
|
|
|
|
struct CustomReserved6 @0xf98d843bfd7004a3 {
|
|
}
|
|
|
|
struct CustomReserved7 @0xb86e6369214c01c8 {
|
|
}
|
|
|
|
struct CustomReserved8 @0xf416ec09499d9d19 {
|
|
}
|
|
|
|
struct CustomReserved9 @0xa1680744031fdb2d {
|
|
}
|