diff --git a/cereal/custom.capnp b/cereal/custom.capnp index ad587c63a..82263a4b6 100644 --- a/cereal/custom.capnp +++ b/cereal/custom.capnp @@ -105,7 +105,7 @@ struct FrogPilotCarParams @0xf35cc4560bbf6ec2 { isHDA2 @3 :Bool; openpilotLongitudinalControlDisabled @4 :Bool; safetyConfigs @5 :List(SafetyConfig); - + canUseSASCM @6 :Bool; struct SafetyConfig { safetyParam @0 :UInt16; diff --git a/cereal/gen/cpp/custom.capnp.c++ b/cereal/gen/cpp/custom.capnp.c++ index ba0109f47..584e3a6de 100644 --- a/cereal/gen/cpp/custom.capnp.c++ +++ b/cereal/gen/cpp/custom.capnp.c++ @@ -642,7 +642,7 @@ const ::capnp::_::RawSchema s_aedffd8f31e7b55d = { }; #endif // !CAPNP_LITE CAPNP_DEFINE_ENUM(EventName_aedffd8f31e7b55d, aedffd8f31e7b55d); -static const ::capnp::_::AlignedData<123> b_f35cc4560bbf6ec2 = { +static const ::capnp::_::AlignedData<139> b_f35cc4560bbf6ec2 = { { 0, 0, 0, 0, 5, 0, 6, 0, 194, 110, 191, 11, 86, 196, 92, 243, 13, 0, 0, 0, 1, 0, 1, 0, @@ -652,7 +652,7 @@ static const ::capnp::_::AlignedData<123> b_f35cc4560bbf6ec2 = { 21, 0, 0, 0, 2, 1, 0, 0, 33, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 0, 0, 87, 1, 0, 0, + 45, 0, 0, 0, 143, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 117, 115, 116, 111, 109, 46, 99, @@ -664,49 +664,56 @@ static const ::capnp::_::AlignedData<123> b_f35cc4560bbf6ec2 = { 1, 0, 0, 0, 106, 0, 0, 0, 83, 97, 102, 101, 116, 121, 67, 111, 110, 102, 105, 103, 0, 0, 0, 0, - 24, 0, 0, 0, 3, 0, 4, 0, + 28, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 153, 0, 0, 0, 98, 0, 0, 0, + 181, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 0, 0, 0, 3, 0, 1, 0, - 164, 0, 0, 0, 2, 0, 1, 0, + 180, 0, 0, 0, 3, 0, 1, 0, + 192, 0, 0, 0, 2, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 0, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 160, 0, 0, 0, 3, 0, 1, 0, - 172, 0, 0, 0, 2, 0, 1, 0, - 2, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 1, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 169, 0, 0, 0, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 164, 0, 0, 0, 3, 0, 1, 0, - 176, 0, 0, 0, 2, 0, 1, 0, - 3, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 1, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 173, 0, 0, 0, 58, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 168, 0, 0, 0, 3, 0, 1, 0, - 180, 0, 0, 0, 2, 0, 1, 0, - 4, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 1, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 177, 0, 0, 0, 42, 1, 0, 0, + 189, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 3, 0, 1, 0, 200, 0, 0, 0, 2, 0, 1, 0, + 2, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 197, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 192, 0, 0, 0, 3, 0, 1, 0, + 204, 0, 0, 0, 2, 0, 1, 0, + 3, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 201, 0, 0, 0, 58, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 196, 0, 0, 0, 3, 0, 1, 0, + 208, 0, 0, 0, 2, 0, 1, 0, + 4, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 1, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 205, 0, 0, 0, 42, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 216, 0, 0, 0, 3, 0, 1, 0, + 228, 0, 0, 0, 2, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 197, 0, 0, 0, 114, 0, 0, 0, + 225, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 196, 0, 0, 0, 3, 0, 1, 0, - 224, 0, 0, 0, 2, 0, 1, 0, + 224, 0, 0, 0, 3, 0, 1, 0, + 252, 0, 0, 0, 2, 0, 1, 0, + 6, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 1, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 248, 0, 0, 0, 3, 0, 1, 0, + 4, 1, 0, 0, 2, 0, 1, 0, 99, 97, 110, 85, 115, 101, 80, 101, 100, 97, 108, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, @@ -764,6 +771,15 @@ static const ::capnp::_::AlignedData<123> b_f35cc4560bbf6ec2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 99, 97, 110, 85, 115, 101, 83, 65, + 83, 67, 77, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; @@ -772,11 +788,11 @@ static const ::capnp::_::AlignedData<123> b_f35cc4560bbf6ec2 = { static const ::capnp::_::RawSchema* const d_f35cc4560bbf6ec2[] = { &s_8d65dd40bad40951, }; -static const uint16_t m_f35cc4560bbf6ec2[] = {0, 1, 2, 3, 4, 5}; -static const uint16_t i_f35cc4560bbf6ec2[] = {0, 1, 2, 3, 4, 5}; +static const uint16_t m_f35cc4560bbf6ec2[] = {0, 6, 1, 2, 3, 4, 5}; +static const uint16_t i_f35cc4560bbf6ec2[] = {0, 1, 2, 3, 4, 5, 6}; const ::capnp::_::RawSchema s_f35cc4560bbf6ec2 = { - 0xf35cc4560bbf6ec2, b_f35cc4560bbf6ec2.words, 123, d_f35cc4560bbf6ec2, m_f35cc4560bbf6ec2, - 1, 6, i_f35cc4560bbf6ec2, nullptr, nullptr, { &s_f35cc4560bbf6ec2, nullptr, nullptr, 0, 0, nullptr }, false + 0xf35cc4560bbf6ec2, b_f35cc4560bbf6ec2.words, 139, d_f35cc4560bbf6ec2, m_f35cc4560bbf6ec2, + 1, 7, i_f35cc4560bbf6ec2, nullptr, nullptr, { &s_f35cc4560bbf6ec2, nullptr, nullptr, 0, 0, nullptr }, false }; #endif // !CAPNP_LITE static const ::capnp::_::AlignedData<36> b_8d65dd40bad40951 = { diff --git a/cereal/gen/cpp/custom.capnp.h b/cereal/gen/cpp/custom.capnp.h index 248fd8f9d..746fd5ea4 100644 --- a/cereal/gen/cpp/custom.capnp.h +++ b/cereal/gen/cpp/custom.capnp.h @@ -669,6 +669,8 @@ public: inline bool hasSafetyConfigs() const; inline ::capnp::List< ::cereal::FrogPilotCarParams::SafetyConfig, ::capnp::Kind::STRUCT>::Reader getSafetyConfigs() const; + inline bool getCanUseSASCM() const; + private: ::capnp::_::StructReader _reader; template @@ -719,6 +721,9 @@ public: inline void adoptSafetyConfigs(::capnp::Orphan< ::capnp::List< ::cereal::FrogPilotCarParams::SafetyConfig, ::capnp::Kind::STRUCT>>&& value); inline ::capnp::Orphan< ::capnp::List< ::cereal::FrogPilotCarParams::SafetyConfig, ::capnp::Kind::STRUCT>> disownSafetyConfigs(); + inline bool getCanUseSASCM(); + inline void setCanUseSASCM(bool value); + private: ::capnp::_::StructBuilder _builder; template @@ -2220,6 +2225,20 @@ inline ::capnp::Orphan< ::capnp::List< ::cereal::FrogPilotCarParams::SafetyConfi ::capnp::bounded<0>() * ::capnp::POINTERS)); } +inline bool FrogPilotCarParams::Reader::getCanUseSASCM() const { + return _reader.getDataField( + ::capnp::bounded<4>() * ::capnp::ELEMENTS); +} + +inline bool FrogPilotCarParams::Builder::getCanUseSASCM() { + return _builder.getDataField( + ::capnp::bounded<4>() * ::capnp::ELEMENTS); +} +inline void FrogPilotCarParams::Builder::setCanUseSASCM(bool value) { + _builder.setDataField( + ::capnp::bounded<4>() * ::capnp::ELEMENTS, value); +} + inline ::uint16_t FrogPilotCarParams::SafetyConfig::Reader::getSafetyParam() const { return _reader.getDataField< ::uint16_t>( ::capnp::bounded<0>() * ::capnp::ELEMENTS); diff --git a/cereal/libcereal_shared.so b/cereal/libcereal_shared.so index 0cf8130fe..06468610c 100755 Binary files a/cereal/libcereal_shared.so and b/cereal/libcereal_shared.so differ diff --git a/frogpilot/common/frogpilot_variables.py b/frogpilot/common/frogpilot_variables.py index c3f051cd2..7d531c3a8 100644 --- a/frogpilot/common/frogpilot_variables.py +++ b/frogpilot/common/frogpilot_variables.py @@ -569,6 +569,7 @@ class FrogPilotVariables: toggle.has_pedal = CP.enableGasInterceptor has_radar = not CP.radarUnavailable toggle.has_sdsu = toggle.car_make == "toyota" and bool(CP.flags & ToyotaFlags.SMART_DSU.value) + toggle.has_sascm = toggle.car_make == "gm" and bool(CP.flags & GMFlags.SASCM.value) has_sng = CP.autoResumeSng toggle.has_zss = toggle.car_make == "toyota" and bool(FPCP.fpFlags & ToyotaFrogPilotFlags.ZSS.value) is_angle_car = CP.steerControlType == car.CarParams.SteerControlType.angle diff --git a/frogpilot/system/frogpilot_stats.py b/frogpilot/system/frogpilot_stats.py index 2a202d5b8..b488113ca 100644 --- a/frogpilot/system/frogpilot_stats.py +++ b/frogpilot/system/frogpilot_stats.py @@ -178,6 +178,7 @@ def send_stats(): .field("has_openpilot_longitudinal", frogpilot_toggles.openpilot_longitudinal) .field("has_pedal", frogpilot_toggles.has_pedal) .field("has_sdsu", frogpilot_toggles.has_sdsu) + .field("has_sascm", frogpilot_toggles.has_sascm) .field("has_zss", frogpilot_toggles.has_zss) .field("latitude", latitude) .field("longitude", longitude) diff --git a/frogpilot/ui/qt/offroad/frogpilot_settings.cc b/frogpilot/ui/qt/offroad/frogpilot_settings.cc index 2ce9a4e1d..57d541293 100644 --- a/frogpilot/ui/qt/offroad/frogpilot_settings.cc +++ b/frogpilot/ui/qt/offroad/frogpilot_settings.cc @@ -269,6 +269,7 @@ void FrogPilotSettingsWindow::updateVariables() { hasPedal = CP.getEnableGasInterceptor(); hasRadar = !CP.getRadarUnavailable(); hasSDSU = frogpilot_toggles.value("has_sdsu").toBool(); + hasSASCM = frogpilot_toggles.value("has_sascm").toBool(); hasSNG = hasOpenpilotLongitudinal && CP.getAutoResumeSng(); hasZSS = frogpilot_toggles.value("has_zss").toBool(); isAngleCar = CP.getSteerControlType() == cereal::CarParams::SteerControlType::ANGLE; @@ -391,6 +392,7 @@ void FrogPilotSettingsWindow::updateVariables() { canUsePedal = FPCP.getCanUsePedal(); canUseSDSU = FPCP.getCanUseSDSU(); + canUseSASCM = FPCP.getCanUseSASCM(); openpilotLongitudinalControlDisabled = FPCP.getOpenpilotLongitudinalControlDisabled(); } diff --git a/frogpilot/ui/qt/offroad/frogpilot_settings.h b/frogpilot/ui/qt/offroad/frogpilot_settings.h index bd48e67e4..aa4db8d8f 100644 --- a/frogpilot/ui/qt/offroad/frogpilot_settings.h +++ b/frogpilot/ui/qt/offroad/frogpilot_settings.h @@ -13,6 +13,7 @@ public: bool canUsePedal = false; bool canUseSDSU = false; + bool canUseSASCM = false; bool forceOpenDescriptions = false; bool hasAutoTune = true; bool hasBSM = true; @@ -24,6 +25,7 @@ public: bool hasPedal = false; bool hasRadar = true; bool hasSDSU = false; + bool hasSASCM = false; bool hasSNG = false; bool hasZSS = false; bool isAngleCar = false; diff --git a/frogpilot/ui/qt/offroad/vehicle_settings.cc b/frogpilot/ui/qt/offroad/vehicle_settings.cc index 9ecfa3a75..777d0a790 100644 --- a/frogpilot/ui/qt/offroad/vehicle_settings.cc +++ b/frogpilot/ui/qt/offroad/vehicle_settings.cc @@ -189,6 +189,7 @@ FrogPilotVehiclesPanel::FrogPilotVehiclesPanel(FrogPilotSettingsWindow *parent) {"PedalSupport", tr("comma Pedal Support"), tr("Does your vehicle support the \"comma pedal\"?"), ""}, {"OpenpilotLongitudinal", tr("openpilot Longitudinal Support"), tr("Can openpilot control the vehicle's acceleration and braking?"), ""}, {"RadarSupport", tr("Radar Support"), tr("Does openpilot use the vehicle's radar data alongside the device's camera for tracking lead vehicles?"), ""}, + {"SASCMSupport", tr("SASCM Support"), tr("Does your vehicle support \"SASCMs\"?"), ""}, {"SDSUSupport", tr("SDSU Support"), tr("Does your vehicle support \"SDSUs\"?"), ""}, {"SNGSupport", tr("Stop-and-Go Support"), tr("Does your vehicle support stop-and-go driving?"), ""} }; @@ -342,6 +343,7 @@ void FrogPilotVehiclesPanel::showEvent(QShowEvent *event) { QStringList detected; if (hasPedal) detected << "comma Pedal"; + if (parent->hasSASCM) detected << "SASCM"; if (parent->hasSDSU) detected << "SDSU"; if (parent->hasZSS) detected << "ZSS"; static_cast(toggles["HardwareDetected"])->setText(detected.isEmpty() ? tr("None") : detected.join(", ")); @@ -350,6 +352,7 @@ void FrogPilotVehiclesPanel::showEvent(QShowEvent *event) { static_cast(toggles["OpenpilotLongitudinal"])->setText(hasOpenpilotLongitudinal ? tr("Yes") : tr("No")); static_cast(toggles["PedalSupport"])->setText(parent->canUsePedal ? tr("Yes") : tr("No")); static_cast(toggles["RadarSupport"])->setText(parent->hasRadar ? tr("Yes") : tr("No")); + static_cast(toggles["SASCMSupport"])->setText(parent->canUseSASCM ? tr("Yes") : tr("No")); static_cast(toggles["SDSUSupport"])->setText(parent->canUseSDSU ? tr("Yes") : tr("No")); static_cast(toggles["SNGSupport"])->setText(hasSNG ? tr("Yes") : tr("No")); diff --git a/frogpilot/ui/qt/offroad/vehicle_settings.h b/frogpilot/ui/qt/offroad/vehicle_settings.h index dd94a4f70..f29cd896a 100644 --- a/frogpilot/ui/qt/offroad/vehicle_settings.h +++ b/frogpilot/ui/qt/offroad/vehicle_settings.h @@ -40,7 +40,7 @@ private: QSet hkgKeys = {"NewLongAPI", "TacoTuneHacks"}; QSet longitudinalKeys = {"ExperimentalGMTune", "FrogsGoMoosTweak", "LongPitch", "NewLongAPI", "SNGHack", "VoltSNG"}; QSet toyotaKeys = {"ClusterOffset", "FrogsGoMoosTweak", "LockDoorsTimer", "SNGHack", "ToyotaDoors"}; - QSet vehicleInfoKeys = {"BlindSpotSupport", "HardwareDetected", "OpenpilotLongitudinal", "PedalSupport", "RadarSupport", "SDSUSupport", "SNGSupport"}; + QSet vehicleInfoKeys = {"BlindSpotSupport", "HardwareDetected", "OpenpilotLongitudinal", "PedalSupport", "RadarSupport", "SASCMSupport", "SDSUSupport", "SNGSupport"}; QSet parentKeys; diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py index ce571ba9e..75d7ebd41 100644 --- a/selfdrive/car/gm/interface.py +++ b/selfdrive/car/gm/interface.py @@ -111,6 +111,11 @@ class CarInterface(CarInterfaceBase): ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.gm)] ret.autoResumeSng = False ret.enableBsm = 0x142 in fingerprint[CanBus.POWERTRAIN] + + # Detect Beartech SASCM allows openpilot longitudinal control on SDGM and ASCM_INT vehicles + if 0x2FF in fingerprint[0]: + ret.flags |= GMFlags.SASCM.value + if PEDAL_MSG in fingerprint[0]: ret.enableGasInterceptor = True ret.safetyConfigs[0].safetyParam |= Panda.FLAG_GM_GAS_INTERCEPTOR diff --git a/selfdrive/car/gm/values.py b/selfdrive/car/gm/values.py index 52ab348dd..e6ce414f3 100644 --- a/selfdrive/car/gm/values.py +++ b/selfdrive/car/gm/values.py @@ -258,6 +258,8 @@ class GMFlags(IntFlag): CC_LONG = 2 NO_CAMERA = 4 NO_ACCELERATOR_POS_MSG = 8 + FORCE_BRAKE_C9 = 16 + SASCM = 32 # In a Data Module, an identifier is a string used to recognize an object, diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 948e758ee..90af90df2 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -187,6 +187,7 @@ class CarInterfaceBase(ABC): elif platform in GMCAR: fp_ret.canUsePedal = True + fp_ret.canUseSASCM = True elif platform in HondaCAR: if candidate == HondaCAR.HONDA_CLARITY: diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts index 77ef4ce9b..25cb34c8a 100644 --- a/selfdrive/ui/translations/main_ar.ts +++ b/selfdrive/ui/translations/main_ar.ts @@ -3798,6 +3798,14 @@ Developer - Highly customizable settings for seasoned enthusiasts <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_caveman.ts b/selfdrive/ui/translations/main_caveman.ts index 99fdd93a1..fc1626e78 100644 --- a/selfdrive/ui/translations/main_caveman.ts +++ b/selfdrive/ui/translations/main_caveman.ts @@ -3802,6 +3802,14 @@ Developer - Many custom setting for seasoned enthusiast <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index 2921f572f..26f6b333a 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -3798,6 +3798,14 @@ Entwickler – Hochgradig anpassbare Einstellungen für versierte Enthusiasten<b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_duck.ts b/selfdrive/ui/translations/main_duck.ts index 738370b32..3b22e85b2 100644 --- a/selfdrive/ui/translations/main_duck.ts +++ b/selfdrive/ui/translations/main_duck.ts @@ -3800,6 +3800,14 @@ Developer - Ultra-custom settings for seasoned duckthusiasts <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_es.ts b/selfdrive/ui/translations/main_es.ts index 47c4f54a2..3c000f675 100644 --- a/selfdrive/ui/translations/main_es.ts +++ b/selfdrive/ui/translations/main_es.ts @@ -3797,6 +3797,14 @@ Desarrollador: configuración altamente personalizable para entusiastas veterano <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index 430219414..a76c963e3 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -3797,6 +3797,14 @@ Développeur – Paramètres hautement personnalisables pour passionnés chevron <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_frog.ts b/selfdrive/ui/translations/main_frog.ts index 12f3985a1..e23c8c16d 100644 --- a/selfdrive/ui/translations/main_frog.ts +++ b/selfdrive/ui/translations/main_frog.ts @@ -3798,6 +3798,14 @@ Developer - Highly customizable settings for seasoned swamp pros <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index 558ec332d..95adb8a07 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -3796,6 +3796,14 @@ Developer - こだわりのある上級者向けの高度にカスタマイズ <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index 43cc34db5..ae6c0e972 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -3797,6 +3797,14 @@ Developer - Highly customizable settings for seasoned enthusiasts <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_pirate.ts b/selfdrive/ui/translations/main_pirate.ts index 5560f7304..f2de3638e 100644 --- a/selfdrive/ui/translations/main_pirate.ts +++ b/selfdrive/ui/translations/main_pirate.ts @@ -3798,6 +3798,14 @@ Developer - Highly customizable riggin’s fer seasoned enthusiasts<b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index 8a5c7aad2..72c8b8e5a 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -3798,6 +3798,14 @@ Desenvolvedor - Configurações altamente personalizáveis para entusiastas expe <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_shakespearean.ts b/selfdrive/ui/translations/main_shakespearean.ts index 410f1c88a..40cf76d1a 100644 --- a/selfdrive/ui/translations/main_shakespearean.ts +++ b/selfdrive/ui/translations/main_shakespearean.ts @@ -3808,6 +3808,14 @@ Developer - Most customizable settings for well-tried enthusiasts <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index 59fa51b4f..aa74c7961 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -3798,6 +3798,14 @@ Developer - Highly customizable settings for seasoned enthusiasts <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index a6745ae2f..543d9f924 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -3797,6 +3797,14 @@ Geliştirici - Tecrübeli meraklılar için yüksek özelleştirilebilir ayarlar <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index 622292757..9c259e009 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -3798,6 +3798,14 @@ Developer - Highly customizable settings for seasoned enthusiasts <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 277966a36..6678e70e8 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -3798,6 +3798,14 @@ Developer - 為資深愛好者提供高度自訂的設定 <b>Use the pedal interceptor for longitudinal control</b> instead of camera ACC/Redneck when available. + + SASCM Support + + + + <b>Does your vehicle support "SASCMs"?</b> + + FrogPilotVisualsPanel diff --git a/selfdrive/ui/ui b/selfdrive/ui/ui index 992f19931..db83fc1c2 100755 Binary files a/selfdrive/ui/ui and b/selfdrive/ui/ui differ