Merge branch 'master-new' of https://github.com/sunnypilot/sunnypilot into master-new

This commit is contained in:
infiniteCable2
2025-06-03 19:05:31 +02:00
118 changed files with 7454 additions and 4278 deletions
+3 -3
View File
@@ -1,4 +1,4 @@
from cereal import car, log
from cereal import car, log, custom
import cereal.messaging as messaging
from opendbc.car import DT_CTRL, structs
from opendbc.car.interfaces import MAX_CTRL_SPEED
@@ -16,14 +16,14 @@ class MockCarState:
def __init__(self):
self.sm = messaging.SubMaster(['gpsLocation', 'gpsLocationExternal'])
def update(self, CS: car.CarState):
def update(self, CS: car.CarState, CS_SP: custom.CarStateSP):
self.sm.update(0)
gps_sock = 'gpsLocationExternal' if self.sm.recv_frame['gpsLocationExternal'] > 1 else 'gpsLocation'
CS.vEgo = self.sm[gps_sock].speed
CS.vEgoRaw = self.sm[gps_sock].speed
return CS
return CS, CS_SP
class CarSpecificEvents:
+20 -10
View File
@@ -73,12 +73,13 @@ class Car:
def __init__(self, CI=None, RI=None) -> None:
self.can_sock = messaging.sub_sock('can', timeout=20)
self.sm = messaging.SubMaster(['pandaStates', 'carControl', 'onroadEvents'] + ['carControlSP'])
self.pm = messaging.PubMaster(['sendcan', 'carState', 'carParams', 'carOutput', 'liveTracks'] + ['carParamsSP'])
self.pm = messaging.PubMaster(['sendcan', 'carState', 'carParams', 'carOutput', 'liveTracks'] + ['carParamsSP', 'carStateSP'])
self.can_rcv_cum_timeout_counter = 0
self.CC_prev = car.CarControl.new_message()
self.CS_prev = car.CarState.new_message()
self.CS_SP_prev = custom.CarStateSP.new_message()
self.initialized_prev = False
self.last_actuators_output = structs.CarControl.Actuators()
@@ -87,6 +88,8 @@ class Car:
self.can_callbacks = can_comm_callbacks(self.can_sock, self.pm.sock['sendcan'])
is_release = self.params.get_bool("IsReleaseBranch")
if CI is None:
# wait for one pandaState and one CAN packet
print("Waiting for CAN messages...")
@@ -106,7 +109,7 @@ class Car:
fixed_fingerprint = json.loads(self.params.get("CarPlatformBundle", encoding='utf-8') or "{}").get("platform", None)
self.CI = get_car(*self.can_callbacks, obd_callback(self.params), alpha_long_allowed, num_pandas, cached_params, fixed_fingerprint)
self.CI = get_car(*self.can_callbacks, obd_callback(self.params), alpha_long_allowed, is_release, num_pandas, cached_params, fixed_fingerprint)
sunnypilot_interfaces.setup_interfaces(self.CI, self.params)
self.RI = interfaces[self.CI.CP.carFingerprint].RadarInterface(self.CI.CP, self.CI.CP_SP)
self.CP = self.CI.CP
@@ -134,7 +137,7 @@ class Car:
safety_config.safetyModel = structs.CarParams.SafetyModel.noOutput
self.CP.safetyConfigs = [safety_config]
if self.CP.secOcRequired and not self.params.get_bool("IsReleaseBranch"):
if self.CP.secOcRequired and not is_release:
# Copy user key if available
try:
with open("/cache/params/SecOCKey") as f:
@@ -186,16 +189,17 @@ class Car:
# log fingerprint in sentry
sunnypilot_interfaces.log_fingerprint(self.CP)
def state_update(self) -> tuple[car.CarState, structs.RadarDataT | None]:
def state_update(self) -> tuple[car.CarState, custom.CarStateSP, structs.RadarDataT | None]:
"""carState update loop, driven by can"""
can_strs = messaging.drain_sock_raw(self.can_sock, wait_for_one=True)
can_list = can_capnp_to_list(can_strs)
# Update carState from CAN
CS = self.CI.update(can_list)
CS, CS_SP = self.CI.update(can_list)
CS_SP = convert_to_capnp(CS_SP)
if self.CP.brand == 'mock':
CS = self.mock_carstate.update(CS)
CS, CS_SP = self.mock_carstate.update(CS, CS_SP)
# Update radar tracks from CAN
RD: structs.RadarDataT | None = self.RI.update(can_list)
@@ -220,9 +224,9 @@ class Car:
CS.vCruise = float(self.v_cruise_helper.v_cruise_kph)
CS.vCruiseCluster = float(self.v_cruise_helper.v_cruise_cluster_kph)
return CS, RD
return CS, CS_SP, RD
def state_publish(self, CS: car.CarState, RD: structs.RadarDataT | None):
def state_publish(self, CS: car.CarState, CS_SP: custom.CarStateSP, RD: structs.RadarDataT | None):
"""carState and carParams publish loop"""
# carParams - logged every 50 seconds (> 1 per segment)
@@ -259,6 +263,11 @@ class Car:
cp_sp_send.carParamsSP = self.CP_SP_capnp
self.pm.send('carParamsSP', cp_sp_send)
cs_sp_send = messaging.new_message('carStateSP')
cs_sp_send.valid = CS.canValid
cs_sp_send.carStateSP = CS_SP
self.pm.send('carStateSP', cs_sp_send)
def controls_update(self, CS: car.CarState, CC: car.CarControl, CC_SP: custom.CarControlSP):
"""control update loop, driven by carControl"""
@@ -278,9 +287,9 @@ class Car:
self.CC_prev = CC
def step(self):
CS, RD = self.state_update()
CS, CS_SP, RD = self.state_update()
self.state_publish(CS, RD)
self.state_publish(CS, CS_SP, RD)
initialized = (not any(e.name == EventName.selfdriveInitializing for e in self.sm['onroadEvents']) and
self.sm.seen['onroadEvents'])
@@ -289,6 +298,7 @@ class Car:
self.initialized_prev = initialized
self.CS_prev = CS
self.CS_SP_prev = CS_SP
def params_thread(self, evt):
while not evt.is_set():
+3 -1
View File
@@ -35,11 +35,13 @@ def asdictref(obj) -> dict[str, Any]:
return _asdictref_inner(obj)
def convert_to_capnp(struct: structs.CarParamsSP) -> capnp.lib.capnp._DynamicStructBuilder:
def convert_to_capnp(struct: structs.CarParamsSP | structs.CarStateSP) -> capnp.lib.capnp._DynamicStructBuilder:
struct_dict = asdictref(struct)
if isinstance(struct, structs.CarParamsSP):
struct_capnp = custom.CarParamsSP.new_message(**struct_dict)
elif isinstance(struct, structs.CarStateSP):
struct_capnp = custom.CarStateSP.new_message(**struct_dict)
else:
raise ValueError(f"Unsupported struct type: {type(struct)}")
+1 -1
View File
@@ -42,7 +42,7 @@ class TestCarInterfaces:
args = get_fuzzy_car_interface_args(data.draw)
car_params = CarInterface.get_params(car_name, args['fingerprints'], args['car_fw'],
alpha_long=args['alpha_long'], docs=False)
alpha_long=args['alpha_long'], is_release=False, docs=False)
car_params_sp = CarInterface.get_params_sp(car_params, car_name, args['fingerprints'], args['car_fw'],
alpha_long=args['alpha_long'], docs=False)
car_params = car_params.as_reader()
+5 -4
View File
@@ -153,7 +153,7 @@ class TestCarModelBase(unittest.TestCase):
cls.openpilot_enabled = cls.car_safety_mode_frame is not None
cls.CarInterface = interfaces[cls.platform]
cls.CP = cls.CarInterface.get_params(cls.platform, cls.fingerprint, car_fw, alpha_long, docs=False)
cls.CP = cls.CarInterface.get_params(cls.platform, cls.fingerprint, car_fw, alpha_long, False, docs=False)
cls.CP_SP = cls.CarInterface.get_params_sp(cls.CP, cls.platform, cls.fingerprint, car_fw, alpha_long, docs=False)
assert cls.CP
assert cls.CP_SP
@@ -204,7 +204,7 @@ class TestCarModelBase(unittest.TestCase):
CC_SP = structs.CarControlSP()
for i, msg in enumerate(self.can_msgs):
CS = self.CI.update(msg)
CS, _ = self.CI.update(msg)
self.CI.apply(CC, CC_SP, msg[0])
if CS.canValid:
@@ -349,7 +349,7 @@ class TestCarModelBase(unittest.TestCase):
self.safety.safety_rx_hook(to_send)
can = [(int(time.monotonic() * 1e9), [CanData(address=address, dat=dat, src=bus)])]
CS = self.CI.update(can)
CS, _ = self.CI.update(can)
if self.safety.get_gas_pressed_prev() != prev_panda_gas:
self.assertEqual(CS.gasPressed, self.safety.get_gas_pressed_prev())
@@ -409,7 +409,8 @@ class TestCarModelBase(unittest.TestCase):
checks = defaultdict(int)
vehicle_speed_seen = self.CP.steerControlType == SteerControlType.angle and not self.CP.notCar
for idx, can in enumerate(self.can_msgs):
CS = self.CI.update(can).as_reader()
CS, _ = self.CI.update(can)
CS = CS.as_reader()
for msg in filter(lambda m: m.src < 64, can[1]):
to_send = libsafety_py.make_CANPacket(msg.address, msg.src % 4, msg.dat)
ret = self.safety.safety_rx_hook(to_send)
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:abbb1f5a74a6d047ed4b7f376b19451a9443986660f136afd0f8d76fc254a579
size 15976894
oid sha256:98f0121ccb6f850077b04cc91bd33d370fc6cbdc2bd35f1ab55628a15a813f36
size 15966721
+1 -1
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6dfffac033d7ae8e68aa5763bd9b5dd99ddc748f6a95523c84fc2523eefdec55
oid sha256:897f80d0388250f99bba69b6a8434560cc0fd83157cbeb0bc134c67fe4e64624
size 34882971
+11 -2
View File
@@ -192,6 +192,16 @@ def personality_changed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging
return NormalPermanentAlert(f"Driving Personality: {personality}", duration=1.5)
def invalid_lkas_setting_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
text = "Toggle stock LKAS on or off to engage"
if CP.brand == "tesla":
text = "Switch to Traffic-Aware Cruise Control to engage"
elif CP.brand == "mazda":
text = "Enable your car's LKAS to engage"
elif CP.brand == "nissan":
text = "Disable your car's stock LKAS to engage"
return NormalPermanentAlert("Invalid LKAS setting", text)
EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
# ********** events with no alerts **********
@@ -245,8 +255,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
},
EventName.invalidLkasSetting: {
ET.PERMANENT: NormalPermanentAlert("Invalid LKAS setting",
"Toggle stock LKAS on or off to engage"),
ET.PERMANENT: invalid_lkas_setting_alert,
ET.NO_ENTRY: NoEntryAlert("Invalid LKAS setting"),
},
+1
View File
@@ -544,6 +544,7 @@ class SelfdriveD(CruiseHelper):
def params_thread(self, evt):
while not evt.is_set():
self.is_metric = self.params.get_bool("IsMetric")
self.is_ldw_enabled = self.params.get_bool("IsLdwEnabled")
self.disengage_on_accelerator = self.params.get_bool("DisengageOnAccelerator")
self.experimental_mode = self.params.get_bool("ExperimentalMode") and self.CP.openpilotLongitudinalControl
self.personality = self.read_personality_param()
@@ -363,7 +363,7 @@ def get_car_params_callback(rc, pm, msgs, fingerprint):
with car.CarParams.from_bytes(cached_params_raw) as _cached_params:
cached_params = _cached_params
_CI = get_car(*can_callbacks, lambda obd: None, Params().get_bool("AlphaLongitudinalEnabled"), cached_params=cached_params)
_CI = get_car(*can_callbacks, lambda obd: None, Params().get_bool("AlphaLongitudinalEnabled"), False, cached_params=cached_params)
CP, CP_SP = _CI.CP, _CI.CP_SP
params.put("CarParams", CP.to_bytes())
+4 -4
View File
@@ -40,14 +40,14 @@ PROCS = {
"selfdrive.selfdrived.selfdrived": 16.0,
"selfdrive.car.card": 26.0,
"./loggerd": 14.0,
"./encoderd": 17.0,
"./encoderd": 13.0,
"./camerad": 10.0,
"selfdrive.controls.plannerd": 9.0,
"selfdrive.controls.plannerd": 8.0,
"./ui": 18.0,
"./sensord": 7.0,
"system.sensord.sensord": 13.0,
"selfdrive.controls.radard": 2.0,
"selfdrive.modeld.modeld": 22.0,
"selfdrive.modeld.dmonitoringmodeld": 21.0,
"selfdrive.modeld.dmonitoringmodeld": 18.0,
"system.hardware.hardwared": 4.0,
"selfdrive.locationd.calibrationd": 2.0,
"selfdrive.locationd.torqued": 5.0,
+17 -9
View File
@@ -1,6 +1,5 @@
import os
import json
Import('qt_env', 'arch', 'common', 'messaging', 'visionipc', 'transformations')
Import('env', 'qt_env', 'arch', 'common', 'messaging', 'visionipc', 'transformations')
base_libs = [common, messaging, visionipc, transformations,
'm', 'OpenCL', 'ssl', 'crypto', 'pthread'] + qt_env["LIBS"]
@@ -83,8 +82,15 @@ if GetOption('extras'):
if arch != "Darwin":
# build installers
senv = qt_env.Clone()
senv['LINKFLAGS'].append('-Wl,-strip-debug')
raylib_env = env.Clone()
raylib_env['LIBPATH'] += [f'#third_party/raylib/{arch}/']
raylib_env['LINKFLAGS'].append('-Wl,-strip-debug')
raylib_libs = common + ["raylib"]
if arch == "larch64":
raylib_libs += ["GLESv2", "wayland-client", "wayland-egl", "EGL"]
else:
raylib_libs += ["GL"]
release = "release3"
installers = [
@@ -94,17 +100,19 @@ if GetOption('extras'):
("openpilot_internal", "nightly-dev"),
]
cont = senv.Command(f"installer/continue_openpilot.o", f"installer/continue_openpilot.sh",
"ld -r -b binary -o $TARGET $SOURCE")
cont = raylib_env.Command("installer/continue_openpilot.o", "installer/continue_openpilot.sh",
"ld -r -b binary -o $TARGET $SOURCE")
inter = raylib_env.Command("installer/inter_ttf.o", "installer/inter-ascii.ttf",
"ld -r -b binary -o $TARGET $SOURCE")
for name, branch in installers:
d = {'BRANCH': f"'\"{branch}\"'"}
if "internal" in name:
d['INTERNAL'] = "1"
obj = senv.Object(f"installer/installers/installer_{name}.o", ["installer/installer.cc"], CPPDEFINES=d)
f = senv.Program(f"installer/installers/installer_{name}", [obj, cont], LIBS=qt_libs)
obj = raylib_env.Object(f"installer/installers/installer_{name}.o", ["installer/installer.cc"], CPPDEFINES=d)
f = raylib_env.Program(f"installer/installers/installer_{name}", [obj, cont, inter], LIBS=raylib_libs)
# keep installers small
assert f[0].get_size() < 370*1e3
assert f[0].get_size() < 1300*1e3, f[0].get_size()
# build watch3
if arch in ['x86_64', 'aarch64', 'Darwin'] or GetOption('extras'):
+77 -105
View File
@@ -1,19 +1,15 @@
#include <unistd.h>
#include <cstdlib>
#include <array>
#include <cassert>
#include <fstream>
#include <map>
#include <string>
#include <QDebug>
#include <QDir>
#include <QTimer>
#include <QVBoxLayout>
#include "common/swaglog.h"
#include "common/util.h"
#include "selfdrive/ui/installer/installer.h"
#include "selfdrive/ui/qt/util.h"
#include "selfdrive/ui/qt/qt_window.h"
#include "third_party/raylib/include/raylib.h"
int freshClone();
int cachedFetch(const std::string &cache);
int executeGitCommand(const std::string &cmd);
std::string get_str(std::string const s) {
std::string::size_type pos = s.find('?');
@@ -28,136 +24,108 @@ const std::string BRANCH_STR = get_str(BRANCH "?
#define GIT_SSH_URL "git@github.com:commaai/openpilot.git"
#define CONTINUE_PATH "/data/continue.sh"
const QString CACHE_PATH = "/data/openpilot.cache";
const std::string CACHE_PATH = "/data/openpilot.cache";
#define INSTALL_PATH "/data/openpilot"
#define TMP_INSTALL_PATH "/data/tmppilot"
extern const uint8_t str_continue[] asm("_binary_selfdrive_ui_installer_continue_openpilot_sh_start");
extern const uint8_t str_continue_end[] asm("_binary_selfdrive_ui_installer_continue_openpilot_sh_end");
extern const uint8_t inter_ttf[] asm("_binary_selfdrive_ui_installer_inter_ascii_ttf_start");
extern const uint8_t inter_ttf_end[] asm("_binary_selfdrive_ui_installer_inter_ascii_ttf_end");
Font font;
void run(const char* cmd) {
int err = std::system(cmd);
assert(err == 0);
}
Installer::Installer(QWidget *parent) : QWidget(parent) {
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setContentsMargins(150, 290, 150, 150);
layout->setSpacing(0);
QLabel *title = new QLabel(tr("Installing..."));
title->setStyleSheet("font-size: 90px; font-weight: 600;");
layout->addWidget(title, 0, Qt::AlignTop);
layout->addSpacing(170);
bar = new QProgressBar();
bar->setRange(0, 100);
bar->setTextVisible(false);
bar->setFixedHeight(72);
layout->addWidget(bar, 0, Qt::AlignTop);
layout->addSpacing(30);
val = new QLabel("0%");
val->setStyleSheet("font-size: 70px; font-weight: 300;");
layout->addWidget(val, 0, Qt::AlignTop);
layout->addStretch();
QObject::connect(&proc, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &Installer::cloneFinished);
QObject::connect(&proc, &QProcess::readyReadStandardError, this, &Installer::readProgress);
QTimer::singleShot(100, this, &Installer::doInstall);
setStyleSheet(R"(
* {
font-family: Inter;
color: white;
background-color: black;
}
QProgressBar {
border: none;
background-color: #292929;
}
QProgressBar::chunk {
background-color: #364DEF;
}
)");
void renderProgress(int progress) {
BeginDrawing();
ClearBackground(BLACK);
DrawTextEx(font, "Installing...", (Vector2){150, 290}, 110, 0, WHITE);
Rectangle bar = {150, 570, (float)GetScreenWidth() - 300, 72};
DrawRectangleRec(bar, (Color){41, 41, 41, 255});
progress = std::clamp(progress, 0, 100);
bar.width *= progress / 100.0f;
DrawRectangleRec(bar, (Color){70, 91, 234, 255});
DrawTextEx(font, (std::to_string(progress) + "%").c_str(), (Vector2){150, 670}, 85, 0, WHITE);
EndDrawing();
}
void Installer::updateProgress(int percent) {
bar->setValue(percent);
val->setText(QString("%1%").arg(percent));
update();
}
void Installer::doInstall() {
int doInstall() {
// wait for valid time
while (!util::system_time_valid()) {
usleep(500 * 1000);
qDebug() << "Waiting for valid time";
util::sleep_for(500);
LOGD("Waiting for valid time");
}
// cleanup previous install attempts
run("rm -rf " TMP_INSTALL_PATH " " INSTALL_PATH);
// do the install
if (QDir(CACHE_PATH).exists()) {
cachedFetch(CACHE_PATH);
if (util::file_exists(CACHE_PATH)) {
return cachedFetch(CACHE_PATH);
} else {
freshClone();
return freshClone();
}
}
void Installer::freshClone() {
qDebug() << "Doing fresh clone";
proc.start("git", {"clone", "--progress", GIT_URL.c_str(), "-b", BRANCH_STR.c_str(),
"--depth=1", "--recurse-submodules", TMP_INSTALL_PATH});
int freshClone() {
LOGD("Doing fresh clone");
std::string cmd = util::string_format("git clone --progress %s -b %s --depth=1 --recurse-submodules %s 2>&1",
GIT_URL.c_str(), BRANCH_STR.c_str(), TMP_INSTALL_PATH);
return executeGitCommand(cmd);
}
void Installer::cachedFetch(const QString &cache) {
qDebug() << "Fetching with cache: " << cache;
int cachedFetch(const std::string &cache) {
LOGD("Fetching with cache: %s", cache.c_str());
run(QString("cp -rp %1 %2").arg(cache, TMP_INSTALL_PATH).toStdString().c_str());
int err = chdir(TMP_INSTALL_PATH);
assert(err == 0);
run(("git remote set-branches --add origin " + BRANCH_STR).c_str());
run(util::string_format("cp -rp %s %s", cache.c_str(), TMP_INSTALL_PATH).c_str());
run(util::string_format("cd %s && git remote set-branches --add origin %s", TMP_INSTALL_PATH, BRANCH_STR.c_str()).c_str());
updateProgress(10);
renderProgress(10);
proc.setWorkingDirectory(TMP_INSTALL_PATH);
proc.start("git", {"fetch", "--progress", "origin", BRANCH_STR.c_str()});
return executeGitCommand(util::string_format("cd %s && git fetch --progress origin %s 2>&1", TMP_INSTALL_PATH, BRANCH_STR.c_str()));
}
void Installer::readProgress() {
const QVector<QPair<QString, int>> stages = {
int executeGitCommand(const std::string &cmd) {
static const std::array stages = {
// prefix, weight in percentage
{"Receiving objects: ", 91},
{"Resolving deltas: ", 2},
{"Updating files: ", 7},
std::pair{"Receiving objects: ", 91},
std::pair{"Resolving deltas: ", 2},
std::pair{"Updating files: ", 7},
};
auto line = QString(proc.readAllStandardError());
FILE *pipe = popen(cmd.c_str(), "r");
if (!pipe) return -1;
int base = 0;
for (const QPair kv : stages) {
if (line.startsWith(kv.first)) {
auto perc = line.split(kv.first)[1].split("%")[0];
int p = base + int(perc.toFloat() / 100. * kv.second);
updateProgress(p);
break;
char buffer[512];
while (fgets(buffer, sizeof(buffer), pipe) != nullptr) {
std::string line(buffer);
int base = 0;
for (const auto &[text, weight] : stages) {
if (line.find(text) != std::string::npos) {
size_t percentPos = line.find("%");
if (percentPos != std::string::npos && percentPos >= 3) {
int percent = std::stoi(line.substr(percentPos - 3, 3));
int progress = base + int(percent / 100. * weight);
renderProgress(progress);
}
break;
}
base += weight;
}
base += kv.second;
}
return pclose(pipe);
}
void Installer::cloneFinished(int exitCode, QProcess::ExitStatus exitStatus) {
qDebug() << "git finished with " << exitCode;
void cloneFinished(int exitCode) {
LOGD("git finished with %d", exitCode);
assert(exitCode == 0);
updateProgress(100);
renderProgress(100);
// ensure correct branch is checked out
int err = chdir(TMP_INSTALL_PATH);
@@ -203,13 +171,17 @@ void Installer::cloneFinished(int exitCode, QProcess::ExitStatus exitStatus) {
run("mv /data/continue.sh.new " CONTINUE_PATH);
// wait for the installed software's UI to take over
QTimer::singleShot(60 * 1000, &QCoreApplication::quit);
util::sleep_for(60 * 1000);
}
int main(int argc, char *argv[]) {
initApp(argc, argv);
QApplication a(argc, argv);
Installer installer;
setMainWindow(&installer);
return a.exec();
InitWindow(2160, 1080, "Installer");
font = LoadFontFromMemory(".ttf", inter_ttf, inter_ttf_end - inter_ttf, 120, NULL, 0);
SetTextureFilter(font.texture, TEXTURE_FILTER_BILINEAR);
renderProgress(0);
int result = doInstall();
cloneFinished(result);
CloseWindow();
UnloadFont(font);
return 0;
}
-28
View File
@@ -1,28 +0,0 @@
#pragma once
#include <QLabel>
#include <QProcess>
#include <QProgressBar>
#include <QWidget>
class Installer : public QWidget {
Q_OBJECT
public:
explicit Installer(QWidget *parent = 0);
private slots:
void updateProgress(int percent);
void readProgress();
void cloneFinished(int exitCode, QProcess::ExitStatus exitStatus);
private:
QLabel *val;
QProgressBar *bar;
QProcess proc;
void doInstall();
void freshClone();
void cachedFetch(const QString &cache);
};
+3
View File
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1ef26a4099ef867f3493389379d882381a2491cdbfa41a086be8899a2154dcb3
size 26160
+1 -1
View File
@@ -190,7 +190,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
// Wi-Fi metered toggle
std::vector<QString> metered_button_texts{tr("default"), tr("metered"), tr("unmetered")};
wifiMeteredToggle = new MultiButtonControl(tr("Wi-Fi Network Metered"), tr("Prevent large data uploads when on a metered Wi-FI connection"), "", metered_button_texts);
wifiMeteredToggle = new MultiButtonControl(tr("Wi-Fi Network Metered"), tr("Prevent large data uploads when on a metered Wi-Fi connection"), "", metered_button_texts);
QObject::connect(wifiMeteredToggle, &MultiButtonControl::buttonClicked, [=](int id) {
wifiMeteredToggle->setEnabled(false);
MeteredType metered = MeteredType::UNKNOWN;
+40 -11
View File
@@ -17,31 +17,35 @@
#include "selfdrive/ui/qt/offroad/firehose.h"
TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
// param, title, desc, icon
std::vector<std::tuple<QString, QString, QString, QString>> toggle_defs{
// param, title, desc, icon, restart needed
std::vector<std::tuple<QString, QString, QString, QString, bool>> toggle_defs{
{
"OpenpilotEnabledToggle",
tr("Enable sunnypilot"),
tr("Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off."),
tr("Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature."),
"../assets/icons/chffr_wheel.png",
true,
},
{
"ExperimentalMode",
tr("Experimental Mode"),
"",
"../assets/icons/experimental_white.svg",
false,
},
{
"DynamicExperimentalControl",
tr("Enable Dynamic Experimental Control"),
tr("Enable toggle to allow the model to determine when to use sunnypilot ACC or sunnypilot End to End Longitudinal."),
"../assets/offroad/icon_blank.png",
false,
},
{
"DisengageOnAccelerator",
tr("Disengage on Accelerator Pedal"),
tr("When enabled, pressing the accelerator pedal will disengage sunnypilot."),
"../assets/icons/disengage_on_accelerator.svg",
false,
},
{
"EnableSpeedLimitControl",
@@ -84,24 +88,28 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
tr("Enable Lane Departure Warnings"),
tr("Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31 mph (50 km/h)."),
"../assets/icons/warning.png",
false,
},
{
"AlwaysOnDM",
tr("Always-On Driver Monitoring"),
tr("Enable driver monitoring even when sunnypilot is not engaged."),
"../assets/icons/monitoring.png",
false,
},
{
"RecordFront",
tr("Record and Upload Driver Camera"),
tr("Upload data from the driver facing camera and help improve the driver monitoring algorithm."),
"../assets/icons/monitoring.png",
true,
},
{
"IsMetric",
tr("Use Metric System"),
tr("Display speed in km/h instead of mph."),
"../assets/icons/metric.png",
false,
},
};
@@ -117,12 +125,24 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
// set up uiState update for personality setting
QObject::connect(uiState(), &UIState::uiUpdate, this, &TogglesPanel::updateState);
for (auto &[param, title, desc, icon] : toggle_defs) {
for (auto &[param, title, desc, icon, needs_restart] : toggle_defs) {
auto toggle = new ParamControl(param, title, desc, icon, this);
bool locked = params.getBool((param + "Lock").toStdString());
toggle->setEnabled(!locked);
if (needs_restart && !locked) {
toggle->setDescription(toggle->getDescription() + tr(" Changing this setting will restart openpilot if the car is powered on."));
QObject::connect(uiState(), &UIState::engagedChanged, [toggle](bool engaged) {
toggle->setEnabled(!engaged);
});
QObject::connect(toggle, &ParamControl::toggleFlipped, [=](bool state) {
params.putBool("OnroadCycleRequested", true);
});
}
addItem(toggle);
toggles[param.toStdString()] = toggle;
@@ -241,12 +261,20 @@ DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) {
auto resetCalibBtn = new ButtonControl(tr("Reset Calibration"), tr("RESET"), "");
connect(resetCalibBtn, &ButtonControl::showDescriptionEvent, this, &DevicePanel::updateCalibDescription);
connect(resetCalibBtn, &ButtonControl::clicked, [&]() {
if (ConfirmationDialog::confirm(tr("Are you sure you want to reset calibration?"), tr("Reset"), this)) {
params.remove("CalibrationParams");
params.remove("LiveTorqueParameters");
params.remove("LiveParameters");
params.remove("LiveParametersV2");
params.remove("LiveDelay");
if (!uiState()->engaged()) {
if (ConfirmationDialog::confirm(tr("Are you sure you want to reset calibration?"), tr("Reset"), this)) {
// Check engaged again in case it changed while the dialog was open
if (!uiState()->engaged()) {
params.remove("CalibrationParams");
params.remove("LiveTorqueParameters");
params.remove("LiveParameters");
params.remove("LiveParametersV2");
params.remove("LiveDelay");
params.putBool("OnroadCycleRequested", true);
}
}
} else {
ConfirmationDialog::alert(tr("Disengage to Reset Calibration"), this);
}
});
addItem(resetCalibBtn);
@@ -285,7 +313,7 @@ DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) {
QObject::connect(uiState(), &UIState::offroadTransition, [=](bool offroad) {
for (auto btn : findChildren<ButtonControl *>()) {
if (btn != pair_device) {
if (btn != pair_device && btn != resetCalibBtn) {
btn->setEnabled(offroad);
}
}
@@ -341,6 +369,7 @@ void DevicePanel::updateCalibDescription() {
qInfo() << "invalid CalibrationParams";
}
}
desc += tr(" Resetting calibration will restart openpilot if the car is powered on.");
qobject_cast<ButtonControl *>(sender())->setDescription(desc);
}
@@ -9,7 +9,9 @@
#ifdef SUNNYPILOT
#include "selfdrive/ui/sunnypilot/qt/onroad/buttons.h"
#include "selfdrive/ui/sunnypilot/qt/onroad/hud.h"
#include "selfdrive/ui/sunnypilot/qt/onroad/model.h"
#define ExperimentalButton ExperimentalButtonSP
#define ModelRenderer ModelRendererSP
#else
#include "selfdrive/ui/qt/onroad/buttons.h"
#include "selfdrive/ui/qt/onroad/hud.h"
+1 -14
View File
@@ -1,18 +1,5 @@
#include "selfdrive/ui/qt/onroad/model.h"
constexpr int CLIP_MARGIN = 500;
constexpr float MIN_DRAW_DISTANCE = 10.0;
constexpr float MAX_DRAW_DISTANCE = 100.0;
static int get_path_length_idx(const cereal::XYZTData::Reader &line, const float path_height) {
const auto &line_x = line.getX();
int max_idx = 0;
for (int i = 1; i < line_x.size() && line_x[i] <= path_height; ++i) {
max_idx = i;
}
return max_idx;
}
void ModelRenderer::draw(QPainter &painter, const QRect &surface_rect) {
auto *s = uiState();
auto &sm = *(s->sm);
@@ -35,7 +22,7 @@ void ModelRenderer::draw(QPainter &painter, const QRect &surface_rect) {
update_model(model, lead_one);
drawLaneLines(painter);
drawPath(painter, model, surface_rect.height());
drawPath(painter, model, surface_rect);
if (longitudinal_control && sm.alive("radarState")) {
update_leads(radar_state, model.getPosition());
+20 -2
View File
@@ -9,21 +9,39 @@
#include "selfdrive/ui/ui.h"
#endif
constexpr int CLIP_MARGIN = 500;
constexpr float MIN_DRAW_DISTANCE = 10.0;
constexpr float MAX_DRAW_DISTANCE = 100.0;
inline int get_path_length_idx(const cereal::XYZTData::Reader &line, const float path_height) {
const auto &line_x = line.getX();
int max_idx = 0;
for (int i = 1; i < line_x.size() && line_x[i] <= path_height; ++i) {
max_idx = i;
}
return max_idx;
}
class ModelRenderer {
public:
virtual ~ModelRenderer() = default;
ModelRenderer() {}
void setTransform(const Eigen::Matrix3f &transform) { car_space_transform = transform; }
void draw(QPainter &painter, const QRect &surface_rect);
private:
protected:
bool mapToScreen(float in_x, float in_y, float in_z, QPointF *out);
void mapLineToPolygon(const cereal::XYZTData::Reader &line, float y_off, float z_off,
QPolygonF *pvd, int max_idx, bool allow_invert = true);
void drawLead(QPainter &painter, const cereal::RadarState::LeadData::Reader &lead_data, const QPointF &vd, const QRect &surface_rect);
void update_leads(const cereal::RadarState::Reader &radar_state, const cereal::XYZTData::Reader &line);
void update_model(const cereal::ModelDataV2::Reader &model, const cereal::RadarState::LeadData::Reader &lead);
virtual void update_model(const cereal::ModelDataV2::Reader &model, const cereal::RadarState::LeadData::Reader &lead);
void drawLaneLines(QPainter &painter);
void drawPath(QPainter &painter, const cereal::ModelDataV2::Reader &model, int height);
virtual void drawPath(QPainter &painter, const cereal::ModelDataV2::Reader &model, const QRect &surface_rect) {;
drawPath(painter, model, surface_rect.height());
}
void updatePathGradient(QLinearGradient &bg);
QColor blendColors(const QColor &start, const QColor &end, float t);
+1
View File
@@ -24,6 +24,7 @@ qt_src = [
"sunnypilot/qt/offroad/settings/lateral_panel.cc",
"sunnypilot/qt/offroad/settings/longitudinal_panel.cc",
"sunnypilot/qt/offroad/settings/max_time_offroad.cc",
"sunnypilot/qt/offroad/settings/models_panel.cc",
"sunnypilot/qt/offroad/settings/settings.cc",
"sunnypilot/qt/offroad/settings/software_panel.cc",
"sunnypilot/qt/offroad/settings/sunnylink_panel.cc",
@@ -0,0 +1,213 @@
/**
* Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
*
* This file is part of sunnypilot and is licensed under the MIT License.
* See the LICENSE.md file in the root directory for more details.
*/
#include <algorithm>
#include <QJsonDocument>
#include "common/model.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/models_panel.h"
#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h"
ModelsPanel::ModelsPanel(QWidget *parent) : QWidget(parent) {
QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout->setContentsMargins(50, 20, 50, 20);
ListWidgetSP *list = new ListWidgetSP(this);
ScrollViewSP *scroller = new ScrollViewSP(list, this);
main_layout->addWidget(scroller);
const auto current_model = GetActiveModelName();
currentModelLblBtn = new ButtonControlSP(tr("Current Model"), tr("SELECT"), current_model);
currentModelLblBtn->setValue(current_model);
connect(currentModelLblBtn, &ButtonControlSP::clicked, this, &ModelsPanel::handleCurrentModelLblBtnClicked);
connect(uiState(), &UIState::offroadTransition, [=](bool offroad) {
is_onroad = !offroad;
updateLabels();
});
connect(uiStateSP(), &UIStateSP::uiUpdate, this, &ModelsPanel::updateLabels);
list->addItem(currentModelLblBtn);
}
/**
* @brief Updates the UI with bundle download progress information
* Reads status from modelManagerSP cereal message and displays status for all models
*/
void ModelsPanel::handleBundleDownloadProgress() {
using DS = cereal::ModelManagerSP::DownloadStatus;
if (!model_manager.hasSelectedBundle() && !model_manager.hasActiveBundle()) {
currentModelLblBtn->setDescription(tr("No custom model selected!"));
return;
}
const bool showSelectedBundle = model_manager.hasSelectedBundle() && (isDownloading() || model_manager.getSelectedBundle().getStatus() == DS::FAILED);
const auto &bundle = showSelectedBundle ? model_manager.getSelectedBundle() : model_manager.getActiveBundle();
const auto &models = bundle.getModels();
download_status = bundle.getStatus();
const auto download_status_changed = prev_download_status != download_status;
QStringList status;
// Get status for each model type in order
for (const auto &model: models) {
QString typeName;
QString modelName = QString::fromStdString(bundle.getDisplayName());
switch (model.getType()) {
case cereal::ModelManagerSP::Model::Type::SUPERCOMBO:
typeName = tr("Driving");
break;
case cereal::ModelManagerSP::Model::Type::NAVIGATION:
typeName = tr("Navigation");
break;
case cereal::ModelManagerSP::Model::Type::VISION:
typeName = tr("Vision");
break;
case cereal::ModelManagerSP::Model::Type::POLICY:
typeName = tr("Policy");
break;
}
const auto &progress = model.getArtifact().getDownloadProgress();
QString line;
if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::DOWNLOADING) {
line = tr("Downloading %1 model [%2]... (%3%)").arg(typeName, modelName).arg(progress.getProgress(), 0, 'f', 2);
} else if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::DOWNLOADED) {
line = tr("%1 model [%2] %3").arg(typeName, modelName, download_status_changed ? tr("downloaded") : tr("ready"));
} else if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::CACHED) {
line = tr("%1 model [%2] %3").arg(typeName, modelName, download_status_changed ? tr("from cache") : tr("ready"));
} else if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::FAILED) {
line = tr("%1 model [%2] download failed").arg(typeName, modelName);
} else {
line = tr("%1 model [%2] pending...").arg(typeName, modelName);
}
status.append(line);
}
currentModelLblBtn->setDescription(status.join("\n"));
if (prev_download_status != download_status) {
switch (bundle.getStatus()) {
case cereal::ModelManagerSP::DownloadStatus::DOWNLOADING:
case cereal::ModelManagerSP::DownloadStatus::CACHED:
case cereal::ModelManagerSP::DownloadStatus::DOWNLOADED:
currentModelLblBtn->showDescription();
break;
case cereal::ModelManagerSP::DownloadStatus::FAILED:
default:
break;
}
}
prev_download_status = download_status;
}
/**
* @brief Gets the name of the currently selected model bundle
* @return Display name of the selected bundle or default model name
*/
QString ModelsPanel::GetActiveModelName() {
if (model_manager.hasActiveBundle()) {
return QString::fromStdString(model_manager.getActiveBundle().getDisplayName());
}
return DEFAULT_MODEL;
}
void ModelsPanel::updateModelManagerState() {
const SubMaster &sm = *(uiStateSP()->sm);
model_manager = sm["modelManagerSP"].getModelManagerSP();
}
/**
* @brief Handles the model bundle selection button click
* Displays available bundles, allows selection, and initiates download
*/
void ModelsPanel::handleCurrentModelLblBtnClicked() {
currentModelLblBtn->setEnabled(false);
currentModelLblBtn->setValue(tr("Fetching models..."));
// Create mapping of bundle indices to display names
QMap<uint32_t, QString> index_to_bundle;
const auto bundles = model_manager.getAvailableBundles();
for (const auto &bundle: bundles) {
index_to_bundle.insert(bundle.getIndex(), QString::fromStdString(bundle.getDisplayName()));
}
// Sort bundles by index in descending order
QStringList bundleNames;
// Add "Default" as the first option
bundleNames.append(tr("Use Default"));
auto indices = index_to_bundle.keys();
std::sort(indices.begin(), indices.end(), std::greater<uint32_t>());
for (const auto &index: indices) {
bundleNames.append(index_to_bundle[index]);
}
currentModelLblBtn->setValue(GetActiveModelName());
const QString selectedBundleName = MultiOptionDialog::getSelection(
tr("Select a Model"), bundleNames, GetActiveModelName(), this);
if (selectedBundleName.isEmpty() || !canContinueOnMeteredDialog()) {
return;
}
// Handle "Stock" selection differently
if (selectedBundleName == tr("Use Default")) {
params.remove("ModelManager_ActiveBundle");
currentModelLblBtn->setValue(tr("Default"));
showResetParamsDialog();
} else {
// Find selected bundle and initiate download
for (const auto &bundle: bundles) {
if (QString::fromStdString(bundle.getDisplayName()) == selectedBundleName) {
params.put("ModelManager_DownloadIndex", std::to_string(bundle.getIndex()));
if (bundle.getGeneration() != model_manager.getActiveBundle().getGeneration()) {
showResetParamsDialog();
}
break;
}
}
}
updateLabels();
}
/**
* @brief Updates the UI elements based on current state
*/
void ModelsPanel::updateLabels() {
if (!isVisible()) {
return;
}
updateModelManagerState();
handleBundleDownloadProgress();
currentModelLblBtn->setEnabled(!is_onroad && !isDownloading());
currentModelLblBtn->setValue(GetActiveModelName());
}
/**
* @brief Shows dialog prompting user to reset calibration after model download
*/
void ModelsPanel::showResetParamsDialog() {
const auto confirmMsg = QString("%1<br><br><b>%2</b><br><br><b>%3</b>")
.arg(tr("Model download has started in the background."))
.arg(tr("We STRONGLY suggest you to reset calibration."))
.arg(tr("Would you like to do that now?"));
const auto button_text = tr("Reset Calibration");
QString content("<body><h2 style=\"text-align: center;\">" + tr("Driving Model Selector") + "</h2><br>"
"<p style=\"text-align: center; margin: 0 128px; font-size: 50px;\">" + confirmMsg + "</p></body>");
if (showConfirmationDialog(content, button_text, false)) {
params.remove("CalibrationParams");
params.remove("LiveTorqueParameters");
}
}
@@ -0,0 +1,64 @@
/**
* Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
*
* This file is part of sunnypilot and is licensed under the MIT License.
* See the LICENSE.md file in the root directory for more details.
*/
#pragma once
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/settings.h"
class ModelsPanel : public QWidget {
Q_OBJECT
public:
explicit ModelsPanel(QWidget *parent = nullptr);
private:
QString GetActiveModelName();
void updateModelManagerState();
bool isDownloading() const {
if (!model_manager.hasSelectedBundle()) {
return false;
}
const auto &selected_bundle = model_manager.getSelectedBundle();
return selected_bundle.getStatus() == cereal::ModelManagerSP::DownloadStatus::DOWNLOADING;
}
// UI update related methods
void updateLabels();
void handleCurrentModelLblBtnClicked();
void handleBundleDownloadProgress();
void showResetParamsDialog();
cereal::ModelManagerSP::Reader model_manager;
cereal::ModelManagerSP::DownloadStatus download_status{};
cereal::ModelManagerSP::DownloadStatus prev_download_status{};
bool canContinueOnMeteredDialog() {
if (!is_metered) return true;
return showConfirmationDialog(QString(), QString(), is_metered);
}
inline bool showConfirmationDialog(const QString &message = QString(), const QString &confirmButtonText = QString(), const bool show_metered_warning = false) {
return showConfirmationDialog(this, message, confirmButtonText, show_metered_warning);
}
static inline bool showConfirmationDialog(QWidget *parent, const QString &message = QString(), const QString &confirmButtonText = QString(), const bool show_metered_warning = false) {
const QString warning_message = show_metered_warning ? tr("Warning: You are on a metered connection!") : QString();
const QString final_message = QString("%1%2").arg(!message.isEmpty() ? message + "\n" : QString(), warning_message);
const QString final_buttonText = !confirmButtonText.isEmpty() ? confirmButtonText : QString(tr("Continue") + " %1").arg(show_metered_warning ? tr("on Metered") : "");
return ConfirmationDialog(final_message, final_buttonText, tr("Cancel"), true, parent).exec();
}
bool is_metered{};
bool is_wifi{};
bool is_onroad = false;
ButtonControlSP *currentModelLblBtn;
Params params;
};
@@ -13,6 +13,7 @@
#include "selfdrive/ui/sunnypilot/qt/network/networking.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/device_panel.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/models_panel.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/software_panel.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/sunnylink_panel.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/lateral_panel.h"
@@ -79,6 +80,7 @@ SettingsWindowSP::SettingsWindowSP(QWidget *parent) : SettingsWindow(parent) {
PanelInfo(" " + tr("sunnylink"), new SunnylinkPanel(this), "../assets/icons/wifi_strength_full.svg"),
PanelInfo(" " + tr("Toggles"), toggles, "../../sunnypilot/selfdrive/assets/offroad/icon_toggle.png"),
PanelInfo(" " + tr("Software"), new SoftwarePanelSP(this), "../../sunnypilot/selfdrive/assets/offroad/icon_software.png"),
PanelInfo(" " + tr("Models"), new ModelsPanel(this), "../../sunnypilot/selfdrive/assets/offroad/icon_models.png"),
PanelInfo(" " + tr("Steering"), new LateralPanel(this), "../../sunnypilot/selfdrive/assets/offroad/icon_lateral.png"),
PanelInfo(" " + tr("Cruise"), new LongitudinalPanel(this), "../assets/icons/speed_limit.png"),
PanelInfo(" " + tr("Trips"), new TripsPanel(this), "../../sunnypilot/selfdrive/assets/offroad/icon_trips.png"),
@@ -7,201 +7,45 @@
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/software_panel.h"
#include <algorithm>
#include <QJsonDocument>
#include "common/model.h"
/**
* @brief Constructs the software panel with model bundle selection functionality
* @param parent Parent widget
*/
SoftwarePanelSP::SoftwarePanelSP(QWidget *parent) : SoftwarePanel(parent) {
const auto current_model = GetActiveModelName();
currentModelLblBtn = new ButtonControlSP(tr("Current Model"), tr("SELECT"), current_model);
currentModelLblBtn->setValue(current_model);
connect(currentModelLblBtn, &ButtonControlSP::clicked, this, &SoftwarePanelSP::handleCurrentModelLblBtnClicked);
QObject::connect(uiStateSP(), &UIStateSP::uiUpdate, this, &SoftwarePanelSP::updateLabels);
AddWidgetAt(0, currentModelLblBtn);
}
/**
* @brief Updates the UI with bundle download progress information
* Reads status from modelManagerSP cereal message and displays status for all models
*/
void SoftwarePanelSP::handleBundleDownloadProgress() {
using DS = cereal::ModelManagerSP::DownloadStatus;
if (!model_manager.hasSelectedBundle() && !model_manager.hasActiveBundle()) {
currentModelLblBtn->setDescription(tr("No custom model selected!"));
return;
}
const bool showSelectedBundle = model_manager.hasSelectedBundle() && (isDownloading() || model_manager.getSelectedBundle().getStatus() == DS::FAILED);
const auto &bundle = showSelectedBundle ? model_manager.getSelectedBundle() : model_manager.getActiveBundle();
const auto &models = bundle.getModels();
download_status = bundle.getStatus();
const auto download_status_changed = prev_download_status != download_status;
QStringList status;
// Get status for each model type in order
for (const auto &model: models) {
QString typeName;
QString modelName = QString::fromStdString(bundle.getDisplayName());
switch (model.getType()) {
case cereal::ModelManagerSP::Model::Type::SUPERCOMBO:
typeName = tr("Driving");
break;
case cereal::ModelManagerSP::Model::Type::NAVIGATION:
typeName = tr("Navigation");
break;
case cereal::ModelManagerSP::Model::Type::VISION:
typeName = tr("Vision");
break;
case cereal::ModelManagerSP::Model::Type::POLICY:
typeName = tr("Policy");
break;
}
const auto &progress = model.getArtifact().getDownloadProgress();
QString line;
if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::DOWNLOADING) {
line = tr("Downloading %1 model [%2]... (%3%)").arg(typeName, modelName).arg(progress.getProgress(), 0, 'f', 2);
} else if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::DOWNLOADED) {
line = tr("%1 model [%2] %3").arg(typeName, modelName, download_status_changed ? tr("downloaded") : tr("ready"));
} else if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::CACHED) {
line = tr("%1 model [%2] %3").arg(typeName, modelName, download_status_changed ? tr("from cache") : tr("ready"));
} else if (progress.getStatus() == cereal::ModelManagerSP::DownloadStatus::FAILED) {
line = tr("%1 model [%2] download failed").arg(typeName, modelName);
} else {
line = tr("%1 model [%2] pending...").arg(typeName, modelName);
}
status.append(line);
}
currentModelLblBtn->setDescription(status.join("\n"));
if (prev_download_status != download_status) {
switch (bundle.getStatus()) {
case cereal::ModelManagerSP::DownloadStatus::DOWNLOADING:
case cereal::ModelManagerSP::DownloadStatus::CACHED:
case cereal::ModelManagerSP::DownloadStatus::DOWNLOADED:
currentModelLblBtn->showDescription();
break;
case cereal::ModelManagerSP::DownloadStatus::FAILED:
default:
break;
}
}
prev_download_status = download_status;
}
/**
* @brief Gets the name of the currently selected model bundle
* @return Display name of the selected bundle or default model name
*/
QString SoftwarePanelSP::GetActiveModelName() {
if (model_manager.hasActiveBundle()) {
return QString::fromStdString(model_manager.getActiveBundle().getDisplayName());
}
return DEFAULT_MODEL;
}
void SoftwarePanelSP::updateModelManagerState() {
const SubMaster &sm = *(uiStateSP()->sm);
model_manager = sm["modelManagerSP"].getModelManagerSP();
}
/**
* @brief Handles the model bundle selection button click
* Displays available bundles, allows selection, and initiates download
*/
void SoftwarePanelSP::handleCurrentModelLblBtnClicked() {
currentModelLblBtn->setEnabled(false);
currentModelLblBtn->setValue(tr("Fetching models..."));
// Create mapping of bundle indices to display names
QMap<uint32_t, QString> index_to_bundle;
const auto bundles = model_manager.getAvailableBundles();
for (const auto &bundle: bundles) {
index_to_bundle.insert(bundle.getIndex(), QString::fromStdString(bundle.getDisplayName()));
}
// Sort bundles by index in descending order
QStringList bundleNames;
// Add "Default" as the first option
bundleNames.append(tr("Use Default"));
auto indices = index_to_bundle.keys();
std::sort(indices.begin(), indices.end(), std::greater<uint32_t>());
for (const auto &index: indices) {
bundleNames.append(index_to_bundle[index]);
}
currentModelLblBtn->setValue(GetActiveModelName());
const QString selectedBundleName = MultiOptionDialog::getSelection(
tr("Select a Model"), bundleNames, GetActiveModelName(), this);
if (selectedBundleName.isEmpty() || !canContinueOnMeteredDialog()) {
return;
}
// Handle "Stock" selection differently
if (selectedBundleName == tr("Use Default")) {
params.remove("ModelManager_ActiveBundle");
currentModelLblBtn->setValue(tr("Default"));
showResetParamsDialog();
} else {
// Find selected bundle and initiate download
for (const auto &bundle: bundles) {
if (QString::fromStdString(bundle.getDisplayName()) == selectedBundleName) {
params.put("ModelManager_DownloadIndex", std::to_string(bundle.getIndex()));
if (bundle.getGeneration() != model_manager.getActiveBundle().getGeneration()) {
showResetParamsDialog();
}
break;
// branch selector
QObject::disconnect(targetBranchBtn, nullptr, nullptr, nullptr);
connect(targetBranchBtn, &ButtonControlSP::clicked, [=]() {
InputDialog d(tr("Search Branch"), this, tr("Enter search keywords, or leave blank to list all branches."), false);
d.setMinLength(0);
const int ret = d.exec();
if (ret) {
searchBranches(d.text());
}
}
}
updateLabels();
});
}
/**
* @brief Updates the UI elements based on current state
* @brief Searches for available branches based on a query string, presents the results in a dialog,
* and updates the target branch if a selection is made.
*
* This function filters the list of branches based on the provided query, and displays the filtered branches in a selection dialog.
* If a branch is selected, the "UpdaterTargetBranch" parameter is updated and a check for updates is triggered.
* If no branches are found matching the query, an alert dialog is displayed.
*
* @param query The search query string.
*/
void SoftwarePanelSP::updateLabels() {
if (!isVisible()) {
void SoftwarePanelSP::searchBranches(const QString &query) {
QStringList branches = QString::fromStdString(params.get("UpdaterAvailableBranches")).split(",");
QStringList results = searchFromList(query, branches);
results.sort();
if (results.isEmpty()) {
ConfirmationDialog::alert(tr("No branches found for keywords: %1").arg(query), this);
return;
}
updateModelManagerState();
handleBundleDownloadProgress();
currentModelLblBtn->setEnabled(!is_onroad && !isDownloading());
currentModelLblBtn->setValue(GetActiveModelName());
QString selected_branch = MultiOptionDialog::getSelection(tr("Select a branch"), results, "", this);
SoftwarePanel::updateLabels();
}
/**
* @brief Shows dialog prompting user to reset calibration after model download
*/
void SoftwarePanelSP::showResetParamsDialog() {
const auto confirmMsg = QString("%1<br><br><b>%2</b><br><br><b>%3</b>")
.arg(tr("Model download has started in the background."))
.arg(tr("We STRONGLY suggest you to reset calibration."))
.arg(tr("Would you like to do that now?"));
const auto button_text = tr("Reset Calibration");
QString content("<body><h2 style=\"text-align: center;\">" + tr("Driving Model Selector") + "</h2><br>"
"<p style=\"text-align: center; margin: 0 128px; font-size: 50px;\">" + confirmMsg + "</p></body>");
if (showConfirmationDialog(content, button_text, false)) {
params.remove("CalibrationParams");
params.remove("LiveTorqueParameters");
if (!selected_branch.isEmpty()) {
params.put("UpdaterTargetBranch", selected_branch.toStdString());
targetBranchBtn->setValue(selected_branch);
checkForUpdates();
}
}
@@ -7,8 +7,8 @@
#pragma once
#include <QJsonObject>
#include "selfdrive/ui/sunnypilot/ui.h"
#include "selfdrive/ui/sunnypilot/qt/util.h"
#include "selfdrive/ui/qt/offroad/settings.h"
class SoftwarePanelSP final : public SoftwarePanel {
@@ -18,45 +18,5 @@ public:
explicit SoftwarePanelSP(QWidget *parent = nullptr);
private:
QString GetActiveModelName();
void updateModelManagerState();
bool isDownloading() const {
if (!model_manager.hasSelectedBundle()) {
return false;
}
const auto &selected_bundle = model_manager.getSelectedBundle();
return selected_bundle.getStatus() == cereal::ModelManagerSP::DownloadStatus::DOWNLOADING;
}
// UI update related methods
void updateLabels() override;
void handleCurrentModelLblBtnClicked();
void handleBundleDownloadProgress();
void showResetParamsDialog();
cereal::ModelManagerSP::Reader model_manager;
cereal::ModelManagerSP::DownloadStatus download_status{};
cereal::ModelManagerSP::DownloadStatus prev_download_status{};
bool canContinueOnMeteredDialog() {
if (!is_metered) return true;
return showConfirmationDialog(QString(), QString(), is_metered);
}
inline bool showConfirmationDialog(const QString &message = QString(), const QString &confirmButtonText = QString(), const bool show_metered_warning = false) {
return showConfirmationDialog(this, message, confirmButtonText, show_metered_warning);
}
static inline bool showConfirmationDialog(QWidget *parent, const QString &message = QString(), const QString &confirmButtonText = QString(), const bool show_metered_warning = false) {
const QString warning_message = show_metered_warning ? tr("Warning: You are on a metered connection!") : QString();
const QString final_message = QString("%1%2").arg(!message.isEmpty() ? message + "\n" : QString(), warning_message);
const QString final_buttonText = !confirmButtonText.isEmpty() ? confirmButtonText : QString(tr("Continue") + " %1").arg(show_metered_warning ? tr("on Metered") : "");
return ConfirmationDialog(final_message, final_buttonText, tr("Cancel"), true, parent).exec();
}
bool is_metered{};
bool is_wifi{};
ButtonControlSP *currentModelLblBtn;
void searchBranches(const QString &query);
};
+1 -1
View File
@@ -11,5 +11,5 @@
class ModelRendererSP : public ModelRenderer {
public:
ModelRendererSP() {}
ModelRendererSP() = default;
};
+32
View File
@@ -78,3 +78,35 @@ QMap<QString, QVariantMap> loadPlatformList() {
return _platforms;
}
/**
* @brief Searches a list of strings for elements containing all search terms in a query.
*
* The search is case-insensitive and normalizes both the query and the list elements
* using Unicode KD normalization before comparison. Non-alphanumeric characters are
* removed from the search terms before comparison.
*
* @param query The search query string. Multiple words can be separated by spaces.
* @param list The source list of strings to search.
* @return A list of strings from the input list that contain all of the search terms.
*/
QStringList searchFromList(const QString &query, const QStringList &list) {
if (query.isEmpty()) {
return list;
}
QStringList search_terms = query.simplified().toLower().split(" ", QString::SkipEmptyParts);
QStringList search_results;
for (const QString &element : list) {
if (std::all_of(search_terms.begin(), search_terms.end(), [&](const QString &term) {
QString normalized_term = term.normalized(QString::NormalizationForm_KD).toLower();
normalized_term.remove(QRegularExpression("[^a-zA-Z0-9\\s]"));
QString normalized_element = element.normalized(QString::NormalizationForm_KD).toLower();
return normalized_element.contains(normalized_term, Qt::CaseInsensitive);
})) {
search_results << element;
}
}
return search_results;
}
+2
View File
@@ -12,9 +12,11 @@
#include <QMap>
#include <QPainter>
#include <QRegularExpression>
#include <QWidget>
QString getUserAgent(bool sunnylink = false);
std::optional<QString> getSunnylinkDongleId();
std::optional<QString> getParamIgnoringDefault(const std::string &param_name, const std::string &default_value);
QMap<QString, QVariantMap> loadPlatformList();
QStringList searchFromList(const QString &query, const QStringList &list);
+5
View File
@@ -20,6 +20,11 @@ class UIStateSP : public UIState {
public:
UIStateSP(QObject *parent = 0);
void updateStatus() override;
inline bool engaged() const override {
return scene.started && (
(*sm)["selfdriveState"].getSelfdriveState().getEnabled() || (*sm)["selfdriveStateSP"].getSelfdriveStateSP().getMads().getEnabled()
);
}
void setSunnylinkRoles(const std::vector<RoleModel> &roles);
void setSunnylinkDeviceUsers(const std::vector<UserModel> &users);
+12 -4
View File
@@ -26,7 +26,7 @@ from openpilot.tools.lib.framereader import FrameReader
from openpilot.tools.lib.route import Route
from openpilot.tools.lib.cache import DEFAULT_CACHE_DIR
UI_DELAY = 0.1 # may be slower on CI?
UI_DELAY = 0.5 # may be slower on CI?
TEST_ROUTE = "a2a0ccea32023010|2023-07-27--13-01-19"
STREAMS: list[tuple[VisionStreamType, CameraConfig, bytes]] = []
@@ -213,6 +213,12 @@ def setup_settings_sunnylink_sponsor_button(click, pm: PubMaster, scroll=None):
click(1967, 225)
time.sleep(UI_DELAY)
def setup_settings_models(click, pm: PubMaster, scroll=None):
setup_settings_device(click, pm)
click(278, 852)
time.sleep(UI_DELAY)
def setup_settings_steering(click, pm: PubMaster, scroll=None):
CP = car.CarParams()
CP.carFingerprint = "HONDA_CIVIC"
@@ -223,25 +229,26 @@ def setup_settings_steering(click, pm: PubMaster, scroll=None):
Params().put("CarParamsSPPersistent", CP_SP.to_bytes())
setup_settings_device(click, pm)
click(278, 852)
click(278, 962)
time.sleep(UI_DELAY)
def setup_settings_steering_mads(click, pm: PubMaster, scroll=None):
Params().put_bool("Mads", True)
setup_settings_device(click, pm)
click(278, 852)
click(278, 962)
click(970, 250)
time.sleep(UI_DELAY)
def setup_settings_steering_alc(click, pm: PubMaster, scroll=None):
setup_settings_device(click, pm)
click(278, 852)
click(278, 962)
click(970, 534)
time.sleep(UI_DELAY)
def setup_settings_driving(click, pm: PubMaster, scroll=None):
setup_settings_device(click, pm)
scroll(-1, 278, 962)
click(278, 962)
time.sleep(UI_DELAY)
@@ -295,6 +302,7 @@ CASES = {
CASES.update({
"settings_sunnylink": setup_settings_sunnylink,
"settings_sunnylink_sponsor_button": setup_settings_sunnylink_sponsor_button,
"settings_models": setup_settings_models,
"settings_steering": setup_settings_steering,
"settings_steering_mads": setup_settings_steering_mads,
"settings_steering_alc": setup_settings_steering_alc,
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation>محدود بالاتصال الخلوي</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation>منع تحميل البيانات الكبيرة عندما يكون الاتصال محدوداً</translation>
</message>
<message>
<source>Hidden Network</source>
<translation>شبكة مخفية</translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation>من أجل &quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation>وضع المناورة الطولية</translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>التحكم الطولي sunnypilot (ألفا)</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>تحذير: التحكم الطولي في sunnypilot في المرحلة ألفا لهذه السيارة، وسيقوم بتعطيل مكابح الطوارئ الآلية (AEB).</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation>في هذه السيارة يعمل sunnypilot افتراضياً بالشكل المدمج في التحكم التكيفي في السرعة بدلاً من التحكم الطولي. قم بتمكين هذا الخيار من أجل الانتقال إلى التحكم الطولي. يوصى بتمكين الوضع التجريبي عند استخدام وضع التحكم الطولي ألفا من sunnypilot.</translation>
</message>
<message>
<source>Enable ADB</source>
<translation>تمكين ADB</translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation>أداة ADB (Android Debug Bridge) تسمح بالاتصال بجهازك عبر USB أو عبر الشبكة. راجع هذا الرابط: https://docs.comma.ai/how-to/connect-to-comma لمزيد من المعلومات.</translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation>إقران</translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -530,6 +550,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation>MAX</translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -548,13 +611,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation>جارٍ التثبيت...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -588,6 +644,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -615,10 +687,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -628,12 +696,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">اختيار</translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">إعادة ضبط المعايرة</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">متابعة</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">إلغاء</translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -925,6 +1160,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -970,14 +1229,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation>إعادة التشغيل</translation>
</message>
<message>
<source>Exit</source>
<translation>إغلاق</translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1138,6 +1389,14 @@ This may take up to a minute.</source>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1429,108 +1688,20 @@ This may take up to a minute.</source>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">اختيار</translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">إعادة ضبط المعايرة</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">متابعة</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">إلغاء</translation>
<source>Select a branch</source>
<translation type="unfinished">اختر فرعاً</translation>
</message>
</context>
<context>
@@ -1834,10 +2005,6 @@ This may take up to a minute.</source>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation>الوضع التجريبي غير متوفر حالياً في هذه السيارة نظراً لاستخدام رصيد التحكم التكيفي بالسرعة من أجل التحكم الطولي.</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>قد يتم الحصول على التحكم الطولي في sunnypilot في عمليات التحديث المستقبلية.</translation>
</message>
<message>
<source>An alpha version of sunnypilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
<translation>يمكن اختبار نسخة ألفا من التحكم الطولي من sunnypilot، مع الوضع التجريبي، لكن على الفروع غير المطلقة.</translation>
@@ -1875,8 +2042,16 @@ This may take up to a minute.</source>
<translation>تمكين sunnypilot</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>استخدم نظام sunnypilot من أجل الضبط التكيفي للسرعة والحفاظ على مساعدة السائق للبقاء في المسار. انتباهك مطلوب في جميع الأوقات مع استخدام هذه الميزة. يعمل هذا التغيير في الإعدادات عند إيقاف تشغيل السيارة.</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
File diff suppressed because it is too large Load Diff
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation>Plano de datos limitado</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation>Evitar grandes descargas de datos cuando tenga una conexión limitada</translation>
</message>
<message>
<source>Hidden Network</source>
<translation>Red Oculta</translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation>para &quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation>Modo de maniobra longitudinal</translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>Control longitudinal de sunnypilot (fase experimental)</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>AVISO: el control longitudinal de sunnypilot está en fase experimental para este automóvil y desactivará el Frenado Automático de Emergencia (AEB).</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation>En este automóvil, sunnypilot se configura de manera predeterminada con el Autocrucero Adaptativo (ACC) incorporado en el automóvil en lugar del control longitudinal de sunnypilot. Habilita esta opción para cambiar al control longitudinal de sunnypilot. Se recomienda activar el modo experimental al habilitar el control longitudinal de sunnypilot (aún en fase experimental).</translation>
</message>
<message>
<source>Enable ADB</source>
<translation type="unfinished"></translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Disengage to Power Off</source>
<translation>Desactivar para apagar</translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -526,6 +546,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation>MAX</translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -540,13 +603,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation>Instalando...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -580,6 +636,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -607,10 +679,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -620,12 +688,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SELECCIONAR</translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Formatear Calibración</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Continuar</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -917,6 +1152,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -962,14 +1221,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation>Reiniciar</translation>
</message>
<message>
<source>Exit</source>
<translation>Salir</translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1118,6 +1369,14 @@ Esto puede tardar un minuto.</translation>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1409,108 +1668,20 @@ Esto puede tardar un minuto.</translation>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SELECCIONAR</translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Formatear Calibración</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Continuar</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
<source>Select a branch</source>
<translation type="unfinished">Selecione una rama</translation>
</message>
</context>
<context>
@@ -1830,10 +2001,6 @@ Esto puede tardar un minuto.</translation>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation>El modo Experimental no está disponible actualmente para este auto, ya que el ACC default del auto está siendo usado para el control longitudinal.</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>El control longitudinal de sunnypilot podrá llegar en futuras actualizaciones.</translation>
</message>
<message>
<source>An alpha version of sunnypilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
<translation>Se puede probar una versión experimental del control longitudinal sunnypilot, junto con el modo Experimental, en ramas no liberadas.</translation>
@@ -1855,8 +2022,16 @@ Esto puede tardar un minuto.</translation>
<translation>Activar sunnypilot</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>Utilice el sistema sunnypilot para acceder a un autocrucero adaptativo y asistencia al conductor para mantenerse en el carril. Se requiere su atención en todo momento para utilizar esta función. Cambiar esta configuración solo tendrá efecto con el auto apagado.</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation>Connexion cellulaire limitée</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation>Éviter les transferts de données importants sur une connexion limitée</translation>
</message>
<message>
<source>Hidden Network</source>
<translation>Réseau Caché</translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation>pour &quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation>Mode manœuvre longitudinale</translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>Contrôle longitudinal sunnypilot (Alpha)</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>ATTENTION : le contrôle longitudinal sunnypilot est en alpha pour cette voiture et désactivera le freinage d&apos;urgence automatique (AEB).</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation>Sur cette voiture, sunnypilot utilise par défaut le régulateur de vitesse adaptatif intégré à la voiture plutôt que le contrôle longitudinal d&apos;sunnypilot. Activez ceci pour passer au contrôle longitudinal sunnypilot. Il est recommandé d&apos;activer le mode expérimental lors de l&apos;activation du contrôle longitudinal sunnypilot alpha.</translation>
</message>
<message>
<source>Enable ADB</source>
<translation type="unfinished"></translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation>ASSOCIER</translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -526,6 +546,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation>MAX</translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -540,13 +603,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation>Installation...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -580,6 +636,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -607,10 +679,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -620,12 +688,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SÉLECTIONNER</translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Réinitialiser la calibration</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Continuer</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Annuler</translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -917,6 +1152,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -962,14 +1221,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation>Redémarrer</translation>
</message>
<message>
<source>Exit</source>
<translation>Quitter</translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1118,6 +1369,14 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1409,108 +1668,20 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SÉLECTIONNER</translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Réinitialiser la calibration</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Continuer</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Annuler</translation>
<source>Select a branch</source>
<translation type="unfinished">Sélectionner une branche</translation>
</message>
</context>
<context>
@@ -1810,10 +1981,6 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation>Le mode expérimental est actuellement indisponible pour cette voiture car le régulateur de vitesse adaptatif d&apos;origine est utilisé pour le contrôle longitudinal.</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>Le contrôle longitudinal sunnypilot pourrait être disponible dans une future mise à jour.</translation>
</message>
<message>
<source>An alpha version of sunnypilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
<translation>Une version alpha du contrôle longitudinal sunnypilot peut être testée, avec le mode expérimental, sur des branches non publiées.</translation>
@@ -1855,8 +2022,16 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<translation>Activer sunnypilot</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>Utilisez le système sunnypilot pour le régulateur de vitesse adaptatif et l&apos;assistance au maintien de voie. Votre attention est requise en permanence pour utiliser cette fonctionnalité. La modification de ce paramètre prend effet lorsque la voiture est éteinte.</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation></translation>
</message>
<message>
<source>Hidden Network</source>
<translation></translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation>[%1]</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation></translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>sunnypilotアクセル制御(Alpha)</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>sunnypilotのアクセル制御はアルファ版であり(AEB)</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation>sunnypilotは車両内蔵のACC()使sunnypilotのアクセル制御は無効化されていますsunnypilotに切り替えるにはこの設定を有効にしてくださいExperimentalモードを推奨します</translation>
</message>
<message>
<source>Enable ADB</source>
<translation>ADBを有効にする</translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation>ADBAndroid Debug BridgeUSBまたはネットワーク経由でデバイスに接続できますhttps://docs.comma.ai/how-to/connect-to-comma を参照してください。</translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation>OK</translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -525,6 +545,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation></translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -538,13 +601,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation>...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -578,6 +634,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -605,10 +677,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -618,12 +686,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -915,6 +1150,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -960,14 +1219,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<source>Exit</source>
<translation></translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1113,6 +1364,14 @@ This may take up to a minute.</source>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1404,108 +1663,20 @@ This may take up to a minute.</source>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1809,10 +1980,6 @@ This may take up to a minute.</source>
<source>End-to-End Longitudinal Control</source>
<translation>End-to-Endアクセル制御</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>sunnypilotのアクセル制御は将来のアップデートで利用できる可能性があります</translation>
</message>
<message>
<source>An alpha version of sunnypilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
<translation>sunnypilotのアルファ版アクセル制御はExperimentalモードと共に非リリースのブランチでテストすることができます</translation>
@@ -1850,8 +2017,16 @@ This may take up to a minute.</source>
<translation>sunnypilot </translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>sunnypilotによるアダプティブクルーズコントロールとレーンキープアシストを利用します</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation> </translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation> </translation>
</message>
<message>
<source>Hidden Network</source>
<translation> </translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation>&quot;%1&quot; </translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation> </translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>sunnypilot ()</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>경고: sunnypilot (AEB) .</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation> sunnypilot은 sunnypilot ACC로 . sunnypilot . sunnypilot .</translation>
</message>
<message>
<source>Enable ADB</source>
<translation>ADB </translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation>ADB ( 릿) USB . https://docs.comma.ai/how-to/connect-to-comma를 참조하세요.</translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation></translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -525,6 +545,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation>MAX</translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -538,13 +601,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation> ...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -578,6 +634,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -605,10 +677,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -618,12 +686,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -915,6 +1150,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -960,14 +1219,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<source>Exit</source>
<translation></translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1113,6 +1364,14 @@ This may take up to a minute.</source>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1404,108 +1663,20 @@ This may take up to a minute.</source>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
<source>Select a branch</source>
<translation type="unfinished"> </translation>
</message>
</context>
<context>
@@ -1789,10 +1960,6 @@ This may take up to a minute.</source>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation> ACC로 .</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>sunnypilot .</translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1850,8 +2017,16 @@ This may take up to a minute.</source>
<translation>sunnypilot </translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation> sunnypilot . . .</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation>Plano de Dados Limitado</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation>Evite grandes uploads de dados quando estiver em uma conexão limitada</translation>
</message>
<message>
<source>Hidden Network</source>
<translation>Rede Oculta</translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation>para &quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation>Modo Longitudinal Maneuver</translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>Controle Longitudinal sunnypilot (Embrionário)</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>AVISO: o controle longitudinal sunnypilot está em estado embrionário para este carro e desativará a Frenagem Automática de Emergência (AEB).</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation>Neste carro, o sunnypilot tem como padrão o ACC embutido do carro em vez do controle longitudinal do sunnypilot. Habilite isso para alternar para o controle longitudinal sunnypilot. Recomenda-se ativar o modo Experimental ao ativar o embrionário controle longitudinal sunnypilot.</translation>
</message>
<message>
<source>Enable ADB</source>
<translation>Habilitar ADB</translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation>ADB (Android Debug Bridge) permite conectar ao seu dispositivo por meio do USB ou através da rede. Veja https://docs.comma.ai/how-to/connect-to-comma para maiores informações.</translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation>PAREAR</translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -526,6 +546,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation>LIMITE</translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -540,13 +603,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation>Instalando...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -580,6 +636,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -607,10 +679,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -620,12 +688,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SELECIONE</translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Reinicializar Calibragem</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Continuar</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -917,6 +1152,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -962,14 +1221,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation>Reiniciar</translation>
</message>
<message>
<source>Exit</source>
<translation>Sair</translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1118,6 +1369,14 @@ Isso pode levar até um minuto.</translation>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1409,108 +1668,20 @@ Isso pode levar até um minuto.</translation>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SELECIONE</translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Reinicializar Calibragem</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Continuar</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
<source>Select a branch</source>
<translation type="unfinished">Selecione uma branch</translation>
</message>
</context>
<context>
@@ -1794,10 +1965,6 @@ Isso pode levar até um minuto.</translation>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation>O modo Experimental está atualmente indisponível para este carro que o ACC original do carro é usado para controle longitudinal.</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>O controle longitudinal sunnypilot poderá vir em uma atualização futura.</translation>
</message>
<message>
<source>Aggressive</source>
<translation>Disputa</translation>
@@ -1855,8 +2022,16 @@ Isso pode levar até um minuto.</translation>
<translation>Ativar sunnypilot</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>Use o sistema sunnypilot para controle de cruzeiro adaptativo e assistência ao motorista de manutenção de faixa. Sua atenção é necessária o tempo todo para usar esse recurso. A alteração desta configuração tem efeito quando o carro é desligado.</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation></translation>
</message>
<message>
<source>Hidden Network</source>
<translation></translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation> &quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation type="unfinished">/ sunnypilot (Alpha)</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished">คำเตือน: การควบคุมการเร่ง/ sunnypilot alpha (AEB) </translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation type="unfinished"> sunnypilot / ACC sunnypilot sunnypilot / sunnypilot / alpha</translation>
</message>
<message>
<source>Enable ADB</source>
<translation type="unfinished"></translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation></translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -525,6 +545,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation></translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -538,13 +601,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation>...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -578,6 +634,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -605,10 +677,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -618,12 +686,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -915,6 +1150,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -960,14 +1219,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<source>Exit</source>
<translation></translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1113,6 +1364,14 @@ This may take up to a minute.</source>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1404,108 +1663,20 @@ This may take up to a minute.</source>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
<source>Select a branch</source>
<translation type="unfinished"> Branch</translation>
</message>
</context>
<context>
@@ -1789,10 +1960,6 @@ This may take up to a minute.</source>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation> /</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>/ sunnypilot </translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1850,8 +2017,16 @@ This may take up to a minute.</source>
<translation> sunnypilot</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation> sunnypilot </translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+320 -145
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hidden Network</source>
<translation type="unfinished"></translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation type="unfinished">için &quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable ADB</source>
<translation type="unfinished"></translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -525,6 +545,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation>MAX</translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -538,13 +601,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation>Yükleniyor...</translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -578,6 +634,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -605,10 +677,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -618,10 +686,177 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Kalibrasyonu sıfırla</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Devam et</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -914,6 +1149,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -959,14 +1218,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation>Yeniden başlat</translation>
</message>
<message>
<source>Exit</source>
<translation>Çık</translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1111,6 +1362,14 @@ This may take up to a minute.</source>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1402,107 +1661,19 @@ This may take up to a minute.</source>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">Kalibrasyonu sıfırla</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">Devam et</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1807,10 +1978,6 @@ This may take up to a minute.</source>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>An alpha version of sunnypilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
<translation type="unfinished"></translation>
@@ -1848,8 +2015,16 @@ This may take up to a minute.</source>
<translation>sunnypilot&apos;u aktifleştir</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>Ayarlanabilir hız sabitleyici ve şeritte kalma yardımı için sunnypilot sistemini kullanın. Bu özelliği kullanırken her zaman dikkatli olmanız gerekiyor. Bu ayarın değiştirilmesi için araç kapatılıp açılması gerekiyor.</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation>使</translation>
</message>
<message>
<source>Hidden Network</source>
<translation></translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation>&quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation></translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>sunnypilot纵向控制Alpha </translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation> sunnypilot Alpha版本使AEB</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation>sunnypilot 使ACC sunnypilot sunnypilot sunnypilot Alpha Experimental mode</translation>
</message>
<message>
<source>Enable ADB</source>
<translation> ADB</translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation>ADBAndroid调试桥接USB或网络连接到您的设备 [https://docs.comma.ai/how-to/connect-to-comma](https://docs.comma.ai/how-to/connect-to-comma)。</translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation></translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -525,6 +545,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation></translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -538,13 +601,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation></translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -578,6 +634,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -605,10 +677,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -618,12 +686,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -915,6 +1150,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -960,14 +1219,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<source>Exit</source>
<translation>退</translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1113,6 +1364,14 @@ This may take up to a minute.</source>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1404,108 +1663,20 @@ This may take up to a minute.</source>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1789,10 +1960,6 @@ This may take up to a minute.</source>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation>使ACC纵向控制使</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>sunnypilot纵向控制可能会在未来的更新中提供</translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1850,8 +2017,16 @@ This may take up to a minute.</source>
<translation>sunnypilot</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>使sunnypilot进行自适应巡航和车道保持辅助使</translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+321 -146
View File
@@ -62,10 +62,6 @@
<source>Cellular Metered</source>
<translation></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered connection</source>
<translation>使</translation>
</message>
<message>
<source>Hidden Network</source>
<translation></translation>
@@ -86,6 +82,30 @@
<source>for &quot;%1&quot;</source>
<translation> &quot;%1&quot;</translation>
</message>
<message>
<source>Prevent large data uploads when on a metered cellular connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>unmetered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wi-Fi Network Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Prevent large data uploads when on a metered Wi-Fi connection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutoLaneChangeTimer</name>
@@ -151,18 +171,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>Longitudinal Maneuver Mode</source>
<translation></translation>
</message>
<message>
<source>sunnypilot Longitudinal Control (Alpha)</source>
<translation>sunnypilot (Alpha )</translation>
</message>
<message>
<source>WARNING: sunnypilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation> sunnypilot Alpha 使AEB</translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of sunnypilot&apos;s longitudinal control. Enable this to switch to sunnypilot longitudinal control. Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha.</source>
<translation>sunnypilot 使ACC sunnypilot sunnypilot sunnypilot Alpha Experimental mode</translation>
</message>
<message>
<source>Enable ADB</source>
<translation> ADB</translation>
@@ -171,14 +179,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation>ADBAndroid 調 USB [https://docs.comma.ai/how-to/connect-to-comma](https://docs.comma.ai/how-to/connect-to-comma)。</translation>
</message>
<message>
<source>Hyundai: Enable Radar Tracks</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -199,6 +199,18 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On this car, sunnypilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -342,6 +354,14 @@ Please use caution when using this feature. Only use the blinker when traffic an
<source>PAIR</source>
<translation></translation>
</message>
<message>
<source>Disengage to Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanelSP</name>
@@ -525,6 +545,49 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation></translation>
</message>
</context>
<context>
<name>HyundaiSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom Longitudinal Tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature can only be used with openpilot longitudinal control enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable &quot;Always Offroad&quot; in Device panel, or turn vehicle off to select an option.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: Uses default tuning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dynamic: Adjusts acceleration limits based on current speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Predictive: Uses future trajectory data to anticipate needed adjustments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fine-tune your driving experience by adjusting acceleration smoothness with openpilot longitudinal control.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputDialog</name>
<message>
@@ -538,13 +601,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</translation>
</message>
</context>
<context>
<name>Installer</name>
<message>
<source>Installing...</source>
<translation></translation>
</message>
</context>
<context>
<name>LaneChangeSettings</name>
<message>
@@ -578,6 +634,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Customize Lane Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables independent engagements of Automatic Lane Centering (ALC) and Adaptive Cruise Control (ACC).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports all MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -605,10 +677,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Remain Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage</source>
<translation type="unfinished"></translation>
@@ -618,12 +686,179 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.
Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused when the brake pedal is manually pressed.</source>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to OFF, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This feature defaults to ON, and does not allow selection due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This platform only supports Disengage mode due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remain Active: ALC will remain active when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause: ALC will pause when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disengage: ALC will disengage when the brake pedal is pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaxTimeOffroad</name>
<message>
<source>Max Time Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device will automatically shutdown after set time once the engine is turned off.&lt;br/&gt;(30h is the default)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always On</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> (default)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModelsPanel</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -915,6 +1150,30 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
<source>Select a vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unrecognized Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fingerprinted automatically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not fingerprinted or manually selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select vehicle to force fingerprint manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Colors represent fingerprint status:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimeAdWidget</name>
@@ -960,14 +1219,6 @@ Pause Steering: ALC will be paused when the brake pedal is manually pressed.</so
</context>
<context>
<name>QObject</name>
<message>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<source>Exit</source>
<translation></translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
@@ -1113,6 +1364,14 @@ This may take up to a minute.</source>
<source>Steering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Models</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cruise</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1404,108 +1663,20 @@ This may take up to a minute.</source>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<source>Search Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Enter search keywords, or leave blank to list all branches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving</source>
<source>No branches found for keywords: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metadata</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>We STRONGLY suggest you to reset calibration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1789,10 +1960,6 @@ This may take up to a minute.</source>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation>使ACC系統</translation>
</message>
<message>
<source>sunnypilot longitudinal control may come in a future update.</source>
<translation>sunnypilot </translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1850,8 +2017,16 @@ This may take up to a minute.</source>
<translation> sunnypilot</translation>
</message>
<message>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>使 sunnypilot </translation>
<source>Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Changing this setting will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+5
View File
@@ -91,6 +91,11 @@ void UIState::updateStatus() {
}
}
if (engaged() != engaged_prev) {
engaged_prev = engaged();
emit engagedChanged(engaged());
}
// Handle onroad/offroad transition
if (scene.started != started_prev || sm->frame == 1) {
if (scene.started) {
+3 -1
View File
@@ -72,7 +72,7 @@ class UIState : public QObject {
public:
UIState(QObject* parent = 0);
virtual void updateStatus();
inline bool engaged() const {
virtual inline bool engaged() const {
return scene.started && (*sm)["selfdriveState"].getSelfdriveState().getEnabled();
}
@@ -85,6 +85,7 @@ public:
signals:
void uiUpdate(const UIState &s);
void offroadTransition(bool offroad);
void engagedChanged(bool engaged);
protected slots:
virtual void update();
@@ -94,6 +95,7 @@ protected:
private:
bool started_prev = false;
bool engaged_prev = false;
};
#ifndef SUNNYPILOT