#pragma once #include "frogpilot/ui/qt/offroad/frogpilot_settings.h" class FrogPilotLongitudinalPanel : public FrogPilotListWidget { Q_OBJECT public: explicit FrogPilotLongitudinalPanel(FrogPilotSettingsWindow *parent); signals: void openSubPanel(); void openSubSubPanel(); protected: void showEvent(QShowEvent *event) override; private: void updateMetric(bool metric, bool bootRun); void updateToggles(); bool customPersonalityOpen; bool forceOpenDescriptions; bool hasDashSpeedLimits; bool hasPCMCruise; bool isGM; bool isHKGCanFd; bool isToyota; bool isTSK; bool slcOpen; int tuningLevel; float longitudinalActuatorDelay; float startAccel; float stopAccel; float stoppingDecelRate; float vEgoStarting; float vEgoStopping; std::map toggles; QSet advancedLongitudinalTuneKeys = {"EVTuning", "LongitudinalActuatorDelay", "StartAccel", "StopAccel", "StoppingDecelRate", "VEgoStarting", "VEgoStopping"}; QSet aggressivePersonalityKeys = {"AggressiveFollow", "AggressiveFollowHigh", "AggressiveJerkAcceleration", "AggressiveJerkDeceleration", "AggressiveJerkDanger", "AggressiveJerkSpeed", "AggressiveJerkSpeedDecrease", "ResetAggressivePersonality"}; QSet conditionalExperimentalKeys = {"CESpeed", "CESpeedLead", "CECurves", "CELead", "CEModelStopTime", "CENavigation", "CESignalSpeed", "ShowCEMStatus"}; QSet curveSpeedKeys = {"CalibratedLateralAcceleration", "CalibrationProgress", "ResetCurveData", "ShowCSCStatus"}; QSet customDrivingPersonalityKeys = {"AggressivePersonalityProfile", "RelaxedPersonalityProfile", "StandardPersonalityProfile", "TrafficPersonalityProfile"}; QSet longitudinalTuneKeys = {"AccelerationProfile", "DecelerationProfile", "HumanAcceleration", "HumanFollowing", "LeadDetectionThreshold", "MaxDesiredAcceleration", "TrailerLoad", "TacoTune"}; QSet qolKeys = {"CustomCruise", "CustomCruiseLong", "ForceStops", "IncreasedStoppedDistance", "MapGears", "ReverseCruise", "SetSpeedOffset"}; QSet relaxedPersonalityKeys = {"RelaxedFollow", "RelaxedFollowHigh", "RelaxedJerkAcceleration", "RelaxedJerkDeceleration", "RelaxedJerkDanger", "RelaxedJerkSpeed", "RelaxedJerkSpeedDecrease", "ResetRelaxedPersonality"}; QSet speedLimitControllerKeys = {"SLCOffsets", "SLCFallback", "SLCOverride", "SLCPriority", "SLCQOL", "SLCVisuals"}; QSet speedLimitControllerOffsetsKeys = {"Offset1", "Offset2", "Offset3", "Offset4", "Offset5", "Offset6", "Offset7"}; QSet speedLimitControllerQOLKeys = {"ForceMPHDashboard", "SetSpeedLimit", "SLCConfirmation", "SLCLookaheadHigher", "SLCLookaheadLower", "SLCMapboxFiller"}; QSet speedLimitControllerVisualKeys = {"ShowSLCOffset", "SpeedLimitSources"}; QSet standardPersonalityKeys = {"StandardFollow", "StandardFollowHigh", "StandardJerkAcceleration", "StandardJerkDeceleration", "StandardJerkDanger", "StandardJerkSpeed", "StandardJerkSpeedDecrease", "ResetStandardPersonality"}; QSet trafficPersonalityKeys = {"TrafficFollow", "TrafficJerkAcceleration", "TrafficJerkDeceleration", "TrafficJerkDanger", "TrafficJerkSpeed", "TrafficJerkSpeedDecrease", "ResetTrafficPersonality"}; QSet parentKeys; FrogPilotParamValueControl *longitudinalActuatorDelayToggle; FrogPilotParamValueControl *startAccelToggle; FrogPilotParamValueControl *stopAccelToggle; FrogPilotParamValueControl *stoppingDecelRateToggle; FrogPilotParamValueControl *vEgoStartingToggle; FrogPilotParamValueControl *vEgoStoppingToggle; FrogPilotSettingsWindow *parent; LabelControl *calibratedLateralAccelerationLabel; LabelControl *calibrationProgressLabel; QJsonObject frogpilotToggleLevels; Params params; Params params_cache{"/cache/params"}; Params params_default{"/dev/shm/params_default"}; Params params_memory{"/dev/shm/params"}; };