November 2nd, 2024 Patch
This commit is contained in:
parent
5145bdbd8d
commit
9c56143539
|
@ -277,7 +277,6 @@ Export('envCython')
|
||||||
|
|
||||||
# Qt build environment
|
# Qt build environment
|
||||||
qt_env = env.Clone()
|
qt_env = env.Clone()
|
||||||
|
|
||||||
qt_modules = ["Widgets", "Gui", "Core", "Network", "Concurrent", "Multimedia", "Quick", "Qml", "QuickWidgets", "Location", "Positioning", "DBus", "Xml"]
|
qt_modules = ["Widgets", "Gui", "Core", "Network", "Concurrent", "Multimedia", "Quick", "Qml", "QuickWidgets", "Location", "Positioning", "DBus", "Xml"]
|
||||||
|
|
||||||
qt_libs = []
|
qt_libs = []
|
||||||
|
|
|
@ -112,7 +112,7 @@ std::unordered_map<std::string, uint32_t> keys = {
|
||||||
{"CurrentRoute", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION},
|
{"CurrentRoute", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION},
|
||||||
{"DisableLogging", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION},
|
{"DisableLogging", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION},
|
||||||
{"DisablePowerDown", PERSISTENT},
|
{"DisablePowerDown", PERSISTENT},
|
||||||
{"DisableUpdates", PERSISTENT | FROGPILOT_STORAGE},
|
{"DisableUpdates", PERSISTENT},
|
||||||
{"DisengageOnAccelerator", PERSISTENT | FROGPILOT_STORAGE},
|
{"DisengageOnAccelerator", PERSISTENT | FROGPILOT_STORAGE},
|
||||||
{"DmModelInitialized", CLEAR_ON_ONROAD_TRANSITION},
|
{"DmModelInitialized", CLEAR_ON_ONROAD_TRANSITION},
|
||||||
{"DongleId", PERSISTENT},
|
{"DongleId", PERSISTENT},
|
||||||
|
@ -339,13 +339,8 @@ std::unordered_map<std::string, uint32_t> keys = {
|
||||||
{"FrogPilotMinutes", PERSISTENT | FROGPILOT_TRACKING},
|
{"FrogPilotMinutes", PERSISTENT | FROGPILOT_TRACKING},
|
||||||
{"FrogPilotToggles", PERSISTENT},
|
{"FrogPilotToggles", PERSISTENT},
|
||||||
{"FrogPilotTogglesUpdated", PERSISTENT},
|
{"FrogPilotTogglesUpdated", PERSISTENT},
|
||||||
{"FrogsGoMoo", PERSISTENT},
|
|
||||||
{"FrogsGoMoosTweak", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VEHICLES},
|
{"FrogsGoMoosTweak", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VEHICLES},
|
||||||
{"FullMap", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VISUALS},
|
{"FullMap", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VISUALS},
|
||||||
{"GameBoyCalibrationParams", PERSISTENT},
|
|
||||||
{"GameBoyDrives", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
|
||||||
{"GameBoyLiveTorqueParameters", PERSISTENT},
|
|
||||||
{"GameBoyScore", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
|
||||||
{"GasRegenCmd", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VEHICLES},
|
{"GasRegenCmd", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VEHICLES},
|
||||||
{"GMapKey", PERSISTENT},
|
{"GMapKey", PERSISTENT},
|
||||||
{"GoatScream", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VISUALS},
|
{"GoatScream", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VISUALS},
|
||||||
|
@ -544,10 +539,6 @@ std::unordered_map<std::string, uint32_t> keys = {
|
||||||
{"TetheringEnabled", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_OTHER},
|
{"TetheringEnabled", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_OTHER},
|
||||||
{"ThemeDownloadProgress", PERSISTENT},
|
{"ThemeDownloadProgress", PERSISTENT},
|
||||||
{"ThemeUpdated", PERSISTENT},
|
{"ThemeUpdated", PERSISTENT},
|
||||||
{"TombRaiderCalibrationParams", PERSISTENT},
|
|
||||||
{"TombRaiderDrives", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
|
||||||
{"TombRaiderLiveTorqueParameters", PERSISTENT},
|
|
||||||
{"TombRaiderScore", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
|
||||||
{"ToyotaDoors", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VEHICLES},
|
{"ToyotaDoors", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_VEHICLES},
|
||||||
{"TrafficFollow", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
{"TrafficFollow", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
||||||
{"TrafficJerkAcceleration", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
{"TrafficJerkAcceleration", PERSISTENT | FROGPILOT_STORAGE | FROGPILOT_CONTROLS},
|
||||||
|
|
|
@ -77,11 +77,9 @@ public:
|
||||||
inline void putBoolNonBlocking(const std::string &key, bool val) {
|
inline void putBoolNonBlocking(const std::string &key, bool val) {
|
||||||
putNonBlocking(key, val ? "1" : "0");
|
putNonBlocking(key, val ? "1" : "0");
|
||||||
}
|
}
|
||||||
void putIntNonBlocking(const std::string &key, const std::string &val);
|
|
||||||
inline void putIntNonBlocking(const std::string &key, int val) {
|
inline void putIntNonBlocking(const std::string &key, int val) {
|
||||||
putNonBlocking(key, std::to_string(val));
|
putNonBlocking(key, std::to_string(val));
|
||||||
}
|
}
|
||||||
void putFloatNonBlocking(const std::string &key, const std::string &val);
|
|
||||||
inline void putFloatNonBlocking(const std::string &key, float val) {
|
inline void putFloatNonBlocking(const std::string &key, float val) {
|
||||||
putNonBlocking(key, std::to_string(val));
|
putNonBlocking(key, std::to_string(val));
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,4 +4,4 @@ SConscript(['controls/lib/longitudinal_mpc_lib/SConscript'])
|
||||||
SConscript(['locationd/SConscript'])
|
SConscript(['locationd/SConscript'])
|
||||||
SConscript(['navd/SConscript'])
|
SConscript(['navd/SConscript'])
|
||||||
SConscript(['modeld/SConscript'])
|
SConscript(['modeld/SConscript'])
|
||||||
SConscript(['ui/SConscript'])
|
SConscript(['ui/SConscript'])
|
|
@ -21,11 +21,8 @@ FRAME_FINGERPRINT = 100 # 1s
|
||||||
EventName = car.CarEvent.EventName
|
EventName = car.CarEvent.EventName
|
||||||
|
|
||||||
|
|
||||||
def get_startup_event(car_recognized, controller_available, fw_seen, block_user, frogpilot_toggles):
|
def get_startup_event(car_recognized, controller_available, fw_seen):
|
||||||
if block_user:
|
event = EventName.customStartupAlert
|
||||||
return EventName.blockUser
|
|
||||||
else:
|
|
||||||
event = EventName.customStartupAlert
|
|
||||||
|
|
||||||
if not car_recognized:
|
if not car_recognized:
|
||||||
if fw_seen:
|
if fw_seen:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from cereal import car
|
from cereal import car
|
||||||
from openpilot.selfdrive.car.chrysler.values import ChryslerFlags, RAM_CARS
|
from openpilot.selfdrive.car.chrysler.values import RAM_CARS, ChryslerFlags
|
||||||
|
|
||||||
GearShifter = car.CarState.GearShifter
|
GearShifter = car.CarState.GearShifter
|
||||||
VisualAlert = car.CarControl.HUDControl.VisualAlert
|
VisualAlert = car.CarControl.HUDControl.VisualAlert
|
||||||
|
|
|
@ -38,7 +38,7 @@ NEURAL_PARAMS_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/neural_ff_
|
||||||
|
|
||||||
class CarInterface(CarInterfaceBase):
|
class CarInterface(CarInterfaceBase):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_pid_accel_limits(CP, current_speed, cruise_speed, frogpilot_toggles):
|
def get_pid_accel_limits(CP, current_speed, cruise_speed):
|
||||||
return CarControllerParams.ACCEL_MIN, CarControllerParams.ACCEL_MAX
|
return CarControllerParams.ACCEL_MIN, CarControllerParams.ACCEL_MAX
|
||||||
|
|
||||||
# Determined by iteratively plotting and minimizing error for f(angle, speed) = steer.
|
# Determined by iteratively plotting and minimizing error for f(angle, speed) = steer.
|
||||||
|
|
|
@ -22,7 +22,7 @@ SETTINGS_BUTTONS_DICT = {CruiseSettings.DISTANCE: ButtonType.gapAdjustCruise, Cr
|
||||||
|
|
||||||
class CarInterface(CarInterfaceBase):
|
class CarInterface(CarInterfaceBase):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_pid_accel_limits(CP, current_speed, cruise_speed, frogpilot_toggles):
|
def get_pid_accel_limits(CP, current_speed, cruise_speed):
|
||||||
if CP.carFingerprint in HONDA_BOSCH:
|
if CP.carFingerprint in HONDA_BOSCH:
|
||||||
return CarControllerParams.BOSCH_ACCEL_MIN, CarControllerParams.BOSCH_ACCEL_MAX
|
return CarControllerParams.BOSCH_ACCEL_MIN, CarControllerParams.BOSCH_ACCEL_MAX
|
||||||
elif CP.enableGasInterceptor:
|
elif CP.enableGasInterceptor:
|
||||||
|
|
|
@ -22,6 +22,8 @@ from openpilot.selfdrive.controls.lib.drive_helpers import CRUISE_LONG_PRESS, V_
|
||||||
from openpilot.selfdrive.controls.lib.events import Events
|
from openpilot.selfdrive.controls.lib.events import Events
|
||||||
from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel
|
from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel
|
||||||
|
|
||||||
|
from openpilot.selfdrive.frogpilot.frogpilot_variables import get_frogpilot_toggles
|
||||||
|
|
||||||
ButtonType = car.CarState.ButtonEvent.Type
|
ButtonType = car.CarState.ButtonEvent.Type
|
||||||
FrogPilotButtonType = custom.FrogPilotCarState.ButtonEvent.Type
|
FrogPilotButtonType = custom.FrogPilotCarState.ButtonEvent.Type
|
||||||
GearShifter = car.CarState.GearShifter
|
GearShifter = car.CarState.GearShifter
|
||||||
|
@ -223,6 +225,8 @@ class CarInterfaceBase(ABC):
|
||||||
self.CC: CarControllerBase = CarController(dbc_name, CP, self.VM)
|
self.CC: CarControllerBase = CarController(dbc_name, CP, self.VM)
|
||||||
|
|
||||||
# FrogPilot variables
|
# FrogPilot variables
|
||||||
|
self.frogpilot_toggles = get_frogpilot_toggles(True)
|
||||||
|
|
||||||
self.params = Params()
|
self.params = Params()
|
||||||
self.params_memory = Params("/dev/shm/params")
|
self.params_memory = Params("/dev/shm/params")
|
||||||
|
|
||||||
|
@ -231,15 +235,13 @@ class CarInterfaceBase(ABC):
|
||||||
comma_nnff_supported = self.check_comma_nn_ff_support(CP.carFingerprint)
|
comma_nnff_supported = self.check_comma_nn_ff_support(CP.carFingerprint)
|
||||||
nnff_supported = self.initialize_lat_torque_nn(CP.carFingerprint, eps_firmware)
|
nnff_supported = self.initialize_lat_torque_nn(CP.carFingerprint, eps_firmware)
|
||||||
|
|
||||||
lateral_tune = self.params.get_bool("LateralTune")
|
self.use_nnff = not comma_nnff_supported and nnff_supported and self.frogpilot_toggles.nnff
|
||||||
self.use_nnff = not comma_nnff_supported and nnff_supported and lateral_tune and self.params.get_bool("NNFF")
|
self.use_nnff_lite = not self.use_nnff and self.frogpilot_toggles.nnff_lite
|
||||||
self.use_nnff_lite = not self.use_nnff and lateral_tune and self.params.get_bool("NNFFLite")
|
|
||||||
|
|
||||||
self.always_on_lateral_disabled = False
|
self.always_on_lateral_disabled = False
|
||||||
self.belowSteerSpeed_shown = False
|
self.belowSteerSpeed_shown = False
|
||||||
self.disable_belowSteerSpeed = False
|
self.disable_belowSteerSpeed = False
|
||||||
self.disable_resumeRequired = False
|
self.disable_resumeRequired = False
|
||||||
self.is_gm = self.CP.carName == "gm"
|
|
||||||
self.prev_distance_button = False
|
self.prev_distance_button = False
|
||||||
self.resumeRequired_shown = False
|
self.resumeRequired_shown = False
|
||||||
self.traffic_mode_active = False
|
self.traffic_mode_active = False
|
||||||
|
@ -247,6 +249,8 @@ class CarInterfaceBase(ABC):
|
||||||
|
|
||||||
self.gap_counter = 0
|
self.gap_counter = 0
|
||||||
|
|
||||||
|
self.is_gm = self.CP.carName == "gm"
|
||||||
|
|
||||||
def get_ff_nn(self, x):
|
def get_ff_nn(self, x):
|
||||||
return self.lat_torque_nn_model.evaluate(x)
|
return self.lat_torque_nn_model.evaluate(x)
|
||||||
|
|
||||||
|
@ -263,7 +267,7 @@ class CarInterfaceBase(ABC):
|
||||||
return self.CC.update(c, self.CS, now_nanos, frogpilot_toggles)
|
return self.CC.update(c, self.CS, now_nanos, frogpilot_toggles)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_pid_accel_limits(CP, current_speed, cruise_speed, frogpilot_toggles):
|
def get_pid_accel_limits(CP, current_speed, cruise_speed):
|
||||||
return ACCEL_MIN, ACCEL_MAX
|
return ACCEL_MIN, ACCEL_MAX
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
{"input_std":[[9.281861],[1.8477924],[0.7977224],[0.047467366],[1.7969038],[1.8168812],[1.8351218],[1.785757],[1.7335743],[1.6658221],[1.5893887],[0.047346078],[0.0473731],[0.047383286],[0.047291175],[0.047300573],[0.04712479],[0.046799928]],"model_test_loss":0.027355343103408813,"input_size":18,"current_date_and_time":"2023-08-05_05-11-44","input_mean":[[21.655252],[-0.07694559],[-0.006081294],[-0.007598456],[-0.07309746],[-0.075890236],[-0.07804942],[-0.076106496],[-0.07184982],[-0.06528668],[-0.060404416],[-0.0077262702],[-0.0077046235],[-0.0076850485],[-0.007687444],[-0.007708868],[-0.0077959923],[-0.008017422]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.35776415],[-0.126288],[0.007988413],[0.03850029],[-0.056796823],[0.0072075897],[0.17376427]],"dense_1_W":[[0.010538558,6.7293744,-0.007391298,-1.035045,-0.47446147,1.0940393,0.08225446,-0.5795131,0.573115,1.82923,-0.16999252,0.8818023,0.03560901,-0.9470653,-1.042151,1.1532398,1.9009485,-1.2265956],[0.009010456,-1.3618345,0.039026346,0.22943486,-0.6669799,-0.768271,-0.16828564,-0.13406865,0.19760236,-0.18953702,-0.019137766,0.1468623,0.26367718,0.4732375,0.73679143,0.62450147,0.30198866,-0.93340015],[-0.044318866,2.2138615,9.620889,-0.66480356,-0.06849887,-0.038568456,-0.30580127,-0.088089585,0.31187677,0.5968372,-1.1462088,0.13234706,0.29166338,-0.69978577,-0.01790655,-0.097928315,-0.56950736,0.7560642],[1.3758256,0.8700429,-0.24295154,0.20832618,-0.7735097,1.0379355,-0.60753095,-0.5457418,-1.0892137,-0.6708325,0.24982774,0.09251328,0.08596103,-0.58034134,-0.3046114,-0.19754426,0.006461508,0.5989185],[0.06314328,-2.492993,-0.28200585,0.49902886,0.8513198,-0.5704965,1.0960953,-0.08426956,-0.76074624,0.10669376,0.02775254,-0.42194095,-0.34657434,-0.10863868,0.17019278,0.0963825,-0.10169116,0.21243806],[0.007984091,-1.9276509,-0.0013926353,0.04057924,1.4438432,1.3440262,-2.506722,1.700801,0.72410774,0.13471895,-0.18753268,0.7303607,0.018133093,-0.71643597,0.07050904,-0.30161944,0.085108586,0.061202843],[0.9413167,-0.9954305,-0.19510143,-0.4711845,-0.12398665,-0.45175523,1.0616771,0.28550953,-0.55543137,-0.21576759,-0.2364377,-0.012782618,-0.050565187,0.257694,-0.20975965,0.00022543047,-0.08760746,0.4983852]],"activation":"σ"},{"dense_2_W":[[-0.71804935,0.017023304,-0.099854074,-0.3262651,-0.402829,-0.12073083,0.13537839],[-0.44002575,-0.1071093,-0.58886194,-0.17319413,-0.21134079,0.23135148,0.0006880979],[-0.55711204,-0.8693639,-0.6443761,-0.7382846,0.18980889,-0.6082511,-0.63103676],[0.11338112,-0.5327033,0.2856197,0.32239884,-0.72682667,0.5302305,-0.45094746],[-0.35197002,-0.14440043,-0.025249843,-0.48697743,0.3340018,-0.25992322,0.0050561456],[0.34757507,0.15670523,-0.14263277,0.50704384,-0.020171141,0.6408679,-0.3074123],[0.40258837,-0.59363264,0.35948923,-0.060853776,-0.0072541097,0.89743376,-0.49789146],[-0.63476,0.29580453,0.1689314,-0.5061521,0.24901053,-0.23218995,0.57968193],[-0.66173035,0.50861925,-0.5845035,-0.6602214,0.8341883,-0.31437424,0.8046359],[0.038493533,0.15464582,-0.04848341,-0.57820857,-0.25891733,-0.47527292,0.21441916],[-0.15464531,-0.07454202,-0.8215851,-0.12614948,-0.5924209,0.00017916794,0.24154592],[0.6091424,-0.112086505,0.1144111,-0.31035227,-0.9237534,0.041003596,-0.3542808],[0.2989792,-0.23780549,0.116059326,-0.6056522,0.5499526,-0.9001413,0.5200723]],"activation":"σ","dense_2_b":[[-0.2638964],[-0.24607328],[-0.15493082],[-0.0071187904],[-0.23515384],[-0.09098133],[-0.034066215],[0.03609036],[-0.03842933],[-0.042302527],[-0.2439947],[-0.16342077],[-0.01030317]]},{"dense_3_W":[[0.45771673,-0.2084603,0.3570187,0.35835707,0.13684571,-0.582958,0.29889587,0.43543494,0.11841301,-0.26185623,-0.4988437,0.5752996,-0.28057483],[-0.19594137,0.050280698,-0.29057446,-0.2829161,-0.16987291,-0.21278952,-0.59946907,0.21295123,0.7040468,0.53549695,-0.52553934,-0.19560973,0.6233473],[-0.19091003,0.08669418,-0.5792192,0.57799137,-0.36263424,0.6037143,0.27898273,-0.30951327,-0.3572644,0.46720102,-0.5403428,0.32415462,-0.60570025]],"activation":"identity","dense_3_b":[[-0.0047377176],[0.023170695],[-0.021546118]]},{"dense_4_W":[[-0.12453941,-1.006034,0.96776205]],"dense_4_b":[[-0.02351544]],"activation":"identity"}]}
|
|
|
@ -2,13 +2,13 @@ import math
|
||||||
|
|
||||||
from cereal import car
|
from cereal import car
|
||||||
from openpilot.common.numpy_fast import clip, interp
|
from openpilot.common.numpy_fast import clip, interp
|
||||||
from openpilot.common.params import Params
|
|
||||||
from openpilot.selfdrive.car import apply_meas_steer_torque_limits, apply_std_steer_angle_limits, common_fault_avoidance, create_gas_interceptor_command, make_can_msg, rate_limit
|
from openpilot.selfdrive.car import apply_meas_steer_torque_limits, apply_std_steer_angle_limits, common_fault_avoidance, create_gas_interceptor_command, make_can_msg, rate_limit
|
||||||
from openpilot.selfdrive.car.interfaces import CarControllerBase
|
from openpilot.selfdrive.car.interfaces import CarControllerBase
|
||||||
from openpilot.selfdrive.car.toyota import toyotacan
|
from openpilot.selfdrive.car.toyota import toyotacan
|
||||||
from openpilot.selfdrive.car.toyota.values import CAR, STATIC_DSU_MSGS, NO_STOP_TIMER_CAR, TSS2_CAR, \
|
from openpilot.selfdrive.car.toyota.values import CAR, STATIC_DSU_MSGS, NO_STOP_TIMER_CAR, TSS2_CAR, \
|
||||||
MIN_ACC_SPEED, PEDAL_TRANSITION, CarControllerParams, ToyotaFlags, \
|
MIN_ACC_SPEED, PEDAL_TRANSITION, CarControllerParams, ToyotaFlags, \
|
||||||
UNSUPPORTED_DSU_CAR, STOP_AND_GO_CAR
|
UNSUPPORTED_DSU_CAR, STOP_AND_GO_CAR
|
||||||
|
from openpilot.selfdrive.controls.lib.drive_helpers import CRUISE_LONG_PRESS
|
||||||
from opendbc.can.packer import CANPacker
|
from opendbc.can.packer import CANPacker
|
||||||
|
|
||||||
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_acceleration import get_max_allowed_accel
|
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_acceleration import get_max_allowed_accel
|
||||||
|
@ -60,9 +60,11 @@ class CarController(CarControllerBase):
|
||||||
self.accel = 0
|
self.accel = 0
|
||||||
|
|
||||||
# FrogPilot variables
|
# FrogPilot variables
|
||||||
params = Params()
|
|
||||||
|
|
||||||
self.doors_locked = False
|
self.doors_locked = False
|
||||||
|
self.reverse_cruise_active = False
|
||||||
|
|
||||||
|
self.cruise_timer = 0
|
||||||
|
self.previous_set_speed = 0
|
||||||
|
|
||||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||||
actuators = CC.actuators
|
actuators = CC.actuators
|
||||||
|
@ -211,10 +213,10 @@ class CarController(CarControllerBase):
|
||||||
pcm_accel_cmd = min(pcm_accel_cmd, self.accel + ACCEL_WINDUP_LIMIT) if CC.longActive else 0.0
|
pcm_accel_cmd = min(pcm_accel_cmd, self.accel + ACCEL_WINDUP_LIMIT) if CC.longActive else 0.0
|
||||||
|
|
||||||
can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, pcm_cancel_cmd, self.permit_braking, self.standstill_req, lead,
|
can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, pcm_cancel_cmd, self.permit_braking, self.standstill_req, lead,
|
||||||
CS.acc_type, fcw_alert, self.distance_button, frogpilot_toggles))
|
CS.acc_type, fcw_alert, self.distance_button, self.reverse_cruise_active))
|
||||||
self.accel = pcm_accel_cmd
|
self.accel = pcm_accel_cmd
|
||||||
else:
|
else:
|
||||||
can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, True, False, lead, CS.acc_type, False, self.distance_button, frogpilot_toggles))
|
can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, True, False, lead, CS.acc_type, False, self.distance_button, self.reverse_cruise_active))
|
||||||
|
|
||||||
if self.frame % 2 == 0 and self.CP.enableGasInterceptor and self.CP.openpilotLongitudinalControl:
|
if self.frame % 2 == 0 and self.CP.enableGasInterceptor and self.CP.openpilotLongitudinalControl:
|
||||||
# send exactly zero if gas cmd is zero. Interceptor will send the max between read value and gas cmd.
|
# send exactly zero if gas cmd is zero. Interceptor will send the max between read value and gas cmd.
|
||||||
|
@ -258,6 +260,14 @@ class CarController(CarControllerBase):
|
||||||
new_actuators.steeringAngleDeg = self.last_angle
|
new_actuators.steeringAngleDeg = self.last_angle
|
||||||
new_actuators.accel = self.accel
|
new_actuators.accel = self.accel
|
||||||
|
|
||||||
|
# FrogPilot Toyota carcontroller functions
|
||||||
|
if False: #self.previous_set_speed != CS.out.cruiseState.speedCluster:
|
||||||
|
self.cruise_timer = CRUISE_LONG_PRESS
|
||||||
|
elif self.cruise_timer > 0:
|
||||||
|
self.cruise_timer -= 1
|
||||||
|
else:
|
||||||
|
self.previous_set_speed = CS.out.cruiseState.speedCluster
|
||||||
|
|
||||||
# Lock doors when in drive / unlock doors when in park
|
# Lock doors when in drive / unlock doors when in park
|
||||||
if not self.doors_locked and CS.out.gearShifter != PARK:
|
if not self.doors_locked and CS.out.gearShifter != PARK:
|
||||||
if frogpilot_toggles.lock_doors:
|
if frogpilot_toggles.lock_doors:
|
||||||
|
@ -268,5 +278,8 @@ class CarController(CarControllerBase):
|
||||||
can_sends.append(make_can_msg(0x750, UNLOCK_CMD, 0))
|
can_sends.append(make_can_msg(0x750, UNLOCK_CMD, 0))
|
||||||
self.doors_locked = False
|
self.doors_locked = False
|
||||||
|
|
||||||
|
self.reverse_cruise_active = frogpilot_toggles.reverse_cruise_increase
|
||||||
|
self.reverse_cruise_active &= self.cruise_timer <= 0
|
||||||
|
|
||||||
self.frame += 1
|
self.frame += 1
|
||||||
return new_actuators, can_sends
|
return new_actuators, can_sends
|
||||||
|
|
|
@ -24,21 +24,22 @@ TEMP_STEER_FAULTS = (0, 9, 11, 21, 25)
|
||||||
# - prolonged high driver torque: 17 (permanent)
|
# - prolonged high driver torque: 17 (permanent)
|
||||||
PERM_STEER_FAULTS = (3, 17)
|
PERM_STEER_FAULTS = (3, 17)
|
||||||
|
|
||||||
|
|
||||||
# Traffic signals for Speed Limit Controller - Credit goes to the DragonPilot team!
|
# Traffic signals for Speed Limit Controller - Credit goes to the DragonPilot team!
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def calculate_speed_limit(cp_cam, frogpilot_toggles):
|
def calculate_speed_limit(cp_cam, frogpilot_toggles):
|
||||||
signals = ["TSGN1", "SPDVAL1", "SPLSGN1", "TSGN2", "SPLSGN2", "TSGN3", "SPLSGN3", "TSGN4", "SPLSGN4"]
|
signals = ["TSGN1", "SPDVAL1", "SPLSGN1", "TSGN2", "SPLSGN2", "TSGN3", "SPLSGN3", "TSGN4", "SPLSGN4"]
|
||||||
traffic_signals = {signal: cp_cam.vl["RSA1"].get(signal, cp_cam.vl["RSA2"].get(signal)) for signal in signals}
|
traffic_signals = {signal: cp_cam.vl["RSA1"].get(signal, cp_cam.vl["RSA2"].get(signal)) for signal in signals}
|
||||||
|
|
||||||
tsgn1 = traffic_signals.get("TSGN1", None)
|
tsgn1 = traffic_signals.get("TSGN1")
|
||||||
spdval1 = traffic_signals.get("SPDVAL1", None)
|
spdval1 = traffic_signals.get("SPDVAL1")
|
||||||
|
|
||||||
if tsgn1 == 1 and not frogpilot_toggles.force_mph_dashboard:
|
if tsgn1 == 1 and not frogpilot_toggles.force_mph_dashboard:
|
||||||
return spdval1 * CV.KPH_TO_MS
|
return spdval1 * CV.KPH_TO_MS
|
||||||
elif tsgn1 == 36 or frogpilot_toggles.force_mph_dashboard:
|
elif tsgn1 == 36 or frogpilot_toggles.force_mph_dashboard:
|
||||||
return spdval1 * CV.MPH_TO_MS
|
return spdval1 * CV.MPH_TO_MS
|
||||||
else:
|
return 0
|
||||||
return 0
|
|
||||||
|
|
||||||
class CarState(CarStateBase):
|
class CarState(CarStateBase):
|
||||||
def __init__(self, CP):
|
def __init__(self, CP):
|
||||||
|
|
|
@ -15,9 +15,8 @@ SteerControlType = car.CarParams.SteerControlType
|
||||||
|
|
||||||
class CarInterface(CarInterfaceBase):
|
class CarInterface(CarInterfaceBase):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_pid_accel_limits(CP, current_speed, cruise_speed, frogpilot_toggles):
|
def get_pid_accel_limits(CP, current_speed, cruise_speed):
|
||||||
CCP = CarControllerParams(CP)
|
return CarControllerParams(CP).ACCEL_MIN, CarControllerParams(CP).ACCEL_MAX
|
||||||
return CCP.ACCEL_MIN, CCP.ACCEL_MAX
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_params(ret, candidate, fingerprint, car_fw, disable_openpilot_long, experimental_long, docs, params):
|
def _get_params(ret, candidate, fingerprint, car_fw, disable_openpilot_long, experimental_long, docs, params):
|
||||||
|
|
|
@ -33,7 +33,7 @@ def create_lta_steer_command(packer, steer_control_type, steer_angle, steer_req,
|
||||||
return packer.make_can_msg("STEERING_LTA", 0, values)
|
return packer.make_can_msg("STEERING_LTA", 0, values)
|
||||||
|
|
||||||
|
|
||||||
def create_accel_command(packer, accel, pcm_cancel, permit_braking, standstill_req, lead, acc_type, fcw_alert, distance, frogpilot_toggles):
|
def create_accel_command(packer, accel, pcm_cancel, permit_braking, standstill_req, lead, acc_type, fcw_alert, distance, reverse_cruise_active):
|
||||||
# TODO: find the exact canceling bit that does not create a chime
|
# TODO: find the exact canceling bit that does not create a chime
|
||||||
values = {
|
values = {
|
||||||
"ACCEL_CMD": accel, # compensated accel command
|
"ACCEL_CMD": accel, # compensated accel command
|
||||||
|
@ -43,7 +43,7 @@ def create_accel_command(packer, accel, pcm_cancel, permit_braking, standstill_r
|
||||||
"PERMIT_BRAKING": permit_braking,
|
"PERMIT_BRAKING": permit_braking,
|
||||||
"RELEASE_STANDSTILL": not standstill_req,
|
"RELEASE_STANDSTILL": not standstill_req,
|
||||||
"CANCEL_REQ": pcm_cancel,
|
"CANCEL_REQ": pcm_cancel,
|
||||||
"ALLOW_LONG_PRESS": 2 if frogpilot_toggles.reverse_cruise_increase else 1,
|
"ALLOW_LONG_PRESS": 2 if reverse_cruise_active else 1,
|
||||||
"ACC_CUT_IN": fcw_alert, # only shown when ACC enabled
|
"ACC_CUT_IN": fcw_alert, # only shown when ACC enabled
|
||||||
}
|
}
|
||||||
return packer.make_can_msg("ACC_CONTROL", 0, values)
|
return packer.make_can_msg("ACC_CONTROL", 0, values)
|
||||||
|
|
|
@ -36,7 +36,7 @@ class CarControllerParams:
|
||||||
self.ACCEL_MAX = 1.5 # m/s2, lower than allowed 2.0 m/s^2 for tuning reasons
|
self.ACCEL_MAX = 1.5 # m/s2, lower than allowed 2.0 m/s^2 for tuning reasons
|
||||||
self.ACCEL_MIN = -3.5 # m/s2
|
self.ACCEL_MIN = -3.5 # m/s2
|
||||||
|
|
||||||
if CP.lateralTuning.which == 'torque':
|
if CP.lateralTuning.which() == 'torque':
|
||||||
self.STEER_DELTA_UP = 15 # 1.0s time to peak torque
|
self.STEER_DELTA_UP = 15 # 1.0s time to peak torque
|
||||||
self.STEER_DELTA_DOWN = 25 # always lower than 45 otherwise the Rav4 faults (Prius seems ok with 50)
|
self.STEER_DELTA_DOWN = 25 # always lower than 45 otherwise the Rav4 faults (Prius seems ok with 50)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -80,7 +80,6 @@ class Controls:
|
||||||
|
|
||||||
# Ensure the current branch is cached, otherwise the first iteration of controlsd lags
|
# Ensure the current branch is cached, otherwise the first iteration of controlsd lags
|
||||||
self.branch = get_short_branch()
|
self.branch = get_short_branch()
|
||||||
self.block_user = self.branch == "FrogPilot-Development" and self.params.get("DongleId", encoding='utf-8') != "FrogsGoMoo"
|
|
||||||
|
|
||||||
# Setup sockets
|
# Setup sockets
|
||||||
self.pm = messaging.PubMaster(['controlsState', 'carControl', 'onroadEvents', 'frogpilotCarControl'])
|
self.pm = messaging.PubMaster(['controlsState', 'carControl', 'onroadEvents', 'frogpilotCarControl'])
|
||||||
|
@ -164,7 +163,7 @@ class Controls:
|
||||||
|
|
||||||
self.can_log_mono_time = 0
|
self.can_log_mono_time = 0
|
||||||
|
|
||||||
self.startup_event = get_startup_event(car_recognized, not self.CP.passive, len(self.CP.carFw) > 0, self.block_user, get_frogpilot_toggles(True))
|
self.startup_event = get_startup_event(car_recognized, not self.CP.passive, len(self.CP.carFw) > 0)
|
||||||
|
|
||||||
if not sounds_available:
|
if not sounds_available:
|
||||||
self.events.add(EventName.soundsUnavailable, static=True)
|
self.events.add(EventName.soundsUnavailable, static=True)
|
||||||
|
@ -194,10 +193,9 @@ class Controls:
|
||||||
self.resume_previously_pressed = False
|
self.resume_previously_pressed = False
|
||||||
self.steer_saturated_event_triggered = False
|
self.steer_saturated_event_triggered = False
|
||||||
|
|
||||||
|
self.block_user = self.branch == "FrogPilot-Development" and self.params.get("DongleId", encoding='utf-8') != "FrogsGoMoo"
|
||||||
self.radarless_model = self.frogpilot_toggles.radarless_model
|
self.radarless_model = self.frogpilot_toggles.radarless_model
|
||||||
|
self.use_old_long = self.frogpilot_toggles.old_long_api
|
||||||
self.use_old_long = self.CP.carName == "hyundai" and not self.params.get_bool("NewLongAPI")
|
|
||||||
self.use_old_long |= self.CP.carName == "gm" and not self.params.get_bool("NewLongAPIGM")
|
|
||||||
|
|
||||||
self.display_timer = 0
|
self.display_timer = 0
|
||||||
|
|
||||||
|
@ -430,7 +428,7 @@ class Controls:
|
||||||
self.events.add_from_msg(self.sm['frogpilotPlan'].frogpilotEvents)
|
self.events.add_from_msg(self.sm['frogpilotPlan'].frogpilotEvents)
|
||||||
|
|
||||||
if self.block_user:
|
if self.block_user:
|
||||||
return EventName.blockUser
|
self.events.add(EventName.blockUser, static=True)
|
||||||
|
|
||||||
def data_sample(self):
|
def data_sample(self):
|
||||||
"""Receive data from sockets"""
|
"""Receive data from sockets"""
|
||||||
|
@ -618,7 +616,7 @@ class Controls:
|
||||||
|
|
||||||
if not self.joystick_mode:
|
if not self.joystick_mode:
|
||||||
# accel PID loop
|
# accel PID loop
|
||||||
pid_accel_limits = self.CI.get_pid_accel_limits(self.CP, CS.vEgo, self.v_cruise_helper.v_cruise_kph * CV.KPH_TO_MS, self.frogpilot_toggles)
|
pid_accel_limits = self.CI.get_pid_accel_limits(self.CP, CS.vEgo, self.v_cruise_helper.v_cruise_kph * CV.KPH_TO_MS)
|
||||||
if self.frogpilot_toggles.sport_plus:
|
if self.frogpilot_toggles.sport_plus:
|
||||||
pid_accel_limits = (pid_accel_limits[0], get_max_allowed_accel(CS.vEgo))
|
pid_accel_limits = (pid_accel_limits[0], get_max_allowed_accel(CS.vEgo))
|
||||||
|
|
||||||
|
|
|
@ -393,7 +393,7 @@ def torque_nn_load_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM
|
||||||
"NNFF Torque Controller loaded",
|
"NNFF Torque Controller loaded",
|
||||||
model_name,
|
model_name,
|
||||||
AlertStatus.frogpilot, AlertSize.mid,
|
AlertStatus.frogpilot, AlertSize.mid,
|
||||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, 5.0)
|
Priority.LOW, VisualAlert.none, AudibleAlert.engage, 5.0)
|
||||||
|
|
||||||
|
|
||||||
EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
|
EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
|
||||||
|
@ -1023,8 +1023,8 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
|
||||||
|
|
||||||
# FrogPilot Events
|
# FrogPilot Events
|
||||||
EventName.blockUser: {
|
EventName.blockUser: {
|
||||||
ET.NO_ENTRY: Alert(
|
ET.PERMANENT: Alert(
|
||||||
"Please don't use the 'Development' branch!",
|
"Don't use the 'Development' branch!",
|
||||||
"Forcing you into 'Dashcam Mode' for your safety",
|
"Forcing you into 'Dashcam Mode' for your safety",
|
||||||
AlertStatus.userPrompt, AlertSize.mid,
|
AlertStatus.userPrompt, AlertSize.mid,
|
||||||
Priority.HIGHEST, VisualAlert.none, AudibleAlert.none, 1.),
|
Priority.HIGHEST, VisualAlert.none, AudibleAlert.none, 1.),
|
||||||
|
|
|
@ -205,7 +205,7 @@ def get_lead(v_ego: float, ready: bool, tracks: dict[int, Track], lead_msg: capn
|
||||||
lead_dict = closest_track.get_RadarState()
|
lead_dict = closest_track.get_RadarState()
|
||||||
|
|
||||||
if 'dRel' in lead_dict:
|
if 'dRel' in lead_dict:
|
||||||
lead_dict['dRel'] -= max(frogpilot_toggles.increased_stopped_distance + min(10 - v_ego, 0), 0) if not frogpilotCarState.trafficModeActive else 0
|
lead_dict['dRel'] -= frogpilot_toggles.increased_stopped_distance if not frogpilotCarState.trafficModeActive else 0
|
||||||
|
|
||||||
return lead_dict
|
return lead_dict
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from openpilot.selfdrive.frogpilot.frogpilot_utilities import delete_file, is_ur
|
||||||
GITHUB_URL = "https://raw.githubusercontent.com/FrogAi/FrogPilot-Resources/"
|
GITHUB_URL = "https://raw.githubusercontent.com/FrogAi/FrogPilot-Resources/"
|
||||||
GITLAB_URL = "https://gitlab.com/FrogAi/FrogPilot-Resources/-/raw/"
|
GITLAB_URL = "https://gitlab.com/FrogAi/FrogPilot-Resources/-/raw/"
|
||||||
|
|
||||||
def download_file(cancel_param, destination, progress_param, url, download_param, params_memory):
|
def download_file(cancel_param, destination, temp_destination, progress_param, url, download_param, params_memory):
|
||||||
try:
|
try:
|
||||||
os.makedirs(os.path.dirname(destination), exist_ok=True)
|
os.makedirs(os.path.dirname(destination), exist_ok=True)
|
||||||
total_size = get_remote_file_size(url)
|
total_size = get_remote_file_size(url)
|
||||||
|
@ -14,11 +14,11 @@ def download_file(cancel_param, destination, progress_param, url, download_param
|
||||||
return
|
return
|
||||||
|
|
||||||
downloaded_size = 0
|
downloaded_size = 0
|
||||||
with requests.get(url, stream=True, timeout=5) as response, open(destination, 'wb') as file:
|
with requests.get(url, stream=True, timeout=5) as response, open(temp_destination, 'wb') as file:
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
for chunk in response.iter_content(chunk_size=8192):
|
for chunk in response.iter_content(chunk_size=8192):
|
||||||
if params_memory.get_bool(cancel_param):
|
if params_memory.get_bool(cancel_param):
|
||||||
handle_error(destination, "Download cancelled.", "Download cancelled.", download_param, progress_param, params_memory)
|
handle_error(temp_destination, "Download cancelled.", "Download cancelled.", download_param, progress_param, params_memory)
|
||||||
return
|
return
|
||||||
|
|
||||||
if chunk:
|
if chunk:
|
||||||
|
@ -31,15 +31,17 @@ def download_file(cancel_param, destination, progress_param, url, download_param
|
||||||
else:
|
else:
|
||||||
params_memory.put(progress_param, "Verifying authenticity...")
|
params_memory.put(progress_param, "Verifying authenticity...")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
handle_request_error(e, destination, download_param, progress_param, params_memory)
|
handle_request_error(e, temp_destination, download_param, progress_param, params_memory)
|
||||||
|
|
||||||
def handle_error(destination, error_message, error, download_param, progress_param, params_memory):
|
def handle_error(destination, error_message, error, download_param, progress_param, params_memory):
|
||||||
print(f"Error occurred: {error}")
|
|
||||||
if destination:
|
if destination:
|
||||||
delete_file(destination)
|
delete_file(destination)
|
||||||
|
|
||||||
if download_param:
|
if download_param:
|
||||||
params_memory.remove(download_param)
|
params_memory.remove(download_param)
|
||||||
if progress_param:
|
|
||||||
|
if progress_param and "404" not in error_message:
|
||||||
|
print(f"Error occurred: {error}")
|
||||||
params_memory.put(progress_param, error_message)
|
params_memory.put(progress_param, error_message)
|
||||||
|
|
||||||
def handle_request_error(error, destination, download_param, progress_param, params_memory):
|
def handle_request_error(error, destination, download_param, progress_param, params_memory):
|
||||||
|
@ -51,9 +53,6 @@ def handle_request_error(error, destination, download_param, progress_param, par
|
||||||
}
|
}
|
||||||
|
|
||||||
error_message = error_map.get(type(error), "Unexpected error.")
|
error_message = error_map.get(type(error), "Unexpected error.")
|
||||||
if isinstance(error, requests.HTTPError) and error.response and error.response.status_code == 404:
|
|
||||||
return
|
|
||||||
|
|
||||||
handle_error(destination, f"Failed: {error_message}", error, download_param, progress_param, params_memory)
|
handle_error(destination, f"Failed: {error_message}", error, download_param, progress_param, params_memory)
|
||||||
|
|
||||||
def get_remote_file_size(url):
|
def get_remote_file_size(url):
|
||||||
|
@ -61,12 +60,18 @@ def get_remote_file_size(url):
|
||||||
response = requests.head(url, headers={'Accept-Encoding': 'identity'}, timeout=5)
|
response = requests.head(url, headers={'Accept-Encoding': 'identity'}, timeout=5)
|
||||||
if response.status_code == 404:
|
if response.status_code == 404:
|
||||||
print(f"URL not found: {url}")
|
print(f"URL not found: {url}")
|
||||||
return None
|
return 0
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
return int(response.headers.get('Content-Length', 0))
|
return int(response.headers.get('Content-Length', 0))
|
||||||
|
except requests.HTTPError as e:
|
||||||
|
if e.response and e.response.status_code == 404:
|
||||||
|
print(f"URL not found: {url}")
|
||||||
|
return 0
|
||||||
|
handle_request_error(e, None, None, None, None)
|
||||||
|
return 0
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
handle_request_error(e, None, None, None, None)
|
handle_request_error(e, None, None, None, None)
|
||||||
return None
|
return 0
|
||||||
|
|
||||||
def get_repository_url():
|
def get_repository_url():
|
||||||
if is_url_pingable("https://github.com"):
|
if is_url_pingable("https://github.com"):
|
||||||
|
@ -75,22 +80,23 @@ def get_repository_url():
|
||||||
return GITLAB_URL
|
return GITLAB_URL
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def verify_download(file_path, url, initial_download=True):
|
def verify_download(file_path, temp_file_path, url, initial_download=True):
|
||||||
remote_file_size = get_remote_file_size(url)
|
remote_file_size = get_remote_file_size(url)
|
||||||
if remote_file_size is None:
|
if remote_file_size is None:
|
||||||
print(f"Error fetching remote size for {file_path}")
|
print(f"Error fetching remote size for {file_path}")
|
||||||
return False if initial_download else True
|
return False if initial_download else True
|
||||||
|
|
||||||
if not os.path.isfile(file_path):
|
if not os.path.isfile(temp_file_path):
|
||||||
print(f"File not found: {file_path}")
|
print(f"File not found: {temp_file_path}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if remote_file_size != os.path.getsize(file_path):
|
if remote_file_size != os.path.getsize(temp_file_path):
|
||||||
print(f"File size mismatch for {file_path}")
|
print(f"File size mismatch for {temp_file_path}")
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"An unexpected error occurred while trying to verify the {file_path} download: {e}")
|
print(f"An unexpected error occurred while trying to verify the {temp_file_path} download: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
os.rename(temp_file_path, file_path)
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -73,8 +73,8 @@ class ModelManager:
|
||||||
else:
|
else:
|
||||||
return {file['name'].replace('.thneed', ''): file['size'] for file in thneed_files if 'size' in file}
|
return {file['name'].replace('.thneed', ''): file['size'] for file in thneed_files if 'size' in file}
|
||||||
|
|
||||||
except requests.RequestException as e:
|
except:
|
||||||
raise ConnectionError(f"Failed to fetch model sizes from {'GitHub' if 'github' in repo_url else 'GitLab'}: {e}")
|
return {}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def copy_default_model():
|
def copy_default_model():
|
||||||
|
@ -92,40 +92,41 @@ class ModelManager:
|
||||||
shutil.copyfile(source_path, default_model_path)
|
shutil.copyfile(source_path, default_model_path)
|
||||||
print(f"Copied the default model from {source_path} to {default_model_path}")
|
print(f"Copied the default model from {source_path} to {default_model_path}")
|
||||||
|
|
||||||
def handle_verification_failure(self, model, model_path):
|
def handle_verification_failure(self, model, model_path, temp_model_path):
|
||||||
if self.params_memory.get_bool(self.cancel_download_param):
|
if self.params_memory.get_bool(self.cancel_download_param):
|
||||||
return
|
return
|
||||||
|
|
||||||
print(f"Verification failed for model {model}. Retrying from GitLab...")
|
print(f"Verification failed for model {model}. Retrying from GitLab...")
|
||||||
model_url = f"{GITLAB_URL}Models/{model}.thneed"
|
model_url = f"{GITLAB_URL}Models/{model}.thneed"
|
||||||
download_file(self.cancel_download_param, model_path, self.download_progress_param, model_url, self.download_param, self.params_memory)
|
download_file(self.cancel_download_param, model_path, temp_model_path, self.download_progress_param, model_url, self.download_param, self.params_memory)
|
||||||
|
|
||||||
if verify_download(model_path, model_url):
|
if verify_download(model_path, temp_model_path, model_url):
|
||||||
print(f"Model {model} redownloaded and verified successfully from GitLab.")
|
print(f"Model {model} redownloaded and verified successfully from GitLab.")
|
||||||
else:
|
else:
|
||||||
handle_error(model_path, "GitLab verification failed", "Verification failed", self.download_param, self.download_progress_param, self.params_memory)
|
handle_error(model_path, "GitLab verification failed", "Verification failed", self.download_param, self.download_progress_param, self.params_memory)
|
||||||
|
|
||||||
def download_model(self, model_to_download):
|
def download_model(self, model_to_download):
|
||||||
model_path = os.path.join(MODELS_PATH, f"{model_to_download}.thneed")
|
model_path = os.path.join(MODELS_PATH, f"{model_to_download}.thneed")
|
||||||
|
temp_model_path = f"{os.path.splitext(model_path)[0]}_temp.thneed"
|
||||||
if os.path.isfile(model_path):
|
if os.path.isfile(model_path):
|
||||||
handle_error(model_path, "Model already exists...", "Model already exists...", self.download_param, self.download_progress_param, self.params_memory)
|
handle_error(model_path, "Model already exists...", "Model already exists...", self.download_param, self.download_progress_param, self.params_memory)
|
||||||
return
|
return
|
||||||
|
|
||||||
repo_url = get_repository_url()
|
repo_url = get_repository_url()
|
||||||
if not repo_url:
|
if not repo_url:
|
||||||
handle_error(model_path, "GitHub and GitLab are offline...", "Repository unavailable", self.download_param, self.download_progress_param, self.params_memory)
|
handle_error(temp_model_path, "GitHub and GitLab are offline...", "Repository unavailable", self.download_param, self.download_progress_param, self.params_memory)
|
||||||
return
|
return
|
||||||
|
|
||||||
model_url = f"{repo_url}Models/{model_to_download}.thneed"
|
model_url = f"{repo_url}Models/{model_to_download}.thneed"
|
||||||
print(f"Downloading model: {model_to_download}")
|
print(f"Downloading model: {model_to_download}")
|
||||||
download_file(self.cancel_download_param, model_path, self.download_progress_param, model_url, self.download_param, self.params_memory)
|
download_file(self.cancel_download_param, model_path, temp_model_path, self.download_progress_param, model_url, self.download_param, self.params_memory)
|
||||||
|
|
||||||
if verify_download(model_path, model_url):
|
if verify_download(model_path, temp_model_path, model_url):
|
||||||
print(f"Model {model_to_download} downloaded and verified successfully!")
|
print(f"Model {model_to_download} downloaded and verified successfully!")
|
||||||
self.params_memory.put(self.download_progress_param, "Downloaded!")
|
self.params_memory.put(self.download_progress_param, "Downloaded!")
|
||||||
self.params_memory.remove(self.download_param)
|
self.params_memory.remove(self.download_param)
|
||||||
else:
|
else:
|
||||||
self.handle_verification_failure(model_to_download, model_path)
|
self.handle_verification_failure(model_to_download, model_path, temp_model_path)
|
||||||
|
|
||||||
def queue_model_download(self, model, model_name=None):
|
def queue_model_download(self, model, model_name=None):
|
||||||
while self.params_memory.get(self.download_param, encoding='utf-8'):
|
while self.params_memory.get(self.download_param, encoding='utf-8'):
|
||||||
|
|
|
@ -261,7 +261,7 @@ class ThemeManager:
|
||||||
self.params_memory.put(DOWNLOAD_PROGRESS_PARAM, "Theme already exists...")
|
self.params_memory.put(DOWNLOAD_PROGRESS_PARAM, "Theme already exists...")
|
||||||
self.params_memory.remove(theme_param)
|
self.params_memory.remove(theme_param)
|
||||||
|
|
||||||
def handle_verification_failure(self, extentions, theme_component, theme_name, theme_param, download_path):
|
def handle_verification_failure(self, extensions, theme_component, theme_name, theme_param, download_path):
|
||||||
if theme_component == "distance_icons":
|
if theme_component == "distance_icons":
|
||||||
download_link = f"{GITLAB_URL}Distance-Icons/{theme_name}"
|
download_link = f"{GITLAB_URL}Distance-Icons/{theme_name}"
|
||||||
elif theme_component == "steering_wheels":
|
elif theme_component == "steering_wheels":
|
||||||
|
@ -269,13 +269,14 @@ class ThemeManager:
|
||||||
else:
|
else:
|
||||||
download_link = f"{GITLAB_URL}Themes/{theme_name}/{theme_component}"
|
download_link = f"{GITLAB_URL}Themes/{theme_name}/{theme_component}"
|
||||||
|
|
||||||
for ext in extentions:
|
for ext in extensions:
|
||||||
theme_path = download_path + ext
|
theme_path = download_path + ext
|
||||||
|
temp_theme_path = f"{os.path.splitext(theme_path)[0]}_temp{ext}"
|
||||||
theme_url = download_link + ext
|
theme_url = download_link + ext
|
||||||
print(f"Downloading theme from GitLab: {theme_name}")
|
print(f"Downloading theme from GitLab: {theme_name}")
|
||||||
download_file(CANCEL_DOWNLOAD_PARAM, theme_path, DOWNLOAD_PROGRESS_PARAM, theme_url, theme_param, self.params_memory)
|
download_file(CANCEL_DOWNLOAD_PARAM, theme_path, temp_theme_path, DOWNLOAD_PROGRESS_PARAM, theme_url, theme_param, self.params_memory)
|
||||||
|
|
||||||
if verify_download(theme_path, theme_url):
|
if verify_download(theme_path, temp_theme_path, theme_url):
|
||||||
print(f"Theme {theme_name} downloaded and verified successfully from GitLab!")
|
print(f"Theme {theme_name} downloaded and verified successfully from GitLab!")
|
||||||
if ext == ".zip":
|
if ext == ".zip":
|
||||||
self.params_memory.put(DOWNLOAD_PROGRESS_PARAM, "Unpacking theme...")
|
self.params_memory.put(DOWNLOAD_PROGRESS_PARAM, "Unpacking theme...")
|
||||||
|
@ -296,27 +297,29 @@ class ThemeManager:
|
||||||
if theme_component == "distance_icons":
|
if theme_component == "distance_icons":
|
||||||
download_link = f"{repo_url}Distance-Icons/{theme_name}"
|
download_link = f"{repo_url}Distance-Icons/{theme_name}"
|
||||||
download_path = os.path.join(THEME_SAVE_PATH, theme_component, theme_name)
|
download_path = os.path.join(THEME_SAVE_PATH, theme_component, theme_name)
|
||||||
extentions = [".zip"]
|
extensions = [".zip"]
|
||||||
elif theme_component == "steering_wheels":
|
elif theme_component == "steering_wheels":
|
||||||
download_link = f"{repo_url}Steering-Wheels/{theme_name}"
|
download_link = f"{repo_url}Steering-Wheels/{theme_name}"
|
||||||
download_path = os.path.join(THEME_SAVE_PATH, theme_component, theme_name)
|
download_path = os.path.join(THEME_SAVE_PATH, theme_component, theme_name)
|
||||||
extentions = [".gif", ".png"]
|
extensions = [".gif", ".png"]
|
||||||
else:
|
else:
|
||||||
download_link = f"{repo_url}Themes/{theme_name}/{theme_component}"
|
download_link = f"{repo_url}Themes/{theme_name}/{theme_component}"
|
||||||
download_path = os.path.join(THEME_SAVE_PATH, "theme_packs", theme_name, theme_component)
|
download_path = os.path.join(THEME_SAVE_PATH, "theme_packs", theme_name, theme_component)
|
||||||
extentions = [".zip"]
|
extensions = [".zip"]
|
||||||
|
|
||||||
for ext in extentions:
|
for ext in extensions:
|
||||||
theme_path = download_path + ext
|
theme_path = download_path + ext
|
||||||
|
temp_theme_path = f"{os.path.splitext(theme_path)[0]}_temp{ext}"
|
||||||
|
|
||||||
if os.path.isfile(theme_path):
|
if os.path.isfile(theme_path):
|
||||||
handle_error(theme_path, "Theme already exists...", "Theme already exists...", theme_param, DOWNLOAD_PROGRESS_PARAM, self.params_memory)
|
handle_error(theme_path, "Theme already exists...", "Theme already exists...", theme_param, DOWNLOAD_PROGRESS_PARAM, self.params_memory)
|
||||||
return
|
return
|
||||||
|
|
||||||
theme_url = download_link + ext
|
theme_url = download_link + ext
|
||||||
print(f"Downloading theme from GitHub: {theme_name}")
|
print(f"Downloading theme from GitHub: {theme_name}")
|
||||||
download_file(CANCEL_DOWNLOAD_PARAM, theme_path, DOWNLOAD_PROGRESS_PARAM, theme_url, theme_param, self.params_memory)
|
download_file(CANCEL_DOWNLOAD_PARAM, theme_path, temp_theme_path, DOWNLOAD_PROGRESS_PARAM, theme_url, theme_param, self.params_memory)
|
||||||
|
|
||||||
if verify_download(theme_path, theme_url):
|
if verify_download(theme_path, temp_theme_path, theme_url):
|
||||||
print(f"Theme {theme_name} downloaded and verified successfully from GitHub!")
|
print(f"Theme {theme_name} downloaded and verified successfully from GitHub!")
|
||||||
if ext == ".zip":
|
if ext == ".zip":
|
||||||
self.params_memory.put(DOWNLOAD_PROGRESS_PARAM, "Unpacking theme...")
|
self.params_memory.put(DOWNLOAD_PROGRESS_PARAM, "Unpacking theme...")
|
||||||
|
@ -325,7 +328,7 @@ class ThemeManager:
|
||||||
self.params_memory.remove(theme_param)
|
self.params_memory.remove(theme_param)
|
||||||
return
|
return
|
||||||
|
|
||||||
self.handle_verification_failure(extentions, theme_component, theme_name, theme_param, download_path)
|
self.handle_verification_failure(extensions, theme_component, theme_name, theme_param, download_path)
|
||||||
|
|
||||||
def update_theme_params(self, downloadable_colors, downloadable_distance_icons, downloadable_icons, downloadable_signals, downloadable_sounds, downloadable_wheels):
|
def update_theme_params(self, downloadable_colors, downloadable_distance_icons, downloadable_icons, downloadable_signals, downloadable_sounds, downloadable_wheels):
|
||||||
def filter_existing_assets(assets, subfolder):
|
def filter_existing_assets(assets, subfolder):
|
||||||
|
|
|
@ -86,10 +86,10 @@ class FrogPilotPlanner:
|
||||||
self.v_cruise = self.frogpilot_vcruise.update(carState, controlsState, frogpilotCarControl, frogpilotCarState, frogpilotNavigation, modelData, v_cruise, v_ego, frogpilot_toggles)
|
self.v_cruise = self.frogpilot_vcruise.update(carState, controlsState, frogpilotCarControl, frogpilotCarState, frogpilotNavigation, modelData, v_cruise, v_ego, frogpilot_toggles)
|
||||||
|
|
||||||
def set_lead_status(self, frogpilotCarState, v_ego, frogpilot_toggles):
|
def set_lead_status(self, frogpilotCarState, v_ego, frogpilot_toggles):
|
||||||
distance_offset = max(frogpilot_toggles.increased_stopped_distance + min(10 - v_ego, 0), 0) if not frogpilotCarState.trafficModeActive else 0
|
distance_offset = frogpilot_toggles.increased_stopped_distance if not frogpilotCarState.trafficModeActive else 0
|
||||||
|
|
||||||
following_lead = self.lead_one.status
|
following_lead = self.lead_one.status
|
||||||
following_lead &= 1 < self.lead_one.dRel - distance_offset < self.model_length + STOP_DISTANCE
|
following_lead &= 1 < self.lead_one.dRel < self.model_length + STOP_DISTANCE + distance_offset
|
||||||
following_lead &= v_ego > CRUISING_SPEED or self.tracking_lead
|
following_lead &= v_ego > CRUISING_SPEED or self.tracking_lead
|
||||||
|
|
||||||
self.tracking_lead_mac.add_data(following_lead)
|
self.tracking_lead_mac.add_data(following_lead)
|
||||||
|
|
|
@ -40,12 +40,12 @@ class SpeedLimitController:
|
||||||
def get_map_speed_limit(self, v_ego, frogpilot_toggles):
|
def get_map_speed_limit(self, v_ego, frogpilot_toggles):
|
||||||
map_speed_limit = self.params_memory.get_float("MapSpeedLimit")
|
map_speed_limit = self.params_memory.get_float("MapSpeedLimit")
|
||||||
|
|
||||||
next_map_speed_limit = json.loads(self.params_memory.get("NextMapSpeedLimit"))
|
next_map_speed_limit = json.loads(self.params_memory.get("NextMapSpeedLimit", "{}"))
|
||||||
next_map_speed_limit_lat = next_map_speed_limit.get("latitude", 0)
|
next_map_speed_limit_lat = next_map_speed_limit.get("latitude", 0)
|
||||||
next_map_speed_limit_lon = next_map_speed_limit.get("longitude", 0)
|
next_map_speed_limit_lon = next_map_speed_limit.get("longitude", 0)
|
||||||
next_map_speed_limit_value = next_map_speed_limit.get("speedlimit", 0)
|
next_map_speed_limit_value = next_map_speed_limit.get("speedlimit", 0)
|
||||||
|
|
||||||
position = json.loads(self.params_memory.get("LastGPSPosition"))
|
position = json.loads(self.params_memory.get("LastGPSPosition", "{}"))
|
||||||
lat = position.get("latitude", 0)
|
lat = position.get("latitude", 0)
|
||||||
lon = position.get("longitude", 0)
|
lon = position.get("longitude", 0)
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ import os
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
import openpilot.system.sentry as sentry
|
||||||
|
|
||||||
from cereal import messaging
|
from cereal import messaging
|
||||||
from openpilot.common.params import Params
|
from openpilot.common.params import Params
|
||||||
from openpilot.common.realtime import Priority, config_realtime_process
|
from openpilot.common.realtime import Priority, config_realtime_process
|
||||||
|
@ -85,11 +87,11 @@ def check_assets(model_manager, theme_manager, params, params_memory):
|
||||||
run_thread_with_lock("download_theme", theme_manager.download_theme, (asset_type, asset_to_download, param))
|
run_thread_with_lock("download_theme", theme_manager.download_theme, (asset_type, asset_to_download, param))
|
||||||
|
|
||||||
|
|
||||||
def update_checks(automatic_updates, model_manager, now, screen_off, started, theme_manager, time_validated, params, params_memory):
|
def update_checks(automatic_updates, frogs_go_moo, model_manager, now, screen_off, started, theme_manager, time_validated, params, params_memory):
|
||||||
if not (is_url_pingable("https://github.com") or is_url_pingable("https://gitlab.com")):
|
if not (is_url_pingable("https://github.com") or is_url_pingable("https://gitlab.com")):
|
||||||
return
|
return
|
||||||
|
|
||||||
if automatic_updates and screen_off:
|
if automatic_updates and (screen_off or frogs_go_moo):
|
||||||
automatic_update_check(started, params)
|
automatic_update_check(started, params)
|
||||||
|
|
||||||
if time_validated:
|
if time_validated:
|
||||||
|
@ -136,7 +138,6 @@ def frogpilot_thread():
|
||||||
model_manager = ModelManager()
|
model_manager = ModelManager()
|
||||||
theme_manager = ThemeManager()
|
theme_manager = ThemeManager()
|
||||||
|
|
||||||
frogpilot_variables.update(False)
|
|
||||||
theme_manager.update_active_theme()
|
theme_manager.update_active_theme()
|
||||||
|
|
||||||
run_update_checks = False
|
run_update_checks = False
|
||||||
|
@ -152,6 +153,10 @@ def frogpilot_thread():
|
||||||
|
|
||||||
toggles_last_updated = None
|
toggles_last_updated = None
|
||||||
|
|
||||||
|
error_log = os.path.join(sentry.CRASHES_DIR, 'error.txt')
|
||||||
|
if os.path.isfile(error_log):
|
||||||
|
os.remove(error_log)
|
||||||
|
|
||||||
pm = messaging.PubMaster(['frogpilotPlan'])
|
pm = messaging.PubMaster(['frogpilotPlan'])
|
||||||
sm = messaging.SubMaster(['carState', 'controlsState', 'deviceState', 'modelV2', 'radarState',
|
sm = messaging.SubMaster(['carState', 'controlsState', 'deviceState', 'modelV2', 'radarState',
|
||||||
'frogpilotCarControl', 'frogpilotCarState', 'frogpilotNavigation'],
|
'frogpilotCarControl', 'frogpilotCarState', 'frogpilotNavigation'],
|
||||||
|
@ -184,6 +189,9 @@ def frogpilot_thread():
|
||||||
elif started and not started_previously:
|
elif started and not started_previously:
|
||||||
radarless_model = frogpilot_toggles.radarless_model
|
radarless_model = frogpilot_toggles.radarless_model
|
||||||
|
|
||||||
|
if os.path.isfile(error_log):
|
||||||
|
os.remove(error_log)
|
||||||
|
|
||||||
if started and sm.updated['modelV2']:
|
if started and sm.updated['modelV2']:
|
||||||
frogpilot_planner.update(sm['carState'], sm['controlsState'], sm['frogpilotCarControl'], sm['frogpilotCarState'],
|
frogpilot_planner.update(sm['carState'], sm['controlsState'], sm['frogpilotCarControl'], sm['frogpilotCarState'],
|
||||||
sm['frogpilotNavigation'], sm['modelV2'], radarless_model, sm['radarState'], frogpilot_toggles)
|
sm['frogpilotNavigation'], sm['modelV2'], radarless_model, sm['radarState'], frogpilot_toggles)
|
||||||
|
@ -201,12 +209,12 @@ def frogpilot_thread():
|
||||||
check_assets(model_manager, theme_manager, params, params_memory)
|
check_assets(model_manager, theme_manager, params, params_memory)
|
||||||
|
|
||||||
if params_memory.get_bool("ManualUpdateInitiated"):
|
if params_memory.get_bool("ManualUpdateInitiated"):
|
||||||
run_thread_with_lock("update_checks", update_checks, (False, model_manager, now, screen_off, started, theme_manager, time_validated, params, params_memory))
|
run_thread_with_lock("update_checks", update_checks, (False, frogs_go_moo, model_manager, now, screen_off, started, theme_manager, time_validated, params, params_memory))
|
||||||
run_thread_with_lock("update_themes", theme_manager.update_themes())
|
run_thread_with_lock("update_themes", theme_manager.update_themes())
|
||||||
elif now.second == 0:
|
elif now.second == 0:
|
||||||
run_update_checks = not screen_off and not started or now.minute % 15 == 0 or frogs_go_moo
|
run_update_checks = not screen_off and not started or now.minute % 15 == 0 or frogs_go_moo
|
||||||
elif run_update_checks:
|
elif run_update_checks:
|
||||||
run_thread_with_lock("update_checks", update_checks, (frogpilot_toggles.automatic_updates, model_manager, now, screen_off, started, theme_manager, time_validated, params, params_memory))
|
run_thread_with_lock("update_checks", update_checks, (frogpilot_toggles.automatic_updates, frogs_go_moo, model_manager, now, screen_off, started, theme_manager, time_validated, params, params_memory))
|
||||||
|
|
||||||
if time_validated:
|
if time_validated:
|
||||||
theme_manager.update_holiday()
|
theme_manager.update_holiday()
|
||||||
|
|
|
@ -29,8 +29,12 @@ TO_RADIANS = math.pi / 180 # Conversion factor from
|
||||||
|
|
||||||
|
|
||||||
def get_frogpilot_toggles(block=False):
|
def get_frogpilot_toggles(block=False):
|
||||||
toggles_dict = json.loads(Params().get("FrogPilotToggles", block=block))
|
while block:
|
||||||
return SimpleNamespace(**toggles_dict)
|
namespace = SimpleNamespace(**json.loads(Params().get("FrogPilotToggles", block=True)))
|
||||||
|
if namespace != SimpleNamespace():
|
||||||
|
return namespace
|
||||||
|
time.sleep(0.1)
|
||||||
|
return SimpleNamespace(**json.loads(Params().get("FrogPilotToggles")))
|
||||||
|
|
||||||
|
|
||||||
def has_prime():
|
def has_prime():
|
||||||
|
@ -143,7 +147,7 @@ frogpilot_default_params: list[tuple[str, str | bytes]] = [
|
||||||
("ForceStandstill", "0"),
|
("ForceStandstill", "0"),
|
||||||
("ForceStops", "0"),
|
("ForceStops", "0"),
|
||||||
("FPSCounter", "1"),
|
("FPSCounter", "1"),
|
||||||
("FrogPilotToggles", "{}"),
|
("FrogPilotToggles", ""),
|
||||||
("FrogsGoMoosTweak", "1"),
|
("FrogsGoMoosTweak", "1"),
|
||||||
("FullMap", "0"),
|
("FullMap", "0"),
|
||||||
("GasRegenCmd", "1"),
|
("GasRegenCmd", "1"),
|
||||||
|
@ -543,7 +547,7 @@ class FrogPilotVariables:
|
||||||
toggle.increase_thermal_limits = toggle.device_management and self.params.get_bool("IncreaseThermalLimits")
|
toggle.increase_thermal_limits = toggle.device_management and self.params.get_bool("IncreaseThermalLimits")
|
||||||
toggle.low_voltage_shutdown = clip(self.params.get_float("LowVoltageShutdown"), VBATT_PAUSE_CHARGING, 12.5) if toggle.device_management else VBATT_PAUSE_CHARGING
|
toggle.low_voltage_shutdown = clip(self.params.get_float("LowVoltageShutdown"), VBATT_PAUSE_CHARGING, 12.5) if toggle.device_management else VBATT_PAUSE_CHARGING
|
||||||
toggle.no_logging = toggle.device_management and self.params.get_bool("NoLogging")
|
toggle.no_logging = toggle.device_management and self.params.get_bool("NoLogging")
|
||||||
toggle.no_uploads = toggle.device_management and self.params.get_bool("NoUploads")
|
toggle.no_uploads = toggle.device_management and self.params.get_bool("NoUploads") and not self.params.get_bool("DisableOnroadUploads")
|
||||||
toggle.offline_mode = toggle.device_management and self.params.get_bool("OfflineMode")
|
toggle.offline_mode = toggle.device_management and self.params.get_bool("OfflineMode")
|
||||||
|
|
||||||
toggle.experimental_gm_tune = openpilot_longitudinal and car_make == "gm" and self.params.get_bool("ExperimentalGMTune")
|
toggle.experimental_gm_tune = openpilot_longitudinal and car_make == "gm" and self.params.get_bool("ExperimentalGMTune")
|
||||||
|
@ -565,7 +569,7 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.lateral_tuning = self.params.get_bool("LateralTune")
|
toggle.lateral_tuning = self.params.get_bool("LateralTune")
|
||||||
toggle.nnff = toggle.lateral_tuning and self.params.get_bool("NNFF")
|
toggle.nnff = toggle.lateral_tuning and self.params.get_bool("NNFF")
|
||||||
toggle.smooth_curve_handling = toggle.lateral_tuning and self.params.get_bool("NNFFLite")
|
toggle.nnff_lite = toggle.lateral_tuning and self.params.get_bool("NNFFLite")
|
||||||
toggle.taco_tune = toggle.lateral_tuning and self.params.get_bool("TacoTune")
|
toggle.taco_tune = toggle.lateral_tuning and self.params.get_bool("TacoTune")
|
||||||
toggle.use_turn_desires = toggle.lateral_tuning and self.params.get_bool("TurnDesires")
|
toggle.use_turn_desires = toggle.lateral_tuning and self.params.get_bool("TurnDesires")
|
||||||
|
|
||||||
|
@ -628,11 +632,11 @@ class FrogPilotVariables:
|
||||||
toggle.show_speed_limit_offset = toggle.navigation_ui and self.params.get_bool("ShowSLCOffset")
|
toggle.show_speed_limit_offset = toggle.navigation_ui and self.params.get_bool("ShowSLCOffset")
|
||||||
toggle.speed_limit_vienna = toggle.navigation_ui and self.params.get_bool("UseVienna")
|
toggle.speed_limit_vienna = toggle.navigation_ui and self.params.get_bool("UseVienna")
|
||||||
|
|
||||||
toggle.new_long_api_gm = openpilot_longitudinal and car_make == "gm" and self.params.get_bool("NewLongAPIGM")
|
|
||||||
toggle.new_long_api_hkg = openpilot_longitudinal and car_make == "hyundai" and self.params.get_bool("NewLongAPI")
|
|
||||||
|
|
||||||
toggle.new_toyota_tune = openpilot_longitudinal and car_make == "toyota" and self.params.get_bool("NewToyotaTune")
|
toggle.new_toyota_tune = openpilot_longitudinal and car_make == "toyota" and self.params.get_bool("NewToyotaTune")
|
||||||
|
|
||||||
|
toggle.old_long_api = openpilot_longitudinal and car_make == "gm" and not self.params.get_bool("NewLongAPIGM")
|
||||||
|
toggle.old_long_api |= openpilot_longitudinal and car_make == "hyundai" and not self.params.get_bool("NewLongAPI")
|
||||||
|
|
||||||
toggle.personalize_openpilot = self.params.get_bool("PersonalizeOpenpilot")
|
toggle.personalize_openpilot = self.params.get_bool("PersonalizeOpenpilot")
|
||||||
toggle.color_scheme = self.params.get("CustomColors", encoding='utf-8') if toggle.personalize_openpilot else "stock"
|
toggle.color_scheme = self.params.get("CustomColors", encoding='utf-8') if toggle.personalize_openpilot else "stock"
|
||||||
toggle.distance_icons = self.params.get("CustomDistanceIcons", encoding='utf-8') if toggle.personalize_openpilot else "stock"
|
toggle.distance_icons = self.params.get("CustomDistanceIcons", encoding='utf-8') if toggle.personalize_openpilot else "stock"
|
||||||
|
@ -752,8 +756,8 @@ class FrogPilotVariables:
|
||||||
toggle.conditional_lead = toggle.conditional_experimental_mode and self.default_frogpilot_toggles.CELead
|
toggle.conditional_lead = toggle.conditional_experimental_mode and self.default_frogpilot_toggles.CELead
|
||||||
toggle.conditional_slower_lead = toggle.conditional_lead and self.default_frogpilot_toggles.CESlowerLead
|
toggle.conditional_slower_lead = toggle.conditional_lead and self.default_frogpilot_toggles.CESlowerLead
|
||||||
toggle.conditional_stopped_lead = toggle.conditional_lead and self.default_frogpilot_toggles.CEStoppedLead
|
toggle.conditional_stopped_lead = toggle.conditional_lead and self.default_frogpilot_toggles.CEStoppedLead
|
||||||
toggle.conditional_limit = self.default_frogpilot_toggles.CESpeed * speed_conversion if toggle.conditional_experimental_mode else 0
|
toggle.conditional_limit = float(self.default_frogpilot_toggles.CESpeed) * speed_conversion if toggle.conditional_experimental_mode else 0
|
||||||
toggle.conditional_limit_lead = self.default_frogpilot_toggles.CESpeedLead * speed_conversion if toggle.conditional_experimental_mode else 0
|
toggle.conditional_limit_lead = float(self.default_frogpilot_toggles.CESpeedLead) * speed_conversion if toggle.conditional_experimental_mode else 0
|
||||||
toggle.conditional_navigation = toggle.conditional_experimental_mode and self.default_frogpilot_toggles.CENavigation
|
toggle.conditional_navigation = toggle.conditional_experimental_mode and self.default_frogpilot_toggles.CENavigation
|
||||||
toggle.conditional_navigation_intersections = toggle.conditional_navigation and self.default_frogpilot_toggles.CENavigationIntersections
|
toggle.conditional_navigation_intersections = toggle.conditional_navigation and self.default_frogpilot_toggles.CENavigationIntersections
|
||||||
toggle.conditional_navigation_lead = toggle.conditional_navigation and self.default_frogpilot_toggles.CENavigationLead
|
toggle.conditional_navigation_lead = toggle.conditional_navigation and self.default_frogpilot_toggles.CENavigationLead
|
||||||
|
@ -768,8 +772,8 @@ class FrogPilotVariables:
|
||||||
toggle.crosstrek_torque = car_model == "SUBARU_IMPREZA" and self.default_frogpilot_toggles.CrosstrekTorque
|
toggle.crosstrek_torque = car_model == "SUBARU_IMPREZA" and self.default_frogpilot_toggles.CrosstrekTorque
|
||||||
|
|
||||||
toggle.curve_speed_controller = openpilot_longitudinal and self.default_frogpilot_toggles.CurveSpeedControl
|
toggle.curve_speed_controller = openpilot_longitudinal and self.default_frogpilot_toggles.CurveSpeedControl
|
||||||
toggle.curve_sensitivity = self.default_frogpilot_toggles.CurveSensitivity / 100 if toggle.curve_speed_controller else 1
|
toggle.curve_sensitivity = float(self.default_frogpilot_toggles.CurveSensitivity) / 100 if toggle.curve_speed_controller else 1
|
||||||
toggle.turn_aggressiveness = self.default_frogpilot_toggles.TurnAggressiveness / 100 if toggle.curve_speed_controller else 1
|
toggle.turn_aggressiveness = float(self.default_frogpilot_toggles.TurnAggressiveness) / 100 if toggle.curve_speed_controller else 1
|
||||||
toggle.disable_curve_speed_smoothing = toggle.curve_speed_controller and self.default_frogpilot_toggles.DisableCurveSpeedSmoothing
|
toggle.disable_curve_speed_smoothing = toggle.curve_speed_controller and self.default_frogpilot_toggles.DisableCurveSpeedSmoothing
|
||||||
toggle.map_turn_speed_controller = toggle.curve_speed_controller and self.default_frogpilot_toggles.MTSCEnabled
|
toggle.map_turn_speed_controller = toggle.curve_speed_controller and self.default_frogpilot_toggles.MTSCEnabled
|
||||||
toggle.mtsc_curvature_check = toggle.map_turn_speed_controller and self.default_frogpilot_toggles.MTSCCurvatureCheck
|
toggle.mtsc_curvature_check = toggle.map_turn_speed_controller and self.default_frogpilot_toggles.MTSCCurvatureCheck
|
||||||
|
@ -777,32 +781,32 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.custom_personalities = openpilot_longitudinal and self.default_frogpilot_toggles.CustomPersonalities
|
toggle.custom_personalities = openpilot_longitudinal and self.default_frogpilot_toggles.CustomPersonalities
|
||||||
toggle.aggressive_profile = toggle.custom_personalities and self.default_frogpilot_toggles.AggressivePersonalityProfile
|
toggle.aggressive_profile = toggle.custom_personalities and self.default_frogpilot_toggles.AggressivePersonalityProfile
|
||||||
toggle.aggressive_jerk_deceleration = self.default_frogpilot_toggles.AggressiveJerkDeceleration / 100 if toggle.aggressive_profile else 0.5
|
toggle.aggressive_jerk_deceleration = float(self.default_frogpilot_toggles.AggressiveJerkDeceleration) / 100 if toggle.aggressive_profile else 0.5
|
||||||
toggle.aggressive_jerk_danger = self.default_frogpilot_toggles.AggressiveJerkDanger / 100 if toggle.aggressive_profile else 1.0
|
toggle.aggressive_jerk_danger = float(self.default_frogpilot_toggles.AggressiveJerkDanger) / 100 if toggle.aggressive_profile else 1.0
|
||||||
toggle.aggressive_jerk_speed = self.default_frogpilot_toggles.AggressiveJerkSpeed / 100 if toggle.aggressive_profile else 0.5
|
toggle.aggressive_jerk_speed = float(self.default_frogpilot_toggles.AggressiveJerkSpeed) / 100 if toggle.aggressive_profile else 0.5
|
||||||
toggle.aggressive_jerk_speed_decrease = self.default_frogpilot_toggles.AggressiveJerkSpeedDecrease / 100 if toggle.aggressive_profile else 0.5
|
toggle.aggressive_jerk_speed_decrease = float(self.default_frogpilot_toggles.AggressiveJerkSpeedDecrease) / 100 if toggle.aggressive_profile else 0.5
|
||||||
toggle.aggressive_follow = self.default_frogpilot_toggles.AggressiveFollow if toggle.aggressive_profile else 1.25
|
toggle.aggressive_follow = float(self.default_frogpilot_toggles.AggressiveFollow) if toggle.aggressive_profile else 1.25
|
||||||
toggle.standard_profile = toggle.custom_personalities and self.default_frogpilot_toggles.StandardPersonalityProfile
|
toggle.standard_profile = toggle.custom_personalities and self.default_frogpilot_toggles.StandardPersonalityProfile
|
||||||
toggle.standard_jerk_acceleration = self.default_frogpilot_toggles.StandardJerkAcceleration / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_acceleration = float(self.default_frogpilot_toggles.StandardJerkAcceleration) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_deceleration = self.default_frogpilot_toggles.StandardJerkDeceleration / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_deceleration = float(self.default_frogpilot_toggles.StandardJerkDeceleration) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_danger = self.default_frogpilot_toggles.StandardJerkDanger / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_danger = float(self.default_frogpilot_toggles.StandardJerkDanger) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_speed = self.default_frogpilot_toggles.StandardJerkSpeed / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_speed = float(self.default_frogpilot_toggles.StandardJerkSpeed) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_speed_decrease = self.default_frogpilot_toggles.StandardJerkSpeedDecrease / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_speed_decrease = float(self.default_frogpilot_toggles.StandardJerkSpeedDecrease) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_follow = self.default_frogpilot_toggles.StandardFollow if toggle.standard_profile else 1.45
|
toggle.standard_follow = float(self.default_frogpilot_toggles.StandardFollow) if toggle.standard_profile else 1.45
|
||||||
toggle.relaxed_profile = toggle.custom_personalities and self.default_frogpilot_toggles.RelaxedPersonalityProfile
|
toggle.relaxed_profile = toggle.custom_personalities and self.default_frogpilot_toggles.RelaxedPersonalityProfile
|
||||||
toggle.relaxed_jerk_acceleration = self.default_frogpilot_toggles.RelaxedJerkAcceleration / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_acceleration = float(self.default_frogpilot_toggles.RelaxedJerkAcceleration) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_deceleration = self.default_frogpilot_toggles.RelaxedJerkDeceleration / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_deceleration = float(self.default_frogpilot_toggles.RelaxedJerkDeceleration) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_danger = self.default_frogpilot_toggles.RelaxedJerkDanger / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_danger = float(self.default_frogpilot_toggles.RelaxedJerkDanger) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_speed = self.default_frogpilot_toggles.RelaxedJerkSpeed / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_speed = float(self.default_frogpilot_toggles.RelaxedJerkSpeed) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_speed_decrease = self.default_frogpilot_toggles.RelaxedJerkSpeedDecrease / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_speed_decrease = float(self.default_frogpilot_toggles.RelaxedJerkSpeedDecrease) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_follow = self.default_frogpilot_toggles.RelaxedFollow if toggle.relaxed_profile else 1.75
|
toggle.relaxed_follow = float(self.default_frogpilot_toggles.RelaxedFollow) if toggle.relaxed_profile else 1.75
|
||||||
toggle.traffic_profile = toggle.custom_personalities and self.default_frogpilot_toggles.TrafficPersonalityProfile
|
toggle.traffic_profile = toggle.custom_personalities and self.default_frogpilot_toggles.TrafficPersonalityProfile
|
||||||
toggle.traffic_mode_jerk_acceleration = [self.default_frogpilot_toggles.TrafficJerkAcceleration / 100, toggle.aggressive_jerk_acceleration] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_acceleration = [float(self.default_frogpilot_toggles.TrafficJerkAcceleration) / 100, toggle.aggressive_jerk_acceleration] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_jerk_deceleration = [self.default_frogpilot_toggles.TrafficJerkDeceleration / 100, toggle.aggressive_jerk_deceleration] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_deceleration = [float(self.default_frogpilot_toggles.TrafficJerkDeceleration) / 100, toggle.aggressive_jerk_deceleration] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_jerk_danger = [self.default_frogpilot_toggles.TrafficJerkDanger / 100, toggle.aggressive_jerk_danger] if toggle.traffic_profile else [1.0, 1.0]
|
toggle.traffic_mode_jerk_danger = [float(self.default_frogpilot_toggles.TrafficJerkDanger) / 100, toggle.aggressive_jerk_danger] if toggle.traffic_profile else [1.0, 1.0]
|
||||||
toggle.traffic_mode_jerk_speed = [self.default_frogpilot_toggles.TrafficJerkSpeed / 100, toggle.aggressive_jerk_speed] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_speed = [float(self.default_frogpilot_toggles.TrafficJerkSpeed) / 100, toggle.aggressive_jerk_speed] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_jerk_speed_decrease = [self.default_frogpilot_toggles.TrafficJerkSpeedDecrease / 100, toggle.aggressive_jerk_speed_decrease] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_speed_decrease = [float(self.default_frogpilot_toggles.TrafficJerkSpeedDecrease) / 100, toggle.aggressive_jerk_speed_decrease] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_t_follow = [self.default_frogpilot_toggles.TrafficFollow, toggle.aggressive_follow] if toggle.traffic_profile else [0.5, 1.0]
|
toggle.traffic_mode_t_follow = [float(self.default_frogpilot_toggles.TrafficFollow), toggle.aggressive_follow] if toggle.traffic_profile else [0.5, 1.0]
|
||||||
|
|
||||||
toggle.custom_ui = self.default_frogpilot_toggles.CustomUI
|
toggle.custom_ui = self.default_frogpilot_toggles.CustomUI
|
||||||
toggle.acceleration_path = toggle.custom_ui and self.default_frogpilot_toggles.AccelerationPath
|
toggle.acceleration_path = toggle.custom_ui and self.default_frogpilot_toggles.AccelerationPath
|
||||||
|
@ -839,10 +843,10 @@ class FrogPilotVariables:
|
||||||
toggle.use_si_metrics = toggle.developer_ui and self.default_frogpilot_toggles.UseSI
|
toggle.use_si_metrics = toggle.developer_ui and self.default_frogpilot_toggles.UseSI
|
||||||
|
|
||||||
toggle.device_management = self.default_frogpilot_toggles.DeviceManagement
|
toggle.device_management = self.default_frogpilot_toggles.DeviceManagement
|
||||||
device_shutdown_setting = self.default_frogpilot_toggles.DeviceShutdown if toggle.device_management else 33
|
device_shutdown_setting = float(self.default_frogpilot_toggles.DeviceShutdown) if toggle.device_management else 33
|
||||||
toggle.device_shutdown_time = (device_shutdown_setting - 3) * 3600 if device_shutdown_setting >= 4 else device_shutdown_setting * (60 * 15)
|
toggle.device_shutdown_time = (device_shutdown_setting - 3) * 3600 if device_shutdown_setting >= 4 else device_shutdown_setting * (60 * 15)
|
||||||
toggle.increase_thermal_limits = toggle.device_management and self.default_frogpilot_toggles.IncreaseThermalLimits
|
toggle.increase_thermal_limits = toggle.device_management and self.default_frogpilot_toggles.IncreaseThermalLimits
|
||||||
toggle.low_voltage_shutdown = clip(self.default_frogpilot_toggles.LowVoltageShutdown, VBATT_PAUSE_CHARGING, 12.5) if toggle.device_management else VBATT_PAUSE_CHARGING
|
toggle.low_voltage_shutdown = clip(float(self.default_frogpilot_toggles.LowVoltageShutdown), VBATT_PAUSE_CHARGING, 12.5) if toggle.device_management else VBATT_PAUSE_CHARGING
|
||||||
toggle.no_logging = toggle.device_management and self.default_frogpilot_toggles.NoLogging
|
toggle.no_logging = toggle.device_management and self.default_frogpilot_toggles.NoLogging
|
||||||
toggle.no_uploads = toggle.device_management and self.default_frogpilot_toggles.NoUploads
|
toggle.no_uploads = toggle.device_management and self.default_frogpilot_toggles.NoUploads
|
||||||
toggle.offline_mode = toggle.device_management and self.default_frogpilot_toggles.OfflineMode
|
toggle.offline_mode = toggle.device_management and self.default_frogpilot_toggles.OfflineMode
|
||||||
|
@ -858,15 +862,15 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.lane_change_customizations = self.default_frogpilot_toggles.LaneChangeCustomizations
|
toggle.lane_change_customizations = self.default_frogpilot_toggles.LaneChangeCustomizations
|
||||||
toggle.lane_change_delay = self.default_frogpilot_toggles.LaneChangeTime if toggle.lane_change_customizations else 0
|
toggle.lane_change_delay = self.default_frogpilot_toggles.LaneChangeTime if toggle.lane_change_customizations else 0
|
||||||
toggle.lane_detection_width = self.default_frogpilot_toggles.LaneDetectionWidth * distance_conversion if toggle.lane_change_customizations else 0
|
toggle.lane_detection_width = float(self.default_frogpilot_toggles.LaneDetectionWidth) * distance_conversion if toggle.lane_change_customizations else 0
|
||||||
toggle.lane_detection = toggle.lane_detection_width != 0
|
toggle.lane_detection = toggle.lane_detection_width != 0
|
||||||
toggle.minimum_lane_change_speed = self.default_frogpilot_toggles.MinimumLaneChangeSpeed * speed_conversion if toggle.lane_change_customizations else LANE_CHANGE_SPEED_MIN
|
toggle.minimum_lane_change_speed = float(self.default_frogpilot_toggles.MinimumLaneChangeSpeed) * speed_conversion if toggle.lane_change_customizations else LANE_CHANGE_SPEED_MIN
|
||||||
toggle.nudgeless = toggle.lane_change_customizations and self.default_frogpilot_toggles.NudgelessLaneChange
|
toggle.nudgeless = toggle.lane_change_customizations and self.default_frogpilot_toggles.NudgelessLaneChange
|
||||||
toggle.one_lane_change = toggle.lane_change_customizations and self.default_frogpilot_toggles.OneLaneChange
|
toggle.one_lane_change = toggle.lane_change_customizations and self.default_frogpilot_toggles.OneLaneChange
|
||||||
|
|
||||||
toggle.lateral_tuning = self.default_frogpilot_toggles.LateralTune
|
toggle.lateral_tuning = self.default_frogpilot_toggles.LateralTune
|
||||||
toggle.nnff = toggle.lateral_tuning and self.default_frogpilot_toggles.NNFF
|
toggle.nnff = toggle.lateral_tuning and self.default_frogpilot_toggles.NNFF
|
||||||
toggle.smooth_curve_handling = toggle.lateral_tuning and self.default_frogpilot_toggles.NNFFLite
|
toggle.nnff_lite = toggle.lateral_tuning and self.default_frogpilot_toggles.NNFFLite
|
||||||
toggle.taco_tune = toggle.lateral_tuning and self.default_frogpilot_toggles.TacoTune
|
toggle.taco_tune = toggle.lateral_tuning and self.default_frogpilot_toggles.TacoTune
|
||||||
toggle.use_turn_desires = toggle.lateral_tuning and self.default_frogpilot_toggles.TurnDesires
|
toggle.use_turn_desires = toggle.lateral_tuning and self.default_frogpilot_toggles.TurnDesires
|
||||||
|
|
||||||
|
@ -874,9 +878,9 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.human_acceleration = toggle.longitudinal_tuning and self.default_frogpilot_toggles.HumanAcceleration
|
toggle.human_acceleration = toggle.longitudinal_tuning and self.default_frogpilot_toggles.HumanAcceleration
|
||||||
toggle.human_following = toggle.longitudinal_tuning and self.default_frogpilot_toggles.HumanFollowing
|
toggle.human_following = toggle.longitudinal_tuning and self.default_frogpilot_toggles.HumanFollowing
|
||||||
toggle.increased_stopped_distance = self.default_frogpilot_toggles.IncreasedStoppedDistance * distance_conversion if toggle.longitudinal_tuning else 0
|
toggle.increased_stopped_distance = float(self.default_frogpilot_toggles.IncreasedStoppedDistance) * distance_conversion if toggle.longitudinal_tuning else 0
|
||||||
toggle.lead_detection_probability = clip(self.default_frogpilot_toggles.LeadDetectionThreshold / 100, 0.01, 0.99) if toggle.longitudinal_tuning else 0.5
|
toggle.lead_detection_probability = clip(float(self.default_frogpilot_toggles.LeadDetectionThreshold) / 100, 0.01, 0.99) if toggle.longitudinal_tuning else 0.5
|
||||||
toggle.max_desired_acceleration = clip(self.default_frogpilot_toggles.MaxDesiredAcceleration, 0.1, 4.0) if toggle.longitudinal_tuning else 4.0
|
toggle.max_desired_acceleration = clip(float(self.default_frogpilot_toggles.MaxDesiredAcceleration), 0.1, 4.0) if toggle.longitudinal_tuning else 4.0
|
||||||
|
|
||||||
toggle.model = DEFAULT_MODEL
|
toggle.model = DEFAULT_MODEL
|
||||||
toggle.part_model_param = ""
|
toggle.part_model_param = ""
|
||||||
|
@ -886,10 +890,10 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.model_ui = self.default_frogpilot_toggles.ModelUI
|
toggle.model_ui = self.default_frogpilot_toggles.ModelUI
|
||||||
toggle.dynamic_path_width = toggle.model_ui and self.default_frogpilot_toggles.DynamicPathWidth
|
toggle.dynamic_path_width = toggle.model_ui and self.default_frogpilot_toggles.DynamicPathWidth
|
||||||
toggle.lane_line_width = self.default_frogpilot_toggles.LaneLinesWidth * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
toggle.lane_line_width = float(self.default_frogpilot_toggles.LaneLinesWidth) * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
||||||
toggle.path_edge_width = self.default_frogpilot_toggles.PathEdgeWidth if toggle.model_ui else 20
|
toggle.path_edge_width = float(self.default_frogpilot_toggles.PathEdgeWidth) if toggle.model_ui else 20
|
||||||
toggle.path_width = self.default_frogpilot_toggles.PathWidth * distance_conversion / 2 if toggle.model_ui else 0.9
|
toggle.path_width = float(self.default_frogpilot_toggles.PathWidth) * distance_conversion / 2 if toggle.model_ui else 0.9
|
||||||
toggle.road_edge_width = self.default_frogpilot_toggles.RoadEdgesWidth * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
toggle.road_edge_width = float(self.default_frogpilot_toggles.RoadEdgesWidth) * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
||||||
toggle.show_stopping_point = toggle.model_ui and self.default_frogpilot_toggles.ShowStoppingPoint
|
toggle.show_stopping_point = toggle.model_ui and self.default_frogpilot_toggles.ShowStoppingPoint
|
||||||
toggle.show_stopping_point_metrics = toggle.show_stopping_point and self.default_frogpilot_toggles.ShowStoppingPointMetrics
|
toggle.show_stopping_point_metrics = toggle.show_stopping_point and self.default_frogpilot_toggles.ShowStoppingPointMetrics
|
||||||
toggle.unlimited_road_ui_length = toggle.model_ui and self.default_frogpilot_toggles.UnlimitedLength
|
toggle.unlimited_road_ui_length = toggle.model_ui and self.default_frogpilot_toggles.UnlimitedLength
|
||||||
|
@ -902,17 +906,17 @@ class FrogPilotVariables:
|
||||||
toggle.show_speed_limit_offset = toggle.navigation_ui and self.default_frogpilot_toggles.ShowSLCOffset
|
toggle.show_speed_limit_offset = toggle.navigation_ui and self.default_frogpilot_toggles.ShowSLCOffset
|
||||||
toggle.speed_limit_vienna = toggle.navigation_ui and self.default_frogpilot_toggles.UseVienna
|
toggle.speed_limit_vienna = toggle.navigation_ui and self.default_frogpilot_toggles.UseVienna
|
||||||
|
|
||||||
toggle.new_long_api_gm = openpilot_longitudinal and car_make == "gm" and self.default_frogpilot_toggles.NewLongAPIGM
|
toggle.old_long_api = openpilot_longitudinal and car_make == "gm" and not self.default_frogpilot_toggles.NewLongAPIGM
|
||||||
toggle.new_long_api_hkg = openpilot_longitudinal and car_make == "hyundai" and self.default_frogpilot_toggles.NewLongAPI
|
toggle.old_long_api |= openpilot_longitudinal and car_make == "hyundai" and not self.default_frogpilot_toggles.NewLongAPI
|
||||||
|
|
||||||
toggle.new_toyota_tune = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.NewToyotaTune
|
toggle.new_toyota_tune = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.NewToyotaTune
|
||||||
|
|
||||||
toggle.quality_of_life_lateral = self.default_frogpilot_toggles.QOLLateral
|
toggle.quality_of_life_lateral = self.default_frogpilot_toggles.QOLLateral
|
||||||
toggle.pause_lateral_below_speed = self.default_frogpilot_toggles.PauseLateralSpeed * speed_conversion if toggle.quality_of_life_lateral else 0
|
toggle.pause_lateral_below_speed = float(self.default_frogpilot_toggles.PauseLateralSpeed) * speed_conversion if toggle.quality_of_life_lateral else 0
|
||||||
|
|
||||||
toggle.quality_of_life_longitudinal = self.default_frogpilot_toggles.QOLLongitudinal
|
toggle.quality_of_life_longitudinal = self.default_frogpilot_toggles.QOLLongitudinal
|
||||||
toggle.custom_cruise_increase = self.default_frogpilot_toggles.CustomCruise if toggle.quality_of_life_longitudinal and not pcm_cruise else 1
|
toggle.custom_cruise_increase = float(self.default_frogpilot_toggles.CustomCruise) if toggle.quality_of_life_longitudinal and not pcm_cruise else 1
|
||||||
toggle.custom_cruise_increase_long = self.default_frogpilot_toggles.CustomCruiseLong if toggle.quality_of_life_longitudinal and not pcm_cruise else 5
|
toggle.custom_cruise_increase_long = float(self.default_frogpilot_toggles.CustomCruiseLong) if toggle.quality_of_life_longitudinal and not pcm_cruise else 5
|
||||||
toggle.force_standstill = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStandstill
|
toggle.force_standstill = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStandstill
|
||||||
toggle.force_stops = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStops
|
toggle.force_stops = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStops
|
||||||
toggle.map_gears = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.MapGears
|
toggle.map_gears = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.MapGears
|
||||||
|
@ -920,7 +924,7 @@ class FrogPilotVariables:
|
||||||
toggle.map_deceleration = toggle.map_gears and self.default_frogpilot_toggles.MapDeceleration
|
toggle.map_deceleration = toggle.map_gears and self.default_frogpilot_toggles.MapDeceleration
|
||||||
toggle.pause_lateral_below_signal = toggle.pause_lateral_below_speed != 0 and self.default_frogpilot_toggles.PauseLateralOnSignal
|
toggle.pause_lateral_below_signal = toggle.pause_lateral_below_speed != 0 and self.default_frogpilot_toggles.PauseLateralOnSignal
|
||||||
toggle.reverse_cruise_increase = toggle.quality_of_life_longitudinal and pcm_cruise and self.default_frogpilot_toggles.ReverseCruise
|
toggle.reverse_cruise_increase = toggle.quality_of_life_longitudinal and pcm_cruise and self.default_frogpilot_toggles.ReverseCruise
|
||||||
toggle.set_speed_offset = self.default_frogpilot_toggles.SetSpeedOffset * (1 if toggle.is_metric else CV.MPH_TO_KPH) if toggle.quality_of_life_longitudinal and not pcm_cruise else 0
|
toggle.set_speed_offset = float(self.default_frogpilot_toggles.SetSpeedOffset) * (1 if toggle.is_metric else CV.MPH_TO_KPH) if toggle.quality_of_life_longitudinal and not pcm_cruise else 0
|
||||||
|
|
||||||
toggle.camera_view = self.default_frogpilot_toggles.CameraView if toggle.quality_of_life_visuals else 0
|
toggle.camera_view = self.default_frogpilot_toggles.CameraView if toggle.quality_of_life_visuals else 0
|
||||||
toggle.driver_camera_in_reverse = toggle.quality_of_life_visuals and self.default_frogpilot_toggles.DriverCamera
|
toggle.driver_camera_in_reverse = toggle.quality_of_life_visuals and self.default_frogpilot_toggles.DriverCamera
|
||||||
|
@ -930,17 +934,17 @@ class FrogPilotVariables:
|
||||||
toggle.random_events = self.default_frogpilot_toggles.RandomEvents
|
toggle.random_events = self.default_frogpilot_toggles.RandomEvents
|
||||||
|
|
||||||
toggle.screen_management = self.default_frogpilot_toggles.ScreenManagement
|
toggle.screen_management = self.default_frogpilot_toggles.ScreenManagement
|
||||||
toggle.screen_brightness = self.default_frogpilot_toggles.ScreenBrightness if toggle.screen_management else 101
|
toggle.screen_brightness = float(self.default_frogpilot_toggles.ScreenBrightness) if toggle.screen_management else 101
|
||||||
toggle.screen_brightness_onroad = self.default_frogpilot_toggles.ScreenBrightnessOnroad if toggle.screen_management else 101
|
toggle.screen_brightness_onroad = float(self.default_frogpilot_toggles.ScreenBrightnessOnroad) if toggle.screen_management else 101
|
||||||
toggle.screen_recorder = toggle.screen_management and self.default_frogpilot_toggles.ScreenRecorder
|
toggle.screen_recorder = toggle.screen_management and self.default_frogpilot_toggles.ScreenRecorder
|
||||||
toggle.screen_timeout = self.default_frogpilot_toggles.ScreenTimeout if toggle.screen_management else 30
|
toggle.screen_timeout = float(self.default_frogpilot_toggles.ScreenTimeout) if toggle.screen_management else 30
|
||||||
toggle.screen_timeout_onroad = self.default_frogpilot_toggles.ScreenTimeoutOnroad if toggle.screen_management else 10
|
toggle.screen_timeout_onroad = float(self.default_frogpilot_toggles.ScreenTimeoutOnroad) if toggle.screen_management else 10
|
||||||
|
|
||||||
toggle.sng_hack = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.SNGHack
|
toggle.sng_hack = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.SNGHack
|
||||||
|
|
||||||
toggle.force_mph_dashboard = toggle.speed_limit_controller and self.default_frogpilot_toggles.ForceMPHDashboard
|
toggle.force_mph_dashboard = toggle.speed_limit_controller and self.default_frogpilot_toggles.ForceMPHDashboard
|
||||||
toggle.map_speed_lookahead_higher = self.default_frogpilot_toggles.SLCLookaheadHigher if toggle.speed_limit_controller else 0
|
toggle.map_speed_lookahead_higher = float(self.default_frogpilot_toggles.SLCLookaheadHigher) if toggle.speed_limit_controller else 0
|
||||||
toggle.map_speed_lookahead_lower = self.default_frogpilot_toggles.SLCLookaheadLower if toggle.speed_limit_controller else 0
|
toggle.map_speed_lookahead_lower = float(self.default_frogpilot_toggles.SLCLookaheadLower) if toggle.speed_limit_controller else 0
|
||||||
toggle.set_speed_limit = toggle.speed_limit_controller and self.default_frogpilot_toggles.SetSpeedLimit
|
toggle.set_speed_limit = toggle.speed_limit_controller and self.default_frogpilot_toggles.SetSpeedLimit
|
||||||
slc_fallback_method = self.default_frogpilot_toggles.SLCFallback if toggle.speed_limit_controller else 0
|
slc_fallback_method = self.default_frogpilot_toggles.SLCFallback if toggle.speed_limit_controller else 0
|
||||||
toggle.slc_fallback_experimental_mode = toggle.speed_limit_controller and slc_fallback_method == 1
|
toggle.slc_fallback_experimental_mode = toggle.speed_limit_controller and slc_fallback_method == 1
|
||||||
|
@ -1003,38 +1007,38 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.crosstrek_torque = car_model == "SUBARU_IMPREZA" and self.default_frogpilot_toggles.CrosstrekTorque
|
toggle.crosstrek_torque = car_model == "SUBARU_IMPREZA" and self.default_frogpilot_toggles.CrosstrekTorque
|
||||||
|
|
||||||
toggle.curve_sensitivity = self.default_frogpilot_toggles.CurveSensitivity / 100 if toggle.curve_speed_controller else 1
|
toggle.curve_sensitivity = float(self.default_frogpilot_toggles.CurveSensitivity) / 100 if toggle.curve_speed_controller else 1
|
||||||
toggle.turn_aggressiveness = self.default_frogpilot_toggles.TurnAggressiveness / 100 if toggle.curve_speed_controller else 1
|
toggle.turn_aggressiveness = float(self.default_frogpilot_toggles.TurnAggressiveness) / 100 if toggle.curve_speed_controller else 1
|
||||||
toggle.mtsc_curvature_check = toggle.map_turn_speed_controller and self.default_frogpilot_toggles.MTSCCurvatureCheck
|
toggle.mtsc_curvature_check = toggle.map_turn_speed_controller and self.default_frogpilot_toggles.MTSCCurvatureCheck
|
||||||
|
|
||||||
toggle.custom_personalities = openpilot_longitudinal and self.default_frogpilot_toggles.CustomPersonalities
|
toggle.custom_personalities = openpilot_longitudinal and self.default_frogpilot_toggles.CustomPersonalities
|
||||||
toggle.aggressive_profile = toggle.custom_personalities and self.default_frogpilot_toggles.AggressivePersonalityProfile
|
toggle.aggressive_profile = toggle.custom_personalities and self.default_frogpilot_toggles.AggressivePersonalityProfile
|
||||||
toggle.aggressive_jerk_deceleration = self.default_frogpilot_toggles.AggressiveJerkDeceleration / 100 if toggle.aggressive_profile else 0.5
|
toggle.aggressive_jerk_deceleration = float(self.default_frogpilot_toggles.AggressiveJerkDeceleration) / 100 if toggle.aggressive_profile else 0.5
|
||||||
toggle.aggressive_jerk_danger = self.default_frogpilot_toggles.AggressiveJerkDanger / 100 if toggle.aggressive_profile else 1.0
|
toggle.aggressive_jerk_danger = float(self.default_frogpilot_toggles.AggressiveJerkDanger) / 100 if toggle.aggressive_profile else 1.0
|
||||||
toggle.aggressive_jerk_speed = self.default_frogpilot_toggles.AggressiveJerkSpeed / 100 if toggle.aggressive_profile else 0.5
|
toggle.aggressive_jerk_speed = float(self.default_frogpilot_toggles.AggressiveJerkSpeed) / 100 if toggle.aggressive_profile else 0.5
|
||||||
toggle.aggressive_jerk_speed_decrease = self.default_frogpilot_toggles.AggressiveJerkSpeedDecrease / 100 if toggle.aggressive_profile else 0.5
|
toggle.aggressive_jerk_speed_decrease = float(self.default_frogpilot_toggles.AggressiveJerkSpeedDecrease) / 100 if toggle.aggressive_profile else 0.5
|
||||||
toggle.aggressive_follow = self.default_frogpilot_toggles.AggressiveFollow if toggle.aggressive_profile else 1.25
|
toggle.aggressive_follow = float(self.default_frogpilot_toggles.AggressiveFollow) if toggle.aggressive_profile else 1.25
|
||||||
toggle.standard_profile = toggle.custom_personalities and self.default_frogpilot_toggles.StandardPersonalityProfile
|
toggle.standard_profile = toggle.custom_personalities and self.default_frogpilot_toggles.StandardPersonalityProfile
|
||||||
toggle.standard_jerk_acceleration = self.default_frogpilot_toggles.StandardJerkAcceleration / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_acceleration = float(self.default_frogpilot_toggles.StandardJerkAcceleration) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_deceleration = self.default_frogpilot_toggles.StandardJerkDeceleration / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_deceleration = float(self.default_frogpilot_toggles.StandardJerkDeceleration) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_danger = self.default_frogpilot_toggles.StandardJerkDanger / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_danger = float(self.default_frogpilot_toggles.StandardJerkDanger) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_speed = self.default_frogpilot_toggles.StandardJerkSpeed / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_speed = float(self.default_frogpilot_toggles.StandardJerkSpeed) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_jerk_speed_decrease = self.default_frogpilot_toggles.StandardJerkSpeedDecrease / 100 if toggle.standard_profile else 1.0
|
toggle.standard_jerk_speed_decrease = float(self.default_frogpilot_toggles.StandardJerkSpeedDecrease) / 100 if toggle.standard_profile else 1.0
|
||||||
toggle.standard_follow = self.default_frogpilot_toggles.StandardFollow if toggle.standard_profile else 1.45
|
toggle.standard_follow = float(self.default_frogpilot_toggles.StandardFollow) if toggle.standard_profile else 1.45
|
||||||
toggle.relaxed_profile = toggle.custom_personalities and self.default_frogpilot_toggles.RelaxedPersonalityProfile
|
toggle.relaxed_profile = toggle.custom_personalities and self.default_frogpilot_toggles.RelaxedPersonalityProfile
|
||||||
toggle.relaxed_jerk_acceleration = self.default_frogpilot_toggles.RelaxedJerkAcceleration / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_acceleration = float(self.default_frogpilot_toggles.RelaxedJerkAcceleration) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_deceleration = self.default_frogpilot_toggles.RelaxedJerkDeceleration / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_deceleration = float(self.default_frogpilot_toggles.RelaxedJerkDeceleration) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_danger = self.default_frogpilot_toggles.RelaxedJerkDanger / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_danger = float(self.default_frogpilot_toggles.RelaxedJerkDanger) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_speed = self.default_frogpilot_toggles.RelaxedJerkSpeed / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_speed = float(self.default_frogpilot_toggles.RelaxedJerkSpeed) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_jerk_speed_decrease = self.default_frogpilot_toggles.RelaxedJerkSpeedDecrease / 100 if toggle.relaxed_profile else 1.0
|
toggle.relaxed_jerk_speed_decrease = float(self.default_frogpilot_toggles.RelaxedJerkSpeedDecrease) / 100 if toggle.relaxed_profile else 1.0
|
||||||
toggle.relaxed_follow = self.default_frogpilot_toggles.RelaxedFollow if toggle.relaxed_profile else 1.75
|
toggle.relaxed_follow = float(self.default_frogpilot_toggles.RelaxedFollow) if toggle.relaxed_profile else 1.75
|
||||||
toggle.traffic_profile = toggle.custom_personalities and self.default_frogpilot_toggles.TrafficPersonalityProfile
|
toggle.traffic_profile = toggle.custom_personalities and self.default_frogpilot_toggles.TrafficPersonalityProfile
|
||||||
toggle.traffic_mode_jerk_acceleration = [self.default_frogpilot_toggles.TrafficJerkAcceleration / 100, toggle.aggressive_jerk_acceleration] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_acceleration = [float(self.default_frogpilot_toggles.TrafficJerkAcceleration) / 100, toggle.aggressive_jerk_acceleration] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_jerk_deceleration = [self.default_frogpilot_toggles.TrafficJerkDeceleration / 100, toggle.aggressive_jerk_deceleration] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_deceleration = [float(self.default_frogpilot_toggles.TrafficJerkDeceleration) / 100, toggle.aggressive_jerk_deceleration] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_jerk_danger = [self.default_frogpilot_toggles.TrafficJerkDanger / 100, toggle.aggressive_jerk_danger] if toggle.traffic_profile else [1.0, 1.0]
|
toggle.traffic_mode_jerk_danger = [float(self.default_frogpilot_toggles.TrafficJerkDanger) / 100, toggle.aggressive_jerk_danger] if toggle.traffic_profile else [1.0, 1.0]
|
||||||
toggle.traffic_mode_jerk_speed = [self.default_frogpilot_toggles.TrafficJerkSpeed / 100, toggle.aggressive_jerk_speed] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_speed = [float(self.default_frogpilot_toggles.TrafficJerkSpeed) / 100, toggle.aggressive_jerk_speed] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_jerk_speed_decrease = [self.default_frogpilot_toggles.TrafficJerkSpeedDecrease / 100, toggle.aggressive_jerk_speed_decrease] if toggle.traffic_profile else [0.5, 0.5]
|
toggle.traffic_mode_jerk_speed_decrease = [float(self.default_frogpilot_toggles.TrafficJerkSpeedDecrease) / 100, toggle.aggressive_jerk_speed_decrease] if toggle.traffic_profile else [0.5, 0.5]
|
||||||
toggle.traffic_mode_t_follow = [self.default_frogpilot_toggles.TrafficFollow, toggle.aggressive_follow] if toggle.traffic_profile else [0.5, 1.0]
|
toggle.traffic_mode_t_follow = [float(self.default_frogpilot_toggles.TrafficFollow), toggle.aggressive_follow] if toggle.traffic_profile else [0.5, 1.0]
|
||||||
|
|
||||||
toggle.adjacent_paths = toggle.custom_ui and self.default_frogpilot_toggles.AdjacentPath
|
toggle.adjacent_paths = toggle.custom_ui and self.default_frogpilot_toggles.AdjacentPath
|
||||||
|
|
||||||
|
@ -1064,7 +1068,7 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.device_management = self.default_frogpilot_toggles.DeviceManagement
|
toggle.device_management = self.default_frogpilot_toggles.DeviceManagement
|
||||||
toggle.increase_thermal_limits = toggle.device_management and self.default_frogpilot_toggles.IncreaseThermalLimits
|
toggle.increase_thermal_limits = toggle.device_management and self.default_frogpilot_toggles.IncreaseThermalLimits
|
||||||
toggle.low_voltage_shutdown = clip(self.default_frogpilot_toggles.LowVoltageShutdown, VBATT_PAUSE_CHARGING, 12.5) if toggle.device_management else VBATT_PAUSE_CHARGING
|
toggle.low_voltage_shutdown = clip(float(self.default_frogpilot_toggles.LowVoltageShutdown), VBATT_PAUSE_CHARGING, 12.5) if toggle.device_management else VBATT_PAUSE_CHARGING
|
||||||
toggle.no_logging = toggle.device_management and self.default_frogpilot_toggles.NoLogging
|
toggle.no_logging = toggle.device_management and self.default_frogpilot_toggles.NoLogging
|
||||||
toggle.no_uploads = toggle.device_management and self.default_frogpilot_toggles.NoUploads
|
toggle.no_uploads = toggle.device_management and self.default_frogpilot_toggles.NoUploads
|
||||||
toggle.offline_mode = toggle.device_management and self.default_frogpilot_toggles.OfflineMode
|
toggle.offline_mode = toggle.device_management and self.default_frogpilot_toggles.OfflineMode
|
||||||
|
@ -1073,19 +1077,19 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.frogsgomoo_tweak = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.FrogsGoMoosTweak
|
toggle.frogsgomoo_tweak = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.FrogsGoMoosTweak
|
||||||
|
|
||||||
toggle.lane_detection_width = self.default_frogpilot_toggles.LaneDetectionWidth * distance_conversion if toggle.lane_change_customizations else 0
|
toggle.lane_detection_width = float(self.default_frogpilot_toggles.LaneDetectionWidth) * distance_conversion if toggle.lane_change_customizations else 0
|
||||||
toggle.lane_detection = toggle.lane_detection_width != 0
|
toggle.lane_detection = toggle.lane_detection_width != 0
|
||||||
toggle.minimum_lane_change_speed = self.default_frogpilot_toggles.MinimumLaneChangeSpeed * speed_conversion if toggle.lane_change_customizations else LANE_CHANGE_SPEED_MIN
|
toggle.minimum_lane_change_speed = float(self.default_frogpilot_toggles.MinimumLaneChangeSpeed) * speed_conversion if toggle.lane_change_customizations else LANE_CHANGE_SPEED_MIN
|
||||||
|
|
||||||
toggle.lateral_tuning = self.default_frogpilot_toggles.LateralTune
|
toggle.lateral_tuning = self.default_frogpilot_toggles.LateralTune
|
||||||
toggle.smooth_curve_handling = toggle.lateral_tuning and self.default_frogpilot_toggles.NNFFLite
|
toggle.nnff_lite = toggle.lateral_tuning and self.default_frogpilot_toggles.NNFFLite
|
||||||
toggle.taco_tune = toggle.lateral_tuning and self.default_frogpilot_toggles.TacoTune
|
toggle.taco_tune = toggle.lateral_tuning and self.default_frogpilot_toggles.TacoTune
|
||||||
toggle.use_turn_desires = toggle.lateral_tuning and self.default_frogpilot_toggles.TurnDesires
|
toggle.use_turn_desires = toggle.lateral_tuning and self.default_frogpilot_toggles.TurnDesires
|
||||||
|
|
||||||
toggle.long_pitch = openpilot_longitudinal and car_make == "gm" and self.default_frogpilot_toggles.LongPitch
|
toggle.long_pitch = openpilot_longitudinal and car_make == "gm" and self.default_frogpilot_toggles.LongPitch
|
||||||
|
|
||||||
toggle.lead_detection_probability = clip(self.default_frogpilot_toggles.LeadDetectionThreshold / 100, 0.01, 0.99) if toggle.longitudinal_tuning else 0.5
|
toggle.lead_detection_probability = clip(float(self.default_frogpilot_toggles.LeadDetectionThreshold) / 100, 0.01, 0.99) if toggle.longitudinal_tuning else 0.5
|
||||||
toggle.max_desired_acceleration = clip(self.default_frogpilot_toggles.MaxDesiredAcceleration, 0.1, 4.0) if toggle.longitudinal_tuning else 4.0
|
toggle.max_desired_acceleration = clip(float(self.default_frogpilot_toggles.MaxDesiredAcceleration), 0.1, 4.0) if toggle.longitudinal_tuning else 4.0
|
||||||
|
|
||||||
toggle.model = DEFAULT_MODEL
|
toggle.model = DEFAULT_MODEL
|
||||||
toggle.part_model_param = ""
|
toggle.part_model_param = ""
|
||||||
|
@ -1095,10 +1099,10 @@ class FrogPilotVariables:
|
||||||
|
|
||||||
toggle.model_ui = self.default_frogpilot_toggles.ModelUI
|
toggle.model_ui = self.default_frogpilot_toggles.ModelUI
|
||||||
toggle.dynamic_path_width = toggle.model_ui and self.default_frogpilot_toggles.DynamicPathWidth
|
toggle.dynamic_path_width = toggle.model_ui and self.default_frogpilot_toggles.DynamicPathWidth
|
||||||
toggle.lane_line_width = self.default_frogpilot_toggles.LaneLinesWidth * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
toggle.lane_line_width = float(self.default_frogpilot_toggles.LaneLinesWidth) * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
||||||
toggle.path_edge_width = self.default_frogpilot_toggles.PathEdgeWidth if toggle.model_ui else 20
|
toggle.path_edge_width = float(self.default_frogpilot_toggles.PathEdgeWidth) if toggle.model_ui else 20
|
||||||
toggle.path_width = self.default_frogpilot_toggles.PathWidth * distance_conversion / 2 if toggle.model_ui else 0.9
|
toggle.path_width = float(self.default_frogpilot_toggles.PathWidth) * distance_conversion / 2 if toggle.model_ui else 0.9
|
||||||
toggle.road_edge_width = self.default_frogpilot_toggles.RoadEdgesWidth * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
toggle.road_edge_width = float(self.default_frogpilot_toggles.RoadEdgesWidth) * small_distance_conversion / 200 if toggle.model_ui else 0.025
|
||||||
toggle.show_stopping_point = toggle.model_ui and self.default_frogpilot_toggles.ShowStoppingPoint
|
toggle.show_stopping_point = toggle.model_ui and self.default_frogpilot_toggles.ShowStoppingPoint
|
||||||
toggle.show_stopping_point_metrics = toggle.show_stopping_point and self.default_frogpilot_toggles.ShowStoppingPointMetrics
|
toggle.show_stopping_point_metrics = toggle.show_stopping_point and self.default_frogpilot_toggles.ShowStoppingPointMetrics
|
||||||
toggle.unlimited_road_ui_length = toggle.model_ui and self.default_frogpilot_toggles.UnlimitedLength
|
toggle.unlimited_road_ui_length = toggle.model_ui and self.default_frogpilot_toggles.UnlimitedLength
|
||||||
|
@ -1108,38 +1112,38 @@ class FrogPilotVariables:
|
||||||
toggle.show_speed_limit_offset = toggle.navigation_ui and self.default_frogpilot_toggles.ShowSLCOffset
|
toggle.show_speed_limit_offset = toggle.navigation_ui and self.default_frogpilot_toggles.ShowSLCOffset
|
||||||
toggle.speed_limit_vienna = toggle.navigation_ui and self.default_frogpilot_toggles.UseVienna
|
toggle.speed_limit_vienna = toggle.navigation_ui and self.default_frogpilot_toggles.UseVienna
|
||||||
|
|
||||||
toggle.new_long_api_gm = openpilot_longitudinal and car_make == "gm" and self.default_frogpilot_toggles.NewLongAPIGM
|
toggle.old_long_api = openpilot_longitudinal and car_make == "gm" and not self.default_frogpilot_toggles.NewLongAPIGM
|
||||||
toggle.new_long_api_hkg = openpilot_longitudinal and car_make == "hyundai" and self.default_frogpilot_toggles.NewLongAPI
|
toggle.old_long_api |= openpilot_longitudinal and car_make == "hyundai" and not self.default_frogpilot_toggles.NewLongAPI
|
||||||
|
|
||||||
toggle.new_toyota_tune = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.NewToyotaTune
|
toggle.new_toyota_tune = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.NewToyotaTune
|
||||||
|
|
||||||
toggle.quality_of_life_lateral = self.default_frogpilot_toggles.QOLLateral
|
toggle.quality_of_life_lateral = self.default_frogpilot_toggles.QOLLateral
|
||||||
toggle.pause_lateral_below_speed = self.default_frogpilot_toggles.PauseLateralSpeed * speed_conversion if toggle.quality_of_life_lateral else 0
|
toggle.pause_lateral_below_speed = float(self.default_frogpilot_toggles.PauseLateralSpeed) * speed_conversion if toggle.quality_of_life_lateral else 0
|
||||||
|
|
||||||
toggle.custom_cruise_increase = self.default_frogpilot_toggles.CustomCruise if toggle.quality_of_life_longitudinal and not pcm_cruise else 1
|
toggle.custom_cruise_increase = float(self.default_frogpilot_toggles.CustomCruise) if toggle.quality_of_life_longitudinal and not pcm_cruise else 1
|
||||||
toggle.custom_cruise_increase_long = self.default_frogpilot_toggles.CustomCruiseLong if toggle.quality_of_life_longitudinal and not pcm_cruise else 5
|
toggle.custom_cruise_increase_long = float(self.default_frogpilot_toggles.CustomCruiseLong) if toggle.quality_of_life_longitudinal and not pcm_cruise else 5
|
||||||
toggle.force_standstill = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStandstill
|
toggle.force_standstill = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStandstill
|
||||||
toggle.force_stops = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStops
|
toggle.force_stops = toggle.quality_of_life_longitudinal and self.default_frogpilot_toggles.ForceStops
|
||||||
toggle.pause_lateral_below_signal = toggle.pause_lateral_below_speed != 0 and self.default_frogpilot_toggles.PauseLateralOnSignal
|
toggle.pause_lateral_below_signal = toggle.pause_lateral_below_speed != 0 and self.default_frogpilot_toggles.PauseLateralOnSignal
|
||||||
toggle.reverse_cruise_increase = toggle.quality_of_life_longitudinal and pcm_cruise and self.default_frogpilot_toggles.ReverseCruise
|
toggle.reverse_cruise_increase = toggle.quality_of_life_longitudinal and pcm_cruise and self.default_frogpilot_toggles.ReverseCruise
|
||||||
toggle.set_speed_offset = self.default_frogpilot_toggles.SetSpeedOffset * (1 if toggle.is_metric else CV.MPH_TO_KPH) if toggle.quality_of_life_longitudinal and not pcm_cruise else 0
|
toggle.set_speed_offset = float(self.default_frogpilot_toggles.SetSpeedOffset) * (1 if toggle.is_metric else CV.MPH_TO_KPH) if toggle.quality_of_life_longitudinal and not pcm_cruise else 0
|
||||||
|
|
||||||
toggle.quality_of_life_visuals = self.default_frogpilot_toggles.QOLVisuals
|
toggle.quality_of_life_visuals = self.default_frogpilot_toggles.QOLVisuals
|
||||||
toggle.camera_view = self.default_frogpilot_toggles.CameraView if toggle.quality_of_life_visuals else 0
|
toggle.camera_view = self.default_frogpilot_toggles.CameraView if toggle.quality_of_life_visuals else 0
|
||||||
toggle.standby_mode = toggle.quality_of_life_visuals and self.default_frogpilot_toggles.StandbyMode
|
toggle.standby_mode = toggle.quality_of_life_visuals and self.default_frogpilot_toggles.StandbyMode
|
||||||
|
|
||||||
toggle.screen_management = self.default_frogpilot_toggles.ScreenManagement
|
toggle.screen_management = self.default_frogpilot_toggles.ScreenManagement
|
||||||
toggle.screen_brightness = self.default_frogpilot_toggles.ScreenBrightness if toggle.screen_management else 101
|
toggle.screen_brightness = float(self.default_frogpilot_toggles.ScreenBrightness) if toggle.screen_management else 101
|
||||||
toggle.screen_brightness_onroad = self.default_frogpilot_toggles.ScreenBrightnessOnroad if toggle.screen_management else 101
|
toggle.screen_brightness_onroad = float(self.default_frogpilot_toggles.ScreenBrightnessOnroad) if toggle.screen_management else 101
|
||||||
toggle.screen_recorder = toggle.screen_management and self.default_frogpilot_toggles.ScreenRecorder
|
toggle.screen_recorder = toggle.screen_management and self.default_frogpilot_toggles.ScreenRecorder
|
||||||
toggle.screen_timeout = self.default_frogpilot_toggles.ScreenTimeout if toggle.screen_management else 30
|
toggle.screen_timeout = float(self.default_frogpilot_toggles.ScreenTimeout) if toggle.screen_management else 30
|
||||||
toggle.screen_timeout_onroad = self.default_frogpilot_toggles.ScreenTimeoutOnroad if toggle.screen_management else 10
|
toggle.screen_timeout_onroad = float(self.default_frogpilot_toggles.ScreenTimeoutOnroad) if toggle.screen_management else 10
|
||||||
|
|
||||||
toggle.sng_hack = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.SNGHack
|
toggle.sng_hack = openpilot_longitudinal and car_make == "toyota" and self.default_frogpilot_toggles.SNGHack
|
||||||
|
|
||||||
toggle.force_mph_dashboard = toggle.speed_limit_controller and self.default_frogpilot_toggles.ForceMPHDashboard
|
toggle.force_mph_dashboard = toggle.speed_limit_controller and self.default_frogpilot_toggles.ForceMPHDashboard
|
||||||
toggle.map_speed_lookahead_higher = self.default_frogpilot_toggles.SLCLookaheadHigher if toggle.speed_limit_controller else 0
|
toggle.map_speed_lookahead_higher = float(self.default_frogpilot_toggles.SLCLookaheadHigher) if toggle.speed_limit_controller else 0
|
||||||
toggle.map_speed_lookahead_lower = self.default_frogpilot_toggles.SLCLookaheadLower if toggle.speed_limit_controller else 0
|
toggle.map_speed_lookahead_lower = float(self.default_frogpilot_toggles.SLCLookaheadLower) if toggle.speed_limit_controller else 0
|
||||||
toggle.set_speed_limit = toggle.speed_limit_controller and self.default_frogpilot_toggles.SetSpeedLimit
|
toggle.set_speed_limit = toggle.speed_limit_controller and self.default_frogpilot_toggles.SetSpeedLimit
|
||||||
toggle.speed_limit_priority1 = self.default_frogpilot_toggles.SLCPriority1 if toggle.speed_limit_controller else None
|
toggle.speed_limit_priority1 = self.default_frogpilot_toggles.SLCPriority1 if toggle.speed_limit_controller else None
|
||||||
toggle.speed_limit_priority2 = self.default_frogpilot_toggles.SLCPriority2 if toggle.speed_limit_controller else None
|
toggle.speed_limit_priority2 = self.default_frogpilot_toggles.SLCPriority2 if toggle.speed_limit_controller else None
|
||||||
|
|
|
@ -225,7 +225,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr
|
||||||
QString selectedIconPack = formatIconNameForStorage(iconPackToDelete);
|
QString selectedIconPack = formatIconNameForStorage(iconPackToDelete);
|
||||||
for (const QFileInfo &dirInfo : dirList) {
|
for (const QFileInfo &dirInfo : dirList) {
|
||||||
if (dirInfo.fileName() == selectedIconPack) {
|
if (dirInfo.fileName() == selectedIconPack) {
|
||||||
QDir iconPackDir(dirInfo.absoluteFilePath() + "/distance_icons");
|
QDir iconPackDir(dirInfo.absoluteFilePath());
|
||||||
if (iconPackDir.exists()) {
|
if (iconPackDir.exists()) {
|
||||||
iconPackDir.removeRecursively();
|
iconPackDir.removeRecursively();
|
||||||
}
|
}
|
||||||
|
@ -892,6 +892,8 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr
|
||||||
|
|
||||||
QObject::connect(parent, &FrogPilotSettingsWindow::closeParentToggle, this, &FrogPilotThemesPanel::hideToggles);
|
QObject::connect(parent, &FrogPilotSettingsWindow::closeParentToggle, this, &FrogPilotThemesPanel::hideToggles);
|
||||||
QObject::connect(uiState(), &UIState::uiUpdate, this, &FrogPilotThemesPanel::updateState);
|
QObject::connect(uiState(), &UIState::uiUpdate, this, &FrogPilotThemesPanel::updateState);
|
||||||
|
|
||||||
|
hideToggles();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrogPilotThemesPanel::showEvent(QShowEvent *event) {
|
void FrogPilotThemesPanel::showEvent(QShowEvent *event) {
|
||||||
|
@ -932,6 +934,7 @@ void FrogPilotThemesPanel::updateState(const UIState &s) {
|
||||||
});
|
});
|
||||||
paramsMemory.remove("ThemeDownloadProgress");
|
paramsMemory.remove("ThemeDownloadProgress");
|
||||||
colorDownloading = false;
|
colorDownloading = false;
|
||||||
|
distanceIconDownloading = false;
|
||||||
iconDownloading = false;
|
iconDownloading = false;
|
||||||
signalDownloading = false;
|
signalDownloading = false;
|
||||||
soundDownloading = false;
|
soundDownloading = false;
|
||||||
|
@ -939,6 +942,7 @@ void FrogPilotThemesPanel::updateState(const UIState &s) {
|
||||||
wheelDownloading = false;
|
wheelDownloading = false;
|
||||||
|
|
||||||
colorsDownloaded = params.get("DownloadableColors").empty();
|
colorsDownloaded = params.get("DownloadableColors").empty();
|
||||||
|
distanceIconsDownloaded = params.get("DownloadableDistanceIcons").empty();
|
||||||
iconsDownloaded = params.get("DownloadableIcons").empty();
|
iconsDownloaded = params.get("DownloadableIcons").empty();
|
||||||
signalsDownloaded = params.get("DownloadableSignals").empty();
|
signalsDownloaded = params.get("DownloadableSignals").empty();
|
||||||
soundsDownloaded = params.get("DownloadableSounds").empty();
|
soundsDownloaded = params.get("DownloadableSounds").empty();
|
||||||
|
|
|
@ -43,17 +43,17 @@ QColor loadThemeColors(const QString &colorKey, bool clearCache) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FrogPilotConfirmationDialog::toggle(const QString &prompt_text, const QString &confirm_text, QWidget *parent) {
|
bool FrogPilotConfirmationDialog::toggle(const QString &prompt_text, const QString &confirm_text, QWidget *parent, const bool isLong) {
|
||||||
ConfirmationDialog d(prompt_text, confirm_text, tr("Reboot Later"), false, parent);
|
ConfirmationDialog d(prompt_text, confirm_text, tr("Reboot Later"), false, parent, isLong);
|
||||||
return d.exec();
|
return d.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FrogPilotConfirmationDialog::toggleAlert(const QString &prompt_text, const QString &button_text, QWidget *parent) {
|
bool FrogPilotConfirmationDialog::toggleAlert(const QString &prompt_text, const QString &button_text, QWidget *parent, const bool isLong) {
|
||||||
ConfirmationDialog d(prompt_text, button_text, "", false, parent);
|
ConfirmationDialog d(prompt_text, button_text, "", false, parent, isLong);
|
||||||
return d.exec();
|
return d.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FrogPilotConfirmationDialog::yesorno(const QString &prompt_text, QWidget *parent) {
|
bool FrogPilotConfirmationDialog::yesorno(const QString &prompt_text, QWidget *parent, const bool isLong) {
|
||||||
ConfirmationDialog d(prompt_text, tr("Yes"), tr("No"), false, parent);
|
ConfirmationDialog d(prompt_text, tr("Yes"), tr("No"), false, parent, isLong);
|
||||||
return d.exec();
|
return d.exec();
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,9 @@ class FrogPilotConfirmationDialog : public ConfirmationDialog {
|
||||||
public:
|
public:
|
||||||
explicit FrogPilotConfirmationDialog(const QString &prompt_text, const QString &confirm_text,
|
explicit FrogPilotConfirmationDialog(const QString &prompt_text, const QString &confirm_text,
|
||||||
const QString &cancel_text, const bool rich, QWidget *parent);
|
const QString &cancel_text, const bool rich, QWidget *parent);
|
||||||
static bool toggle(const QString &prompt_text, const QString &confirm_text, QWidget *parent);
|
static bool toggle(const QString &prompt_text, const QString &confirm_text, QWidget *parent, const bool isLong=false);
|
||||||
static bool toggleAlert(const QString &prompt_text, const QString &button_text, QWidget *parent);
|
static bool toggleAlert(const QString &prompt_text, const QString &button_text, QWidget *parent, const bool isLong=false);
|
||||||
static bool yesorno(const QString &prompt_text, QWidget *parent);
|
static bool yesorno(const QString &prompt_text, QWidget *parent, const bool isLong=false);
|
||||||
};
|
};
|
||||||
|
|
||||||
class FrogPilotListWidget : public QWidget {
|
class FrogPilotListWidget : public QWidget {
|
||||||
|
|
|
@ -501,29 +501,29 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
|
||||||
int openpilotHours = params.getInt("openpilotMinutes") / 60;
|
int openpilotHours = params.getInt("openpilotMinutes") / 60;
|
||||||
|
|
||||||
if (frogpilotHours < 1 && openpilotHours < 100) {
|
if (frogpilotHours < 1 && openpilotHours < 100) {
|
||||||
if (FrogPilotConfirmationDialog::toggleAlert(tr("Welcome to FrogPilot! Since you're new to FrogPilot, the 'Basic' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this)) {
|
if (FrogPilotConfirmationDialog::toggleAlert(tr("Welcome to FrogPilot! Since you're new to FrogPilot, the 'Basic' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this, true)) {
|
||||||
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
||||||
params.putIntNonBlocking("CustomizationLevel", 0);
|
params.putIntNonBlocking("CustomizationLevel", 0);
|
||||||
}
|
}
|
||||||
} else if (frogpilotHours < 50 && openpilotHours < 100) {
|
} else if (frogpilotHours < 50 && openpilotHours < 100) {
|
||||||
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're fairly new to FrogPilot, the 'Basic' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this)) {
|
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're fairly new to FrogPilot, the 'Basic' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this, true)) {
|
||||||
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
||||||
params.putIntNonBlocking("CustomizationLevel", 0);
|
params.putIntNonBlocking("CustomizationLevel", 0);
|
||||||
}
|
}
|
||||||
} else if (frogpilotHours < 100) {
|
} else if (frogpilotHours < 100) {
|
||||||
if (openpilotHours >= 100 && frogpilotHours < 100) {
|
if (openpilotHours >= 100 && frogpilotHours < 100) {
|
||||||
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're experienced with openpilot, the 'Standard' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this)) {
|
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're experienced with openpilot, the 'Standard' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this, true)) {
|
||||||
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
||||||
params.putIntNonBlocking("CustomizationLevel", 1);
|
params.putIntNonBlocking("CustomizationLevel", 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're experienced with FrogPilot, the 'Standard' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this)) {
|
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're experienced with FrogPilot, the 'Standard' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this, true)) {
|
||||||
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
||||||
params.putIntNonBlocking("CustomizationLevel", 1);
|
params.putIntNonBlocking("CustomizationLevel", 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (frogpilotHours >= 100) {
|
} else if (frogpilotHours >= 100) {
|
||||||
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're very experienced with FrogPilot, the 'Advanced' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this)) {
|
if (FrogPilotConfirmationDialog::toggleAlert(tr("Since you're very experienced with FrogPilot, the 'Advanced' toggle preset has been applied, but you can change this at any time via the 'Customization Level' button!"), tr("Sounds good!"), this, true)) {
|
||||||
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
params.putBoolNonBlocking("CustomizationLevelConfirmed", true);
|
||||||
params.putIntNonBlocking("CustomizationLevel", 2);
|
params.putIntNonBlocking("CustomizationLevel", 2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) {
|
||||||
auto uninstallBtn = new ButtonControl(tr("Uninstall %1").arg(getBrand()), tr("UNINSTALL"));
|
auto uninstallBtn = new ButtonControl(tr("Uninstall %1").arg(getBrand()), tr("UNINSTALL"));
|
||||||
connect(uninstallBtn, &ButtonControl::clicked, [&]() {
|
connect(uninstallBtn, &ButtonControl::clicked, [&]() {
|
||||||
if (ConfirmationDialog::confirm(tr("Are you sure you want to uninstall?"), tr("Uninstall"), this)) {
|
if (ConfirmationDialog::confirm(tr("Are you sure you want to uninstall?"), tr("Uninstall"), this)) {
|
||||||
if (FrogPilotConfirmationDialog::yesorno(tr("Do you want to permanently delete any additional FrogPilot assets? This is 100% unrecoverable and includes backups, downloaded models, themes, and long-term storage toggle settings for easy reinstalls."), this)) {
|
if (FrogPilotConfirmationDialog::yesorno(tr("Do you want to permanently delete any additional FrogPilot assets? This is 100% unrecoverable and includes backups, models, and long-term storage toggle settings for easy reinstalls."), this, true)) {
|
||||||
std::system("rm -rf /data/backups");
|
std::system("rm -rf /data/backups");
|
||||||
std::system("rm -rf /data/crashes");
|
std::system("rm -rf /data/crashes");
|
||||||
std::system("rm -rf /data/media/screen_recordings");
|
std::system("rm -rf /data/media/screen_recordings");
|
||||||
|
|
|
@ -206,7 +206,7 @@ void InputDialog::updateMaxLengthSublabel(const QString &text) {
|
||||||
// ConfirmationDialog
|
// ConfirmationDialog
|
||||||
|
|
||||||
ConfirmationDialog::ConfirmationDialog(const QString &prompt_text, const QString &confirm_text, const QString &cancel_text,
|
ConfirmationDialog::ConfirmationDialog(const QString &prompt_text, const QString &confirm_text, const QString &cancel_text,
|
||||||
const bool rich, QWidget *parent) : DialogBase(parent) {
|
const bool rich, QWidget *parent, const bool isLong) : DialogBase(parent) {
|
||||||
QFrame *container = new QFrame(this);
|
QFrame *container = new QFrame(this);
|
||||||
container->setStyleSheet(R"(
|
container->setStyleSheet(R"(
|
||||||
QFrame { background-color: #1B1B1B; color: #C9C9C9; }
|
QFrame { background-color: #1B1B1B; color: #C9C9C9; }
|
||||||
|
@ -214,7 +214,7 @@ ConfirmationDialog::ConfirmationDialog(const QString &prompt_text, const QString
|
||||||
#confirm_btn:pressed { background-color: #3049F4; }
|
#confirm_btn:pressed { background-color: #3049F4; }
|
||||||
)");
|
)");
|
||||||
QVBoxLayout *main_layout = new QVBoxLayout(container);
|
QVBoxLayout *main_layout = new QVBoxLayout(container);
|
||||||
main_layout->setContentsMargins(32, 32, 32, 32);
|
main_layout->setContentsMargins(32, rich || isLong ? 32 : 120, 32, 32);
|
||||||
|
|
||||||
QLabel *prompt = new QLabel(prompt_text, this);
|
QLabel *prompt = new QLabel(prompt_text, this);
|
||||||
prompt->setWordWrap(true);
|
prompt->setWordWrap(true);
|
||||||
|
|
|
@ -65,7 +65,7 @@ class ConfirmationDialog : public DialogBase {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ConfirmationDialog(const QString &prompt_text, const QString &confirm_text,
|
explicit ConfirmationDialog(const QString &prompt_text, const QString &confirm_text,
|
||||||
const QString &cancel_text, const bool rich, QWidget* parent);
|
const QString &cancel_text, const bool rich, QWidget* parent, const bool isLong=false);
|
||||||
static bool alert(const QString &prompt_text, QWidget *parent);
|
static bool alert(const QString &prompt_text, QWidget *parent);
|
||||||
static bool confirm(const QString &prompt_text, const QString &confirm_text, QWidget *parent);
|
static bool confirm(const QString &prompt_text, const QString &confirm_text, QWidget *parent);
|
||||||
static bool rich(const QString &prompt_text, QWidget *parent);
|
static bool rich(const QString &prompt_text, QWidget *parent);
|
||||||
|
|
|
@ -6,6 +6,8 @@ import sys
|
||||||
import threading
|
import threading
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from cereal import log
|
from cereal import log
|
||||||
import cereal.messaging as messaging
|
import cereal.messaging as messaging
|
||||||
import openpilot.system.sentry as sentry
|
import openpilot.system.sentry as sentry
|
||||||
|
@ -22,9 +24,8 @@ from openpilot.system.athena.registration import register, UNREGISTERED_DONGLE_I
|
||||||
from openpilot.common.swaglog import cloudlog, add_file_handler
|
from openpilot.common.swaglog import cloudlog, add_file_handler
|
||||||
from openpilot.system.version import get_build_metadata, terms_version, training_version
|
from openpilot.system.version import get_build_metadata, terms_version, training_version
|
||||||
|
|
||||||
from openpilot.selfdrive.frogpilot.assets.model_manager import DEFAULT_MODEL, DEFAULT_MODEL_NAME
|
|
||||||
from openpilot.selfdrive.frogpilot.frogpilot_functions import convert_params, frogpilot_boot_functions, setup_frogpilot, uninstall_frogpilot
|
from openpilot.selfdrive.frogpilot.frogpilot_functions import convert_params, frogpilot_boot_functions, setup_frogpilot, uninstall_frogpilot
|
||||||
from openpilot.selfdrive.frogpilot.frogpilot_variables import frogpilot_default_params, get_frogpilot_toggles
|
from openpilot.selfdrive.frogpilot.frogpilot_variables import FrogPilotVariables, frogpilot_default_params, get_frogpilot_toggles
|
||||||
|
|
||||||
|
|
||||||
def manager_init() -> None:
|
def manager_init() -> None:
|
||||||
|
@ -169,17 +170,14 @@ def manager_thread() -> None:
|
||||||
pm = messaging.PubMaster(['managerState'])
|
pm = messaging.PubMaster(['managerState'])
|
||||||
|
|
||||||
write_onroad_params(False, params)
|
write_onroad_params(False, params)
|
||||||
ensure_running(managed_processes.values(), False, params=params, CP=sm['carParams'], not_run=ignore, classic_model=False)
|
ensure_running(managed_processes.values(), False, params=params, CP=sm['carParams'], not_run=ignore, classic_model=False, frogpilot_toggles=SimpleNamespace())
|
||||||
|
|
||||||
started_prev = False
|
started_prev = False
|
||||||
|
|
||||||
# FrogPilot variables
|
# FrogPilot variables
|
||||||
|
FrogPilotVariables().update(False)
|
||||||
frogpilot_toggles = get_frogpilot_toggles(True)
|
frogpilot_toggles = get_frogpilot_toggles(True)
|
||||||
classic_model = getattr(frogpilot_toggles, 'classic_model', False)
|
classic_model = frogpilot_toggles.classic_model
|
||||||
|
|
||||||
error_log = os.path.join(sentry.CRASHES_DIR, 'error.txt')
|
|
||||||
if os.path.isfile(error_log):
|
|
||||||
os.remove(error_log)
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
sm.update(1000)
|
sm.update(1000)
|
||||||
|
@ -189,9 +187,6 @@ def manager_thread() -> None:
|
||||||
if started and not started_prev:
|
if started and not started_prev:
|
||||||
params.clear_all(ParamKeyType.CLEAR_ON_ONROAD_TRANSITION)
|
params.clear_all(ParamKeyType.CLEAR_ON_ONROAD_TRANSITION)
|
||||||
|
|
||||||
if os.path.isfile(error_log):
|
|
||||||
os.remove(error_log)
|
|
||||||
|
|
||||||
# FrogPilot variables
|
# FrogPilot variables
|
||||||
classic_model = frogpilot_toggles.classic_model
|
classic_model = frogpilot_toggles.classic_model
|
||||||
|
|
||||||
|
@ -205,7 +200,7 @@ def manager_thread() -> None:
|
||||||
|
|
||||||
started_prev = started
|
started_prev = started
|
||||||
|
|
||||||
ensure_running(managed_processes.values(), started, params=params, CP=sm['carParams'], not_run=ignore, classic_model=classic_model)
|
ensure_running(managed_processes.values(), started, params=params, CP=sm['carParams'], not_run=ignore, classic_model=classic_model, frogpilot_toggles=frogpilot_toggles)
|
||||||
|
|
||||||
running = ' '.join("{}{}\u001b[0m".format("\u001b[32m" if p.proc.is_alive() else "\u001b[31m", p.name)
|
running = ' '.join("{}{}\u001b[0m".format("\u001b[32m" if p.proc.is_alive() else "\u001b[31m", p.name)
|
||||||
for p in managed_processes.values() if p.proc)
|
for p in managed_processes.values() if p.proc)
|
||||||
|
|
|
@ -9,6 +9,7 @@ from abc import ABC, abstractmethod
|
||||||
from multiprocessing import Process
|
from multiprocessing import Process
|
||||||
|
|
||||||
from setproctitle import setproctitle
|
from setproctitle import setproctitle
|
||||||
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from cereal import car, log
|
from cereal import car, log
|
||||||
import cereal.messaging as messaging
|
import cereal.messaging as messaging
|
||||||
|
@ -245,7 +246,7 @@ class DaemonProcess(ManagerProcess):
|
||||||
self.params = None
|
self.params = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def should_run(started, params, CP, classic_model):
|
def should_run(started, params, CP, classic_model, frogpilot_toggles):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def prepare(self) -> None:
|
def prepare(self) -> None:
|
||||||
|
@ -281,13 +282,13 @@ class DaemonProcess(ManagerProcess):
|
||||||
|
|
||||||
|
|
||||||
def ensure_running(procs: ValuesView[ManagerProcess], started: bool, params=None, CP: car.CarParams=None,
|
def ensure_running(procs: ValuesView[ManagerProcess], started: bool, params=None, CP: car.CarParams=None,
|
||||||
not_run: list[str] | None=None, classic_model=False) -> list[ManagerProcess]:
|
not_run: list[str] | None=None, classic_model=False, frogpilot_toggles=SimpleNamespace()) -> list[ManagerProcess]:
|
||||||
if not_run is None:
|
if not_run is None:
|
||||||
not_run = []
|
not_run = []
|
||||||
|
|
||||||
running = []
|
running = []
|
||||||
for p in procs:
|
for p in procs:
|
||||||
if p.enabled and p.name not in not_run and p.should_run(started, params, CP, classic_model):
|
if p.enabled and p.name not in not_run and p.should_run(started, params, CP, classic_model, frogpilot_toggles):
|
||||||
running.append(p)
|
running.append(p)
|
||||||
else:
|
else:
|
||||||
p.stop(block=False)
|
p.stop(block=False)
|
||||||
|
|
|
@ -7,53 +7,51 @@ from openpilot.system.manager.process import PythonProcess, NativeProcess, Daemo
|
||||||
|
|
||||||
WEBCAM = os.getenv("USE_WEBCAM") is not None
|
WEBCAM = os.getenv("USE_WEBCAM") is not None
|
||||||
|
|
||||||
def driverview(started: bool, params: Params, CP: car.CarParams, classic_model) -> bool:
|
def driverview(started: bool, params: Params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return started or params.get_bool("IsDriverViewEnabled")
|
return started or params.get_bool("IsDriverViewEnabled")
|
||||||
|
|
||||||
def notcar(started: bool, params: Params, CP: car.CarParams, classic_model) -> bool:
|
def notcar(started: bool, params: Params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return started and CP.notCar
|
return started and CP.notCar
|
||||||
|
|
||||||
def iscar(started: bool, params: Params, CP: car.CarParams, classic_model) -> bool:
|
def iscar(started: bool, params: Params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return started and not CP.notCar
|
return started and not CP.notCar
|
||||||
|
|
||||||
def logging(started, params, CP: car.CarParams, classic_model) -> bool:
|
def logging(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
run = (not CP.notCar) or not params.get_bool("DisableLogging")
|
run = (not CP.notCar) or not params.get_bool("DisableLogging")
|
||||||
return started and run
|
return started and run
|
||||||
|
|
||||||
def ublox_available() -> bool:
|
def ublox_available() -> bool:
|
||||||
return os.path.exists('/dev/ttyHS0') and not os.path.exists('/persist/comma/use-quectel-gps')
|
return os.path.exists('/dev/ttyHS0') and not os.path.exists('/persist/comma/use-quectel-gps')
|
||||||
|
|
||||||
def ublox(started, params, CP: car.CarParams, classic_model) -> bool:
|
def ublox(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
use_ublox = ublox_available()
|
use_ublox = ublox_available()
|
||||||
if use_ublox != params.get_bool("UbloxAvailable"):
|
if use_ublox != params.get_bool("UbloxAvailable"):
|
||||||
params.put_bool("UbloxAvailable", use_ublox)
|
params.put_bool("UbloxAvailable", use_ublox)
|
||||||
return started and use_ublox
|
return started and use_ublox
|
||||||
|
|
||||||
def qcomgps(started, params, CP: car.CarParams, classic_model) -> bool:
|
def qcomgps(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return started and not ublox_available()
|
return started and not ublox_available()
|
||||||
|
|
||||||
def always_run(started, params, CP: car.CarParams, classic_model) -> bool:
|
def always_run(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def only_onroad(started: bool, params, CP: car.CarParams, classic_model) -> bool:
|
def only_onroad(started: bool, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return started
|
return started
|
||||||
|
|
||||||
def only_offroad(started, params, CP: car.CarParams, classic_model) -> bool:
|
def only_offroad(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return not started
|
return not started
|
||||||
|
|
||||||
# FrogPilot functions
|
# FrogPilot functions
|
||||||
def allow_logging(started, params, CP: car.CarParams, classic_model) -> bool:
|
def allow_logging(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
allow_logging = not (params.get_bool("DeviceManagement") and params.get_bool("NoLogging"))
|
return not getattr(frogpilot_toggles, 'no_logging', False) and logging(started, params, CP, classic_model, frogpilot_toggles)
|
||||||
return allow_logging and logging(started, params, CP, classic_model)
|
|
||||||
|
|
||||||
def allow_uploads(started, params, CP: car.CarParams, classic_model) -> bool:
|
def allow_uploads(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
allow_uploads = not (params.get_bool("DeviceManagement") and params.get_bool("NoUploads") and not params.get_bool("DisableOnroadUploads"))
|
return not getattr(frogpilot_toggles, 'no_uploads', False)
|
||||||
return allow_uploads
|
|
||||||
|
|
||||||
def run_classic_modeld(started, params, CP: car.CarParams, classic_model) -> bool:
|
def run_classic_modeld(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return started and classic_model
|
return started and classic_model
|
||||||
|
|
||||||
def run_new_modeld(started, params, CP: car.CarParams, classic_model) -> bool:
|
def run_new_modeld(started, params, CP: car.CarParams, classic_model, frogpilot_toggles) -> bool:
|
||||||
return started and not classic_model
|
return started and not classic_model
|
||||||
|
|
||||||
procs = [
|
procs = [
|
||||||
|
|
|
@ -9,7 +9,7 @@ from sentry_sdk.integrations.threading import ThreadingIntegration
|
||||||
|
|
||||||
from openpilot.common.params import Params, ParamKeyType
|
from openpilot.common.params import Params, ParamKeyType
|
||||||
from openpilot.system.athena.registration import is_registered_device
|
from openpilot.system.athena.registration import is_registered_device
|
||||||
from openpilot.system.hardware import HARDWARE, PC
|
from openpilot.system.hardware import PC
|
||||||
from openpilot.common.swaglog import cloudlog
|
from openpilot.common.swaglog import cloudlog
|
||||||
from openpilot.system.version import get_build_metadata, get_version
|
from openpilot.system.version import get_build_metadata, get_version
|
||||||
|
|
||||||
|
@ -87,7 +87,8 @@ def capture_fingerprint(candidate, params, blocked=False):
|
||||||
matched_params[label] = {k: int(v) if isinstance(v, float) and v.is_integer() else v for k, v in sorted(key_values.items())}
|
matched_params[label] = {k: int(v) if isinstance(v, float) and v.is_integer() else v for k, v in sorted(key_values.items())}
|
||||||
|
|
||||||
with sentry_sdk.configure_scope() as scope:
|
with sentry_sdk.configure_scope() as scope:
|
||||||
scope.fingerprint = [HARDWARE.get_serial()]
|
scope.fingerprint = [params.get("DongleId", encoding='utf-8')]
|
||||||
|
|
||||||
for label, key_values in matched_params.items():
|
for label, key_values in matched_params.items():
|
||||||
scope.set_extra(label, "\n".join(f"{k}: {v}" for k, v in key_values.items()))
|
scope.set_extra(label, "\n".join(f"{k}: {v}" for k, v in key_values.items()))
|
||||||
|
|
||||||
|
@ -158,6 +159,8 @@ def init(project: SentryProject) -> bool:
|
||||||
else:
|
else:
|
||||||
env = short_branch
|
env = short_branch
|
||||||
|
|
||||||
|
dongle_id = params.get("DongleId", encoding='utf-8')
|
||||||
|
|
||||||
integrations = []
|
integrations = []
|
||||||
if project == SentryProject.SELFDRIVE:
|
if project == SentryProject.SELFDRIVE:
|
||||||
integrations.append(ThreadingIntegration(propagate_hub=True))
|
integrations.append(ThreadingIntegration(propagate_hub=True))
|
||||||
|
@ -170,7 +173,7 @@ def init(project: SentryProject) -> bool:
|
||||||
max_value_length=8192,
|
max_value_length=8192,
|
||||||
environment=env)
|
environment=env)
|
||||||
|
|
||||||
sentry_sdk.set_user({"id": HARDWARE.get_serial()})
|
sentry_sdk.set_user({"id": dongle_id})
|
||||||
sentry_sdk.set_tag("origin", build_metadata.openpilot.git_origin)
|
sentry_sdk.set_tag("origin", build_metadata.openpilot.git_origin)
|
||||||
sentry_sdk.set_tag("branch", short_branch)
|
sentry_sdk.set_tag("branch", short_branch)
|
||||||
sentry_sdk.set_tag("commit", build_metadata.openpilot.git_commit)
|
sentry_sdk.set_tag("commit", build_metadata.openpilot.git_commit)
|
||||||
|
|
Loading…
Reference in New Issue