Compare commits

..

36 Commits

Author SHA1 Message Date
DevTekVE
74265e76ab dunno dunno... 2025-07-25 19:34:27 +02:00
DevTekVE
97f810e303 tweakx4 2025-07-25 18:35:03 +02:00
DevTekVE
427e42cd82 tweakx3 2025-07-25 18:29:27 +02:00
DevTekVE
42c433a39b tweakx2 2025-07-25 18:26:14 +02:00
DevTekVE
cf7d6eda4b tweak 2025-07-25 18:22:54 +02:00
DevTekVE
2e28cab9b8 refactor: consolidate model building steps into a single workflow 2025-07-25 18:09:26 +02:00
discountchubbs
75019229e9 maybe we could use a script instead that both build all
That both build all and sunnypilot-build-model reference
2025-07-25 07:29:47 -07:00
discountchubbs
5c4c91fd43 Revert "bc devtekve said. also, this is repetitive af"
This reverts commit 3a0c1562de.
2025-07-24 19:45:50 -07:00
discountchubbs
3a0c1562de bc devtekve said. also, this is repetitive af 2025-07-24 19:37:07 -07:00
discountchubbs
c38e644375 Update build-single-tinygrad-model.yaml 2025-07-24 18:35:24 -07:00
discountchubbs
a4c288d1c7 cleanup 2025-07-23 20:32:49 -07:00
discountchubbs
cb2c3f1909 try dynamic 2025-07-23 19:59:37 -07:00
discountchubbs
602597d291 No need to sleep 3 seconds, just send it 2025-07-23 19:07:15 -07:00
discountchubbs
3ec234d04b Update build-all-tinygrad-models.yaml 2025-07-23 13:24:02 -07:00
discountchubbs
a8e6f45270 Update build-all-tinygrad-models.yaml 2025-07-23 07:28:52 -07:00
discountchubbs
12fe42a22d Allow more dynamic short names
This should hopefully be future-proof for now.. It's robust enough to return the correct word-digit format (see example on how it generates from given display name below):

'Last Horizon V2 (November 22, 2024)' -> LHV2
'Alabama (November 25, 2024)' -> ALABAMA
'PlayStation (December 03, 2024)' -> PLAYSTAT
'Postal Service (December 09, 2024)' -> PS
'Null Pointer (December 13, 2024)' -> NP
'North America (December 16, 2024)' -> NA
'National Public Radio (December 18, 2024)' -> NPR
'Filet o Fish (March 7, 2025)' -> FOF
'Tomb Raider 2 (April 18, 2025)' -> TR2
'Tomb Raider 3 (April 22, 2025)' -> TR3
'Tomb Raider 4 (April 25, 2025)' -> TR4
'Tomb Raider 5 (April 25, 2025)' -> TR5
'Tomb Raider 6 (April 30, 2025)' -> TR6
'Tomb Raider 7 (May 07, 2025)' -> TR7
'Down to Ride (Revision: May 10, 2025)' -> DTR
'SP Vikander Model (May 16, 2025)' -> SPVM
'VFF Driving (May 15, 2025)' -> VFFD
'Secret Good Openpilot (May 16, 2025)' -> SGO
'Vegetarian Filet o Fish (May 29, 2025)' -> VFOF
'Down To Ride (Revision: May 30, 2025)' -> DTR
'Vegetarian Filet o Fish v2 (June 05, 2025)' -> VFOFV2
'Kerrygold Driving (June 08, 2025)' -> KD
'Tomb Raider 10 (June 16, 2025)' -> TR10
'Organic Kerrygold (June 17, 2025)' -> OK
'Liquid Crystal Driving (June 21, 2025)' -> LCD
'Vegetarian Filet o Fish v3 (June 21, 2025)' -> VFOFV3
'Vibe Model [Custom Model]' -> VMCM
'Tomb Raider 13 (June 27, 2025)' -> TR13
'Aggressive TR (June 28, 2025)' -> ATR
'Tomb Raider 14 (June 30, 2025)' -> TR14
'Cookiemonster Tomb Raider (July 02, 2025)' -> CTR
'Down to Ride (Revision: July 07, 2025)' -> DTR
'Simple Plan Driving (July 07, 2025)' -> SPD
'Down to Ride (Revision: July 08, 2025)' -> DTR
'Tomb Raider 15 (July 09, 2025)' -> TR15
'Tomb Raider 15 rev-2 (July 11, 2025)' -> TR15R2
'Le Tomb Raider 14 (July 14, 2025)' -> LTR14
'Le Tomb Raider 14h (July 17, 2025)' -> LTR14H
'Tomb Raider 16 (July 18, 2025)' -> TR16
'Tomb Raider 16v2 (July 21, 2025)' -> TR16V2
2025-07-23 07:28:24 -07:00
discountchubbs
139281e0fb Update build-all-tinygrad-models.yaml 2025-07-23 07:15:09 -07:00
discountchubbs
fcf7a9343c Update build-all-tinygrad-models.yaml 2025-07-23 07:14:41 -07:00
discountchubbs
05695bf8db Update build-all-tinygrad-models.yaml 2025-07-23 07:07:28 -07:00
discountchubbs
4a9185cb15 Update build-all-tinygrad-models.yaml 2025-07-23 07:01:42 -07:00
discountchubbs
838e16bf52 Update build-all-tinygrad-models.yaml 2025-07-23 06:57:37 -07:00
discountchubbs
2e0d1dc5a1 Update build-all-tinygrad-models.yaml 2025-07-23 06:46:19 -07:00
discountchubbs
6d24fe869b Update build-all-tinygrad-models.yaml 2025-07-23 06:43:11 -07:00
discountchubbs
23ab96246c Merge remote-tracking branch 'origin/sync-20250627-tinygrad' into sync-20250627-tinygrad 2025-07-22 21:09:08 -07:00
discountchubbs
d26838de09 Merge remote-tracking branch 'origin/master-new' into sync-20250627-tinygrad 2025-07-22 21:08:35 -07:00
James Vecellio-Grant
1fbbee65b2 Merge branch 'master-new' into sync-20250627-tinygrad 2025-07-22 21:07:43 -07:00
discountchubbs
de014108fe bump to 22Jul2025 2025-07-22 21:05:48 -07:00
discountchubbs
3be432d633 The "FillMe" placeholder caused an extra 10 seconds of work 2025-07-11 11:38:51 -07:00
discountchubbs
e251449d00 Model recompiled successfully, initiate "revert me after SP model compiled"
This reverts commit 95706eb688.
2025-07-10 20:31:16 -07:00
discountchubbs
95706eb688 revert me after SP model compiled 2025-07-10 20:13:17 -07:00
discountchubbs
096662799b Revert "bump tinygrad"
This reverts commit f479dfd502.
2025-07-10 20:11:02 -07:00
discountchubbs
f479dfd502 bump tinygrad 2025-07-10 20:08:46 -07:00
discountchubbs
22eefbd0f7 Reformat metadata generator to match driving_models.json 2025-07-10 12:57:07 -07:00
discountchubbs
a044347f4e bump tinygrad_repo 2025-07-10 07:23:58 -07:00
James Vecellio-Grant
eca1d0888f Merge branch 'master-new' into sync-20250627-tinygrad 2025-07-10 07:20:12 -07:00
DevTekVE
264c0fe446 Tinygrad bump from sync-20250627 2025-06-27 17:21:48 +02:00
51 changed files with 1853 additions and 7223 deletions

View File

@@ -1,163 +1,20 @@
name: Build and push all tinygrad models
name: Build All Tinygrad Models and Push to GitLab
on:
workflow_dispatch:
inputs:
set_min_version:
description: 'Minimum selector version required for the models (see helpers.py or readme.md)'
required: true
branch:
description: 'Branch to run workflow from'
required: false
default: 'master-new'
type: string
jobs:
setup:
runs-on: ubuntu-latest
outputs:
json_version: ${{ steps.get-json.outputs.json_version }}
recompiled_dir: ${{ steps.create-recompiled-dir.outputs.recompiled_dir }}
json_file: ${{ steps.get-json.outputs.json_file }}
model_matrix: ${{ steps.set-matrix.outputs.model_matrix }}
steps:
- name: Checkout docs repo (sunnypilot-docs, gh-pages)
uses: actions/checkout@v4
with:
repository: sunnypilot/sunnypilot-docs
ref: gh-pages
path: docs
ssh-key: ${{ secrets.CI_SUNNYPILOT_DOCS_PRIVATE_KEY }}
- name: Get next JSON version to use (from GitHub docs repo)
id: get-json
run: |
cd docs/docs
latest=$(ls driving_models_v*.json | sed -E 's/.*_v([0-9]+)\.json/\1/' | sort -n | tail -1)
next=$((latest+1))
json_file="driving_models_v${next}.json"
cp "driving_models_v${latest}.json" "$json_file"
echo "json_file=docs/docs/$json_file" >> $GITHUB_OUTPUT
echo "json_version=$((next+0))" >> $GITHUB_OUTPUT
echo "SRC_JSON_FILE=docs/docs/driving_models_v${latest}.json" >> $GITHUB_ENV
- name: Extract tinygrad models
id: set-matrix
working-directory: docs/docs
run: |
jq -c '[.bundles[] | select(.runner=="tinygrad") | {ref, display_name: (.display_name | gsub(" \\([^)]*\\)"; "")), is_20hz}]' "$(basename "${SRC_JSON_FILE}")" > matrix.json
echo "model_matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT
- name: Set up SSH
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.GITLAB_SSH_PRIVATE_KEY }}
- run: |
mkdir -p ~/.ssh
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
- name: Clone GitLab docs repo and create new recompiled dir
id: create-recompiled-dir
env:
GIT_SSH_COMMAND: 'ssh -o UserKnownHostsFile=~/.ssh/known_hosts'
run: |
git clone --depth 1 --filter=tree:0 --sparse git@gitlab.com:sunnypilot/public/docs.sunnypilot.ai3.git gitlab_docs
cd gitlab_docs
git checkout main
git sparse-checkout set --no-cone models/
cd models
latest_dir=$(ls -d recompiled* 2>/dev/null | sed -E 's/recompiled([0-9]+)/\1/' | sort -n | tail -1)
if [[ -z "$latest_dir" ]]; then
next_dir=1
else
next_dir=$((latest_dir+1))
fi
recompiled_dir="${next_dir}"
mkdir -p "recompiled${recompiled_dir}"
touch "recompiled${recompiled_dir}/.gitkeep"
cd ../..
echo "recompiled_dir=$recompiled_dir" >> $GITHUB_OUTPUT
- name: Push empty recompiled dir to GitLab
run: |
cd gitlab_docs
git add models/recompiled${{ steps.create-recompiled-dir.outputs.recompiled_dir }}
git config --global user.name "GitHub Action"
git config --global user.email "action@github.com"
git commit -m "Add recompiled${{ steps.create-recompiled-dir.outputs.recompiled_dir }} for build-all" || echo "No changes to commit"
git push origin main
- name: Push new JSON to GitHub docs repo
run: |
cd docs
git pull origin gh-pages
git add docs/"$(basename ${{ steps.get-json.outputs.json_file }})"
git config --global user.name "GitHub Action"
git config --global user.email "action@github.com"
git commit -m "Add new ${{ steps.get-json.outputs.json_file }} for build-all" || echo "No changes to commit"
git push origin gh-pages
get_and_build:
needs: [setup]
strategy:
matrix:
model: ${{ fromJson(needs.setup.outputs.model_matrix) }}
fail-fast: false
uses: ./.github/workflows/build-single-tinygrad-model.yaml
with:
upstream_branch: ${{ matrix.model.ref }}
custom_name: ${{ matrix.model.display_name }}
recompiled_dir: ${{ needs.setup.outputs.recompiled_dir }}
json_version: ${{ needs.setup.outputs.json_version }}
secrets: inherit
retry_failed_models:
needs: [setup, get_and_build]
runs-on: ubuntu-latest
if: ${{ needs.setup.result != 'failure' && (failure() && !cancelled()) }}
outputs:
retry_matrix: ${{ steps.set-retry-matrix.outputs.retry_matrix }}
steps:
- uses: actions/download-artifact@v4
with:
pattern: model-*
path: output
- id: set-retry-matrix
run: |
echo '${{ needs.setup.outputs.model_matrix }}' > matrix.json
built=(); while IFS= read -r line; do built+=("$line"); done < <(
ls output | sed -E 's/^model-//' | sed -E 's/-[0-9]+$//' | sed -E 's/ \([^)]*\)//' | awk '{gsub(/^ +| +$/, ""); print}'
)
jq -c --argjson built "$(printf '%s\n' "${built[@]}" | jq -R . | jq -s .)" \
'map(select(.display_name as $n | ($built | index($n | gsub("^ +| +$"; "")) | not)))' matrix.json > retry_matrix.json
echo "retry_matrix=$(cat retry_matrix.json)" >> $GITHUB_OUTPUT
retry_get_and_build:
needs: [setup, get_and_build, retry_failed_models]
if: ${{ needs.get_and_build.result == 'failure' || (needs.retry_failed_models.outputs.retry_matrix != '[]' && needs.retry_failed_models.outputs.retry_matrix != '') }}
strategy:
matrix:
model: ${{ fromJson(needs.retry_failed_models.outputs.retry_matrix) }}
fail-fast: false
uses: ./.github/workflows/build-single-tinygrad-model.yaml
with:
upstream_branch: ${{ matrix.model.ref }}
custom_name: ${{ matrix.model.display_name }}
recompiled_dir: ${{ needs.setup.outputs.recompiled_dir }}
json_version: ${{ needs.setup.outputs.json_version }}
artifact_suffix: -retry
secrets: inherit
publish_models:
name: Publish models sequentially
needs: [setup, get_and_build, retry_failed_models, retry_get_and_build]
if: ${{ !cancelled() && (needs.get_and_build.result != 'failure' || needs.retry_get_and_build.result == 'success' || (needs.retry_failed_models.outputs.retry_matrix != '[]' && needs.retry_failed_models.outputs.retry_matrix != '')) }}
runs-on: ubuntu-latest
strategy:
max-parallel: 1
matrix:
model: ${{ fromJson(needs.setup.outputs.model_matrix) }}
env:
RECOMPILED_DIR: recompiled${{ needs.setup.outputs.recompiled_dir }}
JSON_FILE: ${{ needs.setup.outputs.json_file }}
ARTIFACT_NAME_INPUT: ${{ matrix.model.display_name }}
steps:
- name: Set up SSH
uses: webfactory/ssh-agent@v0.9.0
@@ -169,19 +26,7 @@ jobs:
mkdir -p ~/.ssh
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
- name: Clone GitLab docs repo
env:
GIT_SSH_COMMAND: 'ssh -o UserKnownHostsFile=~/.ssh/known_hosts'
run: |
echo "Cloning GitLab"
git clone --depth 1 --filter=tree:0 --sparse git@gitlab.com:sunnypilot/public/docs.sunnypilot.ai3.git gitlab_docs
cd gitlab_docs
echo "checkout models/${RECOMPILED_DIR}"
git sparse-checkout set --no-cone models/${RECOMPILED_DIR}
git checkout main
cd ..
- name: Checkout docs repo
- name: Checkout docs repo (sunnypilot-docs, gh-pages)
uses: actions/checkout@v4
with:
repository: sunnypilot/sunnypilot-docs
@@ -189,60 +34,82 @@ jobs:
path: docs
ssh-key: ${{ secrets.CI_SUNNYPILOT_DOCS_PRIVATE_KEY }}
- name: Validate recompiled dir and JSON version
run: |
if [ ! -d "gitlab_docs/models/$RECOMPILED_DIR" ]; then
echo "Recompiled dir $RECOMPILED_DIR does not exist in GitLab repo"
exit 1
fi
if [ ! -f "$JSON_FILE" ]; then
echo "JSON file $JSON_FILE does not exist!"
exit 1
fi
- name: Download artifact name file
uses: actions/download-artifact@v4
with:
name: artifact-name-${{ env.ARTIFACT_NAME_INPUT }}
path: artifact_name
- name: Read artifact name
id: read-artifact-name
run: |
ARTIFACT_NAME=$(cat artifact_name/artifact_name.txt)
echo "artifact_name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT
- name: Download model artifact
uses: actions/download-artifact@v4
with:
name: ${{ steps.read-artifact-name.outputs.artifact_name }}
path: output
- name: Remove onnx files bc not needed for recompiled dir since they already exist from single build
run: |
find output -type f -name '*.onnx' -delete
find output -type f -name 'big_*.pkl' -delete
find output -type f -name 'dmonitoring_model_tinygrad.pkl' -delete
- name: Copy model artifacts to gitlab
- name: Clone GitLab docs repo
env:
ARTIFACT_NAME: ${{ steps.read-artifact-name.outputs.artifact_name }}
GIT_SSH_COMMAND: 'ssh -o UserKnownHostsFile=~/.ssh/known_hosts'
run: |
ARTIFACT_DIR="gitlab_docs/models/${RECOMPILED_DIR}/${ARTIFACT_NAME}"
echo "Cloning GitLab"
git clone --depth 1 --filter=tree:0 --sparse git@gitlab.com:sunnypilot/public/docs.sunnypilot.ai2.git gitlab_docs
cd gitlab_docs
git checkout main
cd ..
- name: Set next recompiled dir
id: set-recompiled
run: |
cd gitlab_docs
echo "checkout models/"
git sparse-checkout set --no-cone models/
git checkout main
cd models
latest_dir=$(ls -d recompiled* 2>/dev/null | sed -E 's/recompiled([0-9]+)/\1/' | sort -n | tail -1)
if [[ -z "$latest_dir" ]]; then
next_dir=1
else
next_dir=$((latest_dir+1))
fi
recompiled_dir="recompiled${next_dir}"
if [ -d "$recompiled_dir" ]; then
echo "ERROR: $recompiled_dir already exists in GitLab repo"
exit 1
fi
mkdir -p "$recompiled_dir"
touch "$recompiled_dir/.gitkeep"
echo "RECOMPILED_DIR=$recompiled_dir" >> $GITHUB_ENV
echo "Created new recompiled dir: $recompiled_dir"
cd ../..
- name: Get next JSON version to use (from GitHub docs repo)
id: get-json
run: |
cd docs/docs
latest=$(ls driving_models_v*.json | sed -E 's/.*_v([0-9]+)\.json/\1/' | sort -n | tail -1)
next=$((latest+1))
json_file="driving_models_v${next}.json"
cp "driving_models_v${latest}.json" "$json_file"
echo "json_file=docs/docs/$json_file" >> $GITHUB_OUTPUT
echo "SRC_JSON_FILE=docs/docs/driving_models_v${latest}.json" >> $GITHUB_ENV
- name: Extract tinygrad models
id: set-matrix
working-directory: docs/docs
run: |
jq -c '[.bundles[] | select(.runner=="tinygrad") | {ref, display_name, is_20hz}]' "$(basename "${SRC_JSON_FILE}")" > matrix.json
echo "model_matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT
get_and_build:
needs: [setup]
uses: ./.github/workflows/sunnypilot-build-model.yaml
strategy:
matrix:
model: ${{ fromJson(needs.setup.outputs.model_matrix) }}
name: Model [${{ matrix.model.display_name }}] from ref [${{ matrix.model.ref }}]
with:
upstream_branch: ${{ matrix.model.ref }}
custom_name: ${{ matrix.model.display_name }}
is_20hz: ${{ matrix.model.is_20hz || true }}
secrets: inherit
push_results:
needs: [setup, get_and_build ]
runs-on: ubuntu-latest
steps:
- name: Download all model artifacts
run: |
ARTIFACT_DIR="gitlab_docs/models/$RECOMPILED_DIR"
mkdir -p "$ARTIFACT_DIR"
for path in output/*; do
if [ "$(basename "$path")" = "artifact_name.txt" ]; then
continue
fi
name="$(basename "$path")"
if [ -d "$path" ]; then
mkdir -p "$ARTIFACT_DIR/$name"
cp -r "$path"/* "$ARTIFACT_DIR/$name/"
echo "Copied dir $name -> $ARTIFACT_DIR/$name"
else
cp "$path" "$ARTIFACT_DIR/"
echo "Copied file $name -> $ARTIFACT_DIR/"
fi
for name in $(ls ${{ github.workspace }}/output); do
mkdir -p "$ARTIFACT_DIR/$name"
cp -r ${{ github.workspace }}/output/$name/* "$ARTIFACT_DIR/$name/"
done
- name: Push recompiled dir to GitLab
@@ -251,35 +118,25 @@ jobs:
run: |
cd gitlab_docs
git checkout main
git pull origin main
for d in models/"$RECOMPILED_DIR"/*/; do
git sparse-checkout add "$d"
done
git add models/"$RECOMPILED_DIR"
mkdir -p models/"$(basename $RECOMPILED_DIR)"
git add models/"$(basename $RECOMPILED_DIR)"
git config --global user.name "GitHub Action"
git config --global user.email "action@github.com"
git commit -m "Update $RECOMPILED_DIR with model from build-all-tinygrad-models" || echo "No changes to commit"
git commit -m "Add $(basename $RECOMPILED_DIR) from build-all-tinygrad-models"
git push origin main
- run: |
cd docs
git pull origin gh-pages
- name: update json
- name: Run json_parser.py to update JSON
run: |
ARGS=""
[ -n "${{ inputs.set_min_version }}" ] && ARGS="$ARGS --set-min-version \"${{ inputs.set_min_version }}\""
ARGS="$ARGS --sort-by-date"
eval python3 docs/json_parser.py \
--json-path "$JSON_FILE" \
--recompiled-dir "gitlab_docs/models/$RECOMPILED_DIR" \
$ARGS
python3 docs/json_parser.py \
--json-path "${{ needs.setup.outputs.json_file }}" \
--recompiled-dir "gitlab_docs/models/$RECOMPILED_DIR"
- name: Push updated json to GitHub
- name: Push updated JSON to GitHub docs repo
run: |
cd docs
git config --global user.name "GitHub Action"
git config --global user.email "action@github.com"
git checkout gh-pages
git add docs/"$(basename $JSON_FILE)"
git commit -m "Update $(basename $JSON_FILE) after recompiling model" || echo "No changes to commit"
git add docs/"$(basename ${{ needs.setup.outputs.json_file }})"
git commit -m "Create $(basename ${{ needs.setup.outputs.json_file }}) after recompiling models" || echo "No changes to commit"
git push origin gh-pages

View File

@@ -1,36 +1,21 @@
name: Build Single Tinygrad Model and Push
on:
workflow_call:
inputs:
upstream_branch:
description: 'Upstream commit to build from'
required: true
type: string
custom_name:
description: 'Custom name for the model (no date, only name)'
required: false
type: string
recompiled_dir:
description: 'Existing recompiled directory number (e.g. 3 for recompiled3)'
required: true
type: string
json_version:
description: 'driving_models version number to update (e.g. 5 for driving_models_v5.json)'
required: true
type: string
artifact_suffix:
description: 'Suffix for artifact name'
required: false
type: string
default: ''
bypass_push:
description: 'Bypass pushing to GitLab for build-all'
required: false
default: true
type: boolean
workflow_dispatch:
inputs:
runner_type:
description: 'Runner type'
required: false
default: '[self-hosted, james-mac]'
type: choice
options:
- ubuntu-latest
- '[self-hosted, james-mac]'
build_model_ref:
description: 'Branch to use for build-model workflow'
required: false
default: 'master-new'
type: string
upstream_branch:
description: 'Upstream commit to build from'
required: true
@@ -49,12 +34,10 @@ on:
type: number
model_folder:
description: 'Model folder'
required: true
type: choice
default: 'None'
options:
- None
- Simple Plan Models
- Space Lab Models
- TR Models
- DTR Models
- Custom Merge Models
@@ -72,27 +55,13 @@ on:
description: 'Minimum selector version'
required: false
type: number
env:
RECOMPILED_DIR: recompiled${{ inputs.recompiled_dir }}
JSON_FILE: docs/docs/driving_models_v${{ inputs.json_version }}.json
jobs:
build_model:
uses: ./.github/workflows/sunnypilot-build-model.yaml
with:
upstream_branch: ${{ inputs.upstream_branch }}
custom_name: ${{ inputs.custom_name || inputs.upstream_branch }}
is_20hz: true
artifact_suffix: ${{ inputs.artifact_suffix }}
secrets: inherit
publish_model:
if: ${{ !inputs.bypass_push && !cancelled() }}
concurrency:
group: gitlab-push-${{ inputs.recompiled_dir }}
cancel-in-progress: false
needs: build_model
runs-on: ubuntu-latest
build-single:
runs-on: ${{ github.event.inputs.runner_type }}
env:
RECOMPILED_DIR: recompiled${{ github.event.inputs.recompiled_dir }}
JSON_FILE: docs/docs/driving_models_v${{ github.event.inputs.json_version }}.json
steps:
- name: Set up SSH
uses: webfactory/ssh-agent@v0.9.0
@@ -109,7 +78,7 @@ jobs:
GIT_SSH_COMMAND: 'ssh -o UserKnownHostsFile=~/.ssh/known_hosts'
run: |
echo "Cloning GitLab"
git clone --depth 1 --filter=tree:0 --sparse git@gitlab.com:sunnypilot/public/docs.sunnypilot.ai3.git gitlab_docs
git clone --depth 1 --filter=tree:0 --sparse git@gitlab.com:sunnypilot/public/docs.sunnypilot.ai2.git gitlab_docs
cd gitlab_docs
echo "checkout models/${RECOMPILED_DIR}"
git sparse-checkout set --no-cone models/${RECOMPILED_DIR}
@@ -135,49 +104,66 @@ jobs:
exit 1
fi
- name: Download artifact name file
uses: actions/download-artifact@v4
with:
name: artifact-name-${{ inputs.custom_name || inputs.upstream_branch }}
path: artifact_name
- name: Read artifact name
id: read-artifact-name
- name: Install dependencies
run: |
ARTIFACT_NAME=$(cat artifact_name/artifact_name.txt)
echo "artifact_name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT
sudo apt-get update
sudo apt-get install -y jq gh
- name: Build model
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
START_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
gh workflow run sunnypilot-build-model.yaml \
--repo sunnypilot/sunnypilot \
--ref "${{ github.event.inputs.build_model_ref }}" \
-f upstream_branch="${{ github.event.inputs.upstream_branch }}" \
-f custom_name="${{ github.event.inputs.custom_name }}"
for i in {1..24}; do
RUN_ID=$(gh run list --repo sunnypilot/sunnypilot --workflow=sunnypilot-build-model.yaml --branch="${{ github.event.inputs.build_model_ref }}" --created ">$START_TIME" --limit=1 --json databaseId --jq '.[0].databaseId')
if [ -n "$RUN_ID" ]; then
break
fi
sleep 5
done
if [ -z "$RUN_ID" ]; then
echo "Could not find the triggered workflow run."
exit 1
fi
echo "Watching run ID: $RUN_ID"
gh run watch "$RUN_ID" --repo sunnypilot/sunnypilot
CONCLUSION=$(gh run view "$RUN_ID" --repo sunnypilot/sunnypilot --json conclusion --jq '.conclusion')
echo "Run concluded with: $CONCLUSION"
if [[ "$CONCLUSION" != "success" ]]; then
echo "Workflow run failed with conclusion: $CONCLUSION"
exit 1
fi
- name: Download and extract model artifact
uses: actions/download-artifact@v4
with:
name: ${{ steps.read-artifact-name.outputs.artifact_name }}
path: output
- name: Remove unwanted files
run: |
find output -type f -name 'dmonitoring_model_tinygrad.pkl' -delete
find output -type f -name 'dmonitoring_model.onnx' -delete
- name: Copy model artifact(s) to GitLab recompiled dir
env:
ARTIFACT_NAME: ${{ steps.read-artifact-name.outputs.artifact_name }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
ARTIFACT_DIR="gitlab_docs/models/${RECOMPILED_DIR}/${ARTIFACT_NAME}"
mkdir -p "$ARTIFACT_DIR"
for path in output/*; do
if [ "$(basename "$path")" = "artifact_name.txt" ]; then
continue
fi
name="$(basename "$path")"
if [ -d "$path" ]; then
mkdir -p "$ARTIFACT_DIR/$name"
cp -r "$path"/* "$ARTIFACT_DIR/$name/"
echo "Copied dir $name -> $ARTIFACT_DIR/$name"
else
cp "$path" "$ARTIFACT_DIR/"
echo "Copied file $name -> $ARTIFACT_DIR/"
fi
done
ARTIFACT_DIR="gitlab_docs/models/$RECOMPILED_DIR"
RUN_ID=$(gh run list --repo sunnypilot/sunnypilot --workflow=sunnypilot-build-model.yaml --branch="${{ github.event.inputs.build_model_ref }}" --limit=1 --json databaseId --jq '.[0].databaseId')
ARTIFACT_NAME=$(gh api repos/sunnypilot/sunnypilot/actions/runs/$RUN_ID/artifacts --jq '.artifacts[] | select(.name | startswith("model-")) | .name')
echo "Downloading artifact: $ARTIFACT_NAME from run: $RUN_ID"
mkdir -p "$ARTIFACT_DIR/$ARTIFACT_NAME"
echo "Created directory: $ARTIFACT_DIR/$ARTIFACT_NAME"
gh run download "$RUN_ID" --repo sunnypilot/sunnypilot -n "$ARTIFACT_NAME" --dir "$ARTIFACT_DIR/$ARTIFACT_NAME"
echo "Downloaded artifact zip(s) to: $ARTIFACT_DIR/$ARTIFACT_NAME"
ZIP_PATH=$(find "$ARTIFACT_DIR/$ARTIFACT_NAME" -type f -name '*.zip' | head -n1)
if [ -n "$ZIP_PATH" ]; then
echo "Unzipping $ZIP_PATH to $ARTIFACT_DIR/$ARTIFACT_NAME"
unzip -o "$ZIP_PATH" -d "$ARTIFACT_DIR/$ARTIFACT_NAME"
rm -f "$ZIP_PATH"
echo "Unzipped and removed $ZIP_PATH"
else
echo "No zip file found in $ARTIFACT_DIR/$ARTIFACT_NAME"
fi
echo "Done processing $ARTIFACT_NAME"
- name: Push recompiled dir to GitLab
env:
@@ -185,36 +171,28 @@ jobs:
run: |
cd gitlab_docs
git checkout main
git pull origin main
for d in models/"$RECOMPILED_DIR"/*/; do
git sparse-checkout add "$d"
done
git add models/"$RECOMPILED_DIR"
git config --global user.name "GitHub Action"
git config --global user.email "action@github.com"
git commit -m "Create/Update $RECOMPILED_DIR with new/updated model from build-single-tinygrad-model" || echo "No changes to commit"
git commit -m "Update $RECOMPILED_DIR with new/updated model from build-single-tinygrad-model" || echo "No changes to commit"
git push origin main
- run: |
cd docs
git pull origin gh-pages
- name: Run json_parser.py to update JSON
run: |
FOLDER="${{ inputs.model_folder }}"
FOLDER="${{ github.event.inputs.model_folder }}"
if [ "$FOLDER" = "Other" ]; then
FOLDER="${{ inputs.custom_model_folder }}"
FOLDER="${{ github.event.inputs.custom_model_folder }}"
fi
ARGS=""
if [ "$FOLDER" != "None" ] && [ -n "$FOLDER" ]; then
ARGS="$ARGS --model-folder \"$FOLDER\""
fi
[ -n "${{ inputs.generation }}" ] && ARGS="$ARGS --generation \"${{ inputs.generation }}\""
[ -n "${{ inputs.version }}" ] && ARGS="$ARGS --version \"${{ inputs.version }}\""
[ -n "$FOLDER" ] && ARGS="$ARGS --model-folder \"$FOLDER\""
[ -n "${{ github.event.inputs.generation }}" ] && ARGS="$ARGS --generation \"${{ github.event.inputs.generation }}\""
[ -n "${{ github.event.inputs.version }}" ] && ARGS="$ARGS --version \"${{ github.event.inputs.version }}\""
eval python3 docs/json_parser.py \
--json-path "$JSON_FILE" \
--recompiled-dir "gitlab_docs/models/$RECOMPILED_DIR" \
--sort-by-date \
$ARGS
- name: Push updated JSON to GitHub docs repo

View File

@@ -13,7 +13,7 @@ env:
jobs:
update_translations:
runs-on: ubuntu-latest
if: github.repository == 'sunnypilot/sunnypilot'
if: github.repository == 'commaai/openpilot'
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/setup-with-retry
@@ -23,12 +23,12 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@9153d834b60caba6d51c9b9510b087acf9f33f83
with:
author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
author: Vehicle Researcher <user@comma.ai>
commit-message: "Update translations"
title: "[bot] Update translations"
body: "Automatic PR from repo-maintenance -> update_translations"
branch: "update-translations"
base: "master-new"
base: "master"
delete-branch: true
labels: bot
@@ -61,12 +61,12 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@9153d834b60caba6d51c9b9510b087acf9f33f83
with:
author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
token: ${{ github.repository == 'commaai/openpilot' && secrets.ACTIONS_CREATE_PR_PAT || secrets.GITHUB_TOKEN }}
author: Vehicle Researcher <user@comma.ai>
token: ${{ secrets.ACTIONS_CREATE_PR_PAT }}
commit-message: Update Python packages
title: '[bot] Update Python packages'
branch: auto-package-updates
base: master-new
base: master
delete-branch: true
body: 'Automatic PR from repo-maintenance -> package_updates'
labels: bot

View File

@@ -25,11 +25,6 @@ on:
required: false
type: boolean
default: true
artifact_suffix:
description: 'Suffix for artifact name'
required: false
type: string
default: ''
workflow_dispatch:
inputs:
upstream_branch:
@@ -91,11 +86,11 @@ jobs:
- name: 'Upload Artifact'
uses: actions/upload-artifact@v4
with:
name: models-${{ env.REF }}${{ inputs.artifact_suffix }}
name: models-${{ env.REF }}
path: ${{ github.workspace }}/openpilot/selfdrive/modeld/models/*.onnx
build_model:
runs-on: [self-hosted, tici]
runs-on: self-hosted
needs: get_model
env:
MODEL_NAME: ${{ inputs.custom_name || inputs.upstream_branch }} (${{ needs.get_model.outputs.model_date }})
@@ -154,7 +149,7 @@ jobs:
- name: Download model artifacts
uses: actions/download-artifact@v4
with:
name: models-${{ env.REF }}${{ inputs.artifact_suffix }}
name: models-${{ env.REF }}
path: ${{ github.workspace }}/selfdrive/modeld/models
- name: Build Model
@@ -197,22 +192,12 @@ jobs:
--upstream-branch "${{ inputs.upstream_branch }}" \
${{ inputs.is_20hz && '--is-20hz' || '' }}
- name: Write artifact name to file
run: echo "model-${{ env.MODEL_NAME }}${{ inputs.artifact_suffix }}-${{ github.run_number }}" > ${{ env.OUTPUT_DIR }}/artifact_name.txt
- name: Upload Build Artifacts
id: upload-artifact
uses: actions/upload-artifact@v4
with:
name: model-${{ env.MODEL_NAME }}${{ inputs.artifact_suffix }}-${{ github.run_number }}
name: model-${{ env.MODEL_NAME }}-${{ github.run_number }}
path: ${{ env.OUTPUT_DIR }}
- name: Upload artifact name file
uses: actions/upload-artifact@v4
with:
name: artifact-name-${{ inputs.custom_name || inputs.upstream_branch }}
path: ${{ env.OUTPUT_DIR }}/artifact_name.txt
- name: Re-enable powersave
if: always()
run: |

View File

@@ -50,7 +50,7 @@ jobs:
concurrency:
group: build-${{ github.head_ref || github.ref_name }}
cancel-in-progress: false
runs-on: [self-hosted, tici]
runs-on: self-hosted
outputs:
new_branch: ${{ steps.set-env.outputs.new_branch }}
version: ${{ steps.set-env.outputs.version }}

View File

@@ -101,7 +101,6 @@ struct ModelManagerSP @0xaedffd8f31e7b55d {
struct LongitudinalPlanSP @0xf35cc4560bbf6ec2 {
dec @0 :DynamicExperimentalControl;
accelPersonality @1 :AccelerationPersonality;
struct DynamicExperimentalControl {
state @0 :DynamicExperimentalControlState;
@@ -113,12 +112,6 @@ struct LongitudinalPlanSP @0xf35cc4560bbf6ec2 {
blended @1;
}
}
enum AccelerationPersonality {
sport @0;
normal @1;
eco @2;
}
}
struct OnroadEventSP @0xda96579883444c35 {

View File

@@ -123,7 +123,6 @@ inline static std::unordered_map<std::string, uint32_t> keys = {
{"Version", PERSISTENT},
// --- sunnypilot params --- //
{"AccelPersonality", PERSISTENT},
{"ApiCache_DriveStats", PERSISTENT},
{"AutoLaneChangeBsmDelay", PERSISTENT | BACKUP},
{"AutoLaneChangeTimer", PERSISTENT | BACKUP},
@@ -148,9 +147,6 @@ inline static std::unordered_map<std::string, uint32_t> keys = {
{"QuickBootToggle", PERSISTENT | BACKUP},
{"QuietMode", PERSISTENT | BACKUP},
{"ShowAdvancedControls", PERSISTENT | BACKUP},
{"VibePersonalityEnabled", PERSISTENT},
{"VibeAccelPersonalityEnabled", PERSISTENT},
{"VibeFollowPersonalityEnabled", PERSISTENT},
// MADS params
{"Mads", PERSISTENT | BACKUP},

View File

@@ -4,7 +4,7 @@
A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified.
# 319 Supported Cars
# 312 Supported Cars
|Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|<a href="##"><img width=2000></a>Hardware Needed<br>&nbsp;|Video|Setup Video|
|---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
@@ -116,7 +116,6 @@ A supported vehicle is one that just works when you install a comma device. All
|Hyundai|Ioniq Plug-in Hybrid 2019|Smart Cruise Control (SCC)|openpilot available[<sup>1</sup>](#footnotes)|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Hyundai C connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Hyundai&model=Ioniq Plug-in Hybrid 2019">Buy Here</a></sub></details>|||
|Hyundai|Ioniq Plug-in Hybrid 2020-22|All|openpilot available[<sup>1</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Hyundai H connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Hyundai&model=Ioniq Plug-in Hybrid 2020-22">Buy Here</a></sub></details>|||
|Hyundai|Kona 2020|Smart Cruise Control (SCC)|openpilot available[<sup>1</sup>](#footnotes)|6 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Hyundai B connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Hyundai&model=Kona 2020">Buy Here</a></sub></details>|||
|Hyundai|Kona 2022|Smart Cruise Control (SCC)|openpilot available[<sup>1</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Hyundai O connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Hyundai&model=Kona 2022">Buy Here</a></sub></details>|||
|Hyundai|Kona Electric 2018-21|Smart Cruise Control (SCC)|openpilot available[<sup>1</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Hyundai G connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Hyundai&model=Kona Electric 2018-21">Buy Here</a></sub></details>|||
|Hyundai|Kona Electric 2022-23|Smart Cruise Control (SCC)|openpilot available[<sup>1</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Hyundai O connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Hyundai&model=Kona Electric 2022-23">Buy Here</a></sub></details>|||
|Hyundai|Kona Electric (with HDA II, Korea only) 2023[<sup>6</sup>](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Hyundai R connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Hyundai&model=Kona Electric (with HDA II, Korea only) 2023">Buy Here</a></sub></details>|<a href="https://www.youtube.com/watch?v=U2fOCmcQ8hw" target="_blank"><img height="18px" src="assets/icon-youtube.svg"></img></a>||
@@ -212,9 +211,7 @@ A supported vehicle is one that just works when you install a comma device. All
|Nissan[<sup>7</sup>](#footnotes)|Leaf 2018-23|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Nissan A connector<br>- 1 USB-C coupler<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Nissan&model=Leaf 2018-23">Buy Here</a></sub></details>|<a href="https://youtu.be/vaMbtAh_0cY" target="_blank"><img height="18px" src="assets/icon-youtube.svg"></img></a>||
|Nissan[<sup>7</sup>](#footnotes)|Rogue 2018-20|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Nissan A connector<br>- 1 USB-C coupler<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Nissan&model=Rogue 2018-20">Buy Here</a></sub></details>|||
|Nissan[<sup>7</sup>](#footnotes)|X-Trail 2017|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Nissan A connector<br>- 1 USB-C coupler<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Nissan&model=X-Trail 2017">Buy Here</a></sub></details>|||
|Ram|1500 2019-24|Adaptive Cruise Control (ACC)|Stock|32 mph|1 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Ram connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Ram&model=1500 2019-24">Buy Here</a></sub></details>|||
|Ram|2500 2020-24|Adaptive Cruise Control (ACC)|Stock|0 mph|36 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Ram connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Ram&model=2500 2020-24">Buy Here</a></sub></details>|||
|Ram|3500 2019-22|Adaptive Cruise Control (ACC)|Stock|0 mph|36 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Ram connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Ram&model=3500 2019-22">Buy Here</a></sub></details>|||
|Ram|1500 2019-24|Adaptive Cruise Control (ACC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Ram connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Ram&model=1500 2019-24">Buy Here</a></sub></details>|||
|Rivian|R1S 2022-24|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Rivian A connector<br>- 1 USB-C coupler<br>- 1 angled mount (8 degrees)<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Rivian&model=R1S 2022-24">Buy Here</a></sub></details>||https://youtu.be/uaISd1j7Z4U|
|Rivian|R1T 2022-24|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 Rivian A connector<br>- 1 USB-C coupler<br>- 1 angled mount (8 degrees)<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Rivian&model=R1T 2022-24">Buy Here</a></sub></details>||https://youtu.be/uaISd1j7Z4U|
|SEAT|Ateca 2016-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[<sup>1,16</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|<details><summary>Parts</summary><sub>- 1 USB-C coupler<br>- 1 VW J533 connector<br>- 1 comma 3X<br>- 1 harness box<br>- 1 long OBD-C cable (9.5 ft)<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=SEAT&model=Ateca 2016-23">Buy Here</a></sub></details>|||
@@ -222,14 +219,10 @@ A supported vehicle is one that just works when you install a comma device. All
|Subaru|Ascent 2019-21|All[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Ascent 2019-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Crosstrek 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|<a href="https://youtu.be/Agww7oE1k-s?t=26" target="_blank"><img height="18px" src="assets/icon-youtube.svg"></img></a>||
|Subaru|Crosstrek 2020-23|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Crosstrek 2020-23">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Forester 2017-18|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Forester 2017-18">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Forester 2019-21|All[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Forester 2019-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Impreza 2017-19|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Impreza 2017-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Impreza 2020-22|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Impreza 2020-22">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Legacy 2015-18|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Legacy 2015-18">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Legacy 2020-22|All[<sup>8</sup>](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru B connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Legacy 2020-22">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Outback 2015-17|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Outback 2015-17">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Outback 2018-19|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Outback 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|Outback 2020-22|All[<sup>8</sup>](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru B connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=Outback 2020-22">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||
|Subaru|XV 2018-19|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=XV 2018-19">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|<a href="https://youtu.be/Agww7oE1k-s?t=26" target="_blank"><img height="18px" src="assets/icon-youtube.svg"></img></a>||
|Subaru|XV 2020-21|EyeSight Driver Assistance[<sup>8</sup>](#footnotes)|openpilot available[<sup>1,9</sup>](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|<details><summary>Parts</summary><sub>- 1 Subaru A connector<br>- 1 comma 3X<br>- 1 comma power v3<br>- 1 harness box<br>- 1 mount<br>- 1 right angle OBD-C cable (1.5 ft)<br><a href="https://comma.ai/shop/comma-3x.html?make=Subaru&model=XV 2020-21">Buy Here</a></sub></details><details><summary>Tools</summary><sub>- 1 Pry Tool<br>- 1 Socket Wrench 8mm or 5/16" (deep)</sub></details>|||

2
panda

Submodule panda updated: ff4733f958...c33cfa0803

View File

@@ -10,8 +10,6 @@ from openpilot.common.swaglog import cloudlog
from openpilot.selfdrive.modeld.constants import index_function
from openpilot.selfdrive.controls.radard import _LEAD_ACCEL_TAU
from openpilot.sunnypilot.selfdrive.controls.lib.vibe_personality.vibe_personality import VibePersonalityController
if __name__ == '__main__': # generating code
from openpilot.third_party.acados.acados_template import AcadosModel, AcadosOcp, AcadosOcpSolver
else:
@@ -230,7 +228,6 @@ class LongitudinalMpc:
self.solver = AcadosOcpSolverCython(MODEL_NAME, ACADOS_SOLVER_TYPE, N)
self.reset()
self.source = SOURCES[2]
self.vibe_controller = VibePersonalityController()
def reset(self):
# self.solver = AcadosOcpSolverCython(MODEL_NAME, ACADOS_SOLVER_TYPE, N)
@@ -331,31 +328,10 @@ class LongitudinalMpc:
return lead_xv
def update(self, radarstate, v_cruise, x, v, a, j, personality=log.LongitudinalPersonality.standard):
t_follow = get_T_FOLLOW(personality)
v_ego = self.x0[1]
# Get following distance
if self.vibe_controller.is_follow_enabled():
t_follow = self.vibe_controller.get_follow_distance_multiplier(v_ego)
if t_follow is None:
# Fallback to stock behavior when vibe controller can't provide a value
t_follow = get_T_FOLLOW(personality)
else:
t_follow = get_T_FOLLOW(personality)
self.status = radarstate.leadOne.status or radarstate.leadTwo.status
# Get acceleration limits
if self.vibe_controller.is_accel_enabled():
accel_limits = self.vibe_controller.get_accel_limits(v_ego)
if accel_limits is not None:
min_accel = accel_limits[0]
else:
min_accel = CRUISE_MIN_ACCEL
else:
min_accel = CRUISE_MIN_ACCEL
a_cruise_min = min_accel
lead_xv_0 = self.process_lead(radarstate.leadOne)
lead_xv_1 = self.process_lead(radarstate.leadTwo)
@@ -374,7 +350,7 @@ class LongitudinalMpc:
# Fake an obstacle for cruise, this ensures smooth acceleration to set speed
# when the leads are no factor.
v_lower = v_ego + (T_IDXS * a_cruise_min * 1.05)
v_lower = v_ego + (T_IDXS * CRUISE_MIN_ACCEL * 1.05)
# TODO does this make sense when max_a is negative?
v_upper = v_ego + (T_IDXS * CRUISE_MAX_ACCEL * 1.05)
v_cruise_clipped = np.clip(v_cruise * np.ones(N+1),

View File

@@ -124,22 +124,9 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
prev_accel_constraint = not (reset_state or sm['carState'].standstill)
if self.mode == 'acc':
if self.vibe_controller.is_accel_enabled():
# Only get max acceleration from vibe controller, use default ACCEL_MIN for minimum
accel_limits = self.vibe_controller.get_accel_limits(v_ego)
if accel_limits is not None:
max_accel = accel_limits[1]
accel_clip = [ACCEL_MIN, max_accel]
else:
# Fallback to stock if vibe controller returns None
accel_clip = [ACCEL_MIN, get_max_accel(v_ego)]
# Recalculate limit turn according to the new max limit
steer_angle_without_offset = sm['carState'].steeringAngleDeg - sm['liveParameters'].angleOffsetDeg
accel_clip = limit_accel_in_turns(v_ego, steer_angle_without_offset, accel_clip, self.CP)
else:
accel_clip = [ACCEL_MIN, get_max_accel(v_ego)]
steer_angle_without_offset = sm['carState'].steeringAngleDeg - sm['liveParameters'].angleOffsetDeg
accel_clip = limit_accel_in_turns(v_ego, steer_angle_without_offset, accel_clip, self.CP)
accel_clip = [ACCEL_MIN, get_max_accel(v_ego)]
steer_angle_without_offset = sm['carState'].steeringAngleDeg - sm['liveParameters'].angleOffsetDeg
accel_clip = limit_accel_in_turns(v_ego, steer_angle_without_offset, accel_clip, self.CP)
else:
accel_clip = [ACCEL_MIN, ACCEL_MAX]

View File

@@ -135,8 +135,7 @@ class SelfdriveD(CruiseHelper):
self.ignored_processes.update({'mapd'})
# Determine startup event
is_remote = build_metadata.openpilot.comma_remote or build_metadata.openpilot.sunnypilot_remote
self.startup_event = EventName.startup if is_remote and build_metadata.tested_channel else EventName.startupMaster
self.startup_event = EventName.startup if build_metadata.openpilot.comma_remote and build_metadata.tested_channel else EventName.startupMaster
if not car_recognized:
self.startup_event = EventName.startupNoCar
elif car_recognized and self.CP.passive:

View File

@@ -92,15 +92,7 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
"your steering wheel distance button."),
"../assets/icons/speed_limit.png",
longi_button_texts);
// accel controller
std::vector<QString> accel_personality_texts{tr("Sport"), tr("Normal"), tr("Eco")};
accel_personality_setting = new ButtonParamControlSP("AccelPersonality", tr("Acceleration Personality"),
tr("Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. "
"In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these "
"acceleration personality within Onroad Settings on the driving screen."),
"",
accel_personality_texts);
accel_personality_setting->showDescription();
// set up uiState update for personality setting
QObject::connect(uiState(), &UIState::uiUpdate, this, &TogglesPanel::updateState);
@@ -128,7 +120,6 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
// insert longitudinal personality after NDOG toggle
if (param == "DisengageOnAccelerator") {
addItem(long_personality_setting);
addItem(accel_personality_setting);
}
}
@@ -149,13 +140,6 @@ void TogglesPanel::updateState(const UIState &s) {
}
uiState()->scene.personality = personality;
}
if (sm.updated("longitudinalPlanSP")) {
auto accel_personality = sm["longitudinalPlanSP"].getLongitudinalPlanSP().getAccelPersonality();
if (accel_personality != s.scene.accel_personality && s.scene.started && isVisible()) {
accel_personality_setting->setCheckedButton(static_cast<int>(accel_personality));
}
uiState()->scene.accel_personality = accel_personality;
}
}
void TogglesPanel::expandToggleDescription(const QString &param) {
@@ -202,12 +186,10 @@ void TogglesPanel::updateToggles() {
experimental_mode_toggle->setEnabled(true);
experimental_mode_toggle->setDescription(e2e_description);
long_personality_setting->setEnabled(true);
accel_personality_setting->setEnabled(true);
} else {
// no long for now
experimental_mode_toggle->setEnabled(false);
long_personality_setting->setEnabled(false);
accel_personality_setting->setEnabled(true);
params.remove("ExperimentalMode");
const QString unavailable = tr("Experimental mode is currently unavailable on this car since the car's stock ACC is used for longitudinal control.");

View File

@@ -88,7 +88,6 @@ protected:
Params params;
std::map<std::string, ParamControl*> toggles;
ButtonParamControl *long_personality_setting;
ButtonParamControl *accel_personality_setting;
virtual void updateToggles();
};

View File

@@ -34,6 +34,7 @@ void ModelRenderer::draw(QPainter &painter, const QRect &surface_rect) {
drawLead(painter, lead_two, lead_vertices[1], surface_rect);
}
}
drawLeadStatus(painter, surface_rect.height(), surface_rect.width());
painter.restore();
}
@@ -174,6 +175,172 @@ QColor ModelRenderer::blendColors(const QColor &start, const QColor &end, float
}
void ModelRenderer::drawLeadStatus(QPainter &painter, int height, int width) {
auto *s = uiState();
auto &sm = *(s->sm);
if (!sm.alive("radarState")) return;
const auto &radar_state = sm["radarState"].getRadarState();
const auto &lead_one = radar_state.getLeadOne();
const auto &lead_two = radar_state.getLeadTwo();
// Check if we have any active leads
bool has_lead_one = lead_one.getStatus();
bool has_lead_two = lead_two.getStatus();
if (!has_lead_one && !has_lead_two) {
// Fade out status display
lead_status_alpha = std::max(0.0f, lead_status_alpha - 0.05f);
if (lead_status_alpha <= 0.0f) return;
} else {
// Fade in status display
lead_status_alpha = std::min(1.0f, lead_status_alpha + 0.1f);
}
// Draw status for each lead vehicle under its chevron
if (true) {
drawLeadStatusAtPosition(painter, lead_one, lead_vertices[0], height, width, "L1");
}
if (has_lead_two && std::abs(lead_one.getDRel() - lead_two.getDRel()) > 3.0) {
drawLeadStatusAtPosition(painter, lead_two, lead_vertices[1], height, width, "L2");
}
}
void ModelRenderer::drawLeadStatusAtPosition(QPainter &painter,
const cereal::RadarState::LeadData::Reader &lead_data,
const QPointF &chevron_pos,
int height, int width,
const QString &label) {
float d_rel = lead_data.getDRel();
float v_rel = lead_data.getVRel();
auto *s = uiState();
auto &sm = *(s->sm);
float v_ego = sm["carState"].getCarState().getVEgo();
int chevron_data = std::atoi(Params().get("ChevronInfo").c_str());
// Calculate chevron size (same logic as drawLead)
float sz = std::clamp((25 * 30) / (d_rel / 3 + 30), 15.0f, 30.0f) * 2.35;
QFont content_font = painter.font();
content_font.setPixelSize(35);
content_font.setBold(true);
painter.setFont(content_font);
QFontMetrics fm(content_font);
bool is_metric = s->scene.is_metric;
QStringList text_lines;
const int chevron_types = 3;
const int chevron_all = chevron_types + 1; // All metrics (value 4)
QStringList chevron_text[chevron_types];
int position;
float val;
// Distance display (chevron_data == 1 or all)
if (chevron_data == 1 || chevron_data == chevron_all) {
position = 0;
val = std::max(0.0f, d_rel);
QString distance_unit = is_metric ? "m" : "ft";
if (!is_metric) {
val *= 3.28084f; // Convert meters to feet
}
chevron_text[position].append(QString::number(val, 'f', 0) + " " + distance_unit);
}
// Absolute velocity display (chevron_data == 2 or all)
if (chevron_data == 2 || chevron_data == chevron_all) {
position = (chevron_data == 2) ? 0 : 1;
val = std::max(0.0f, (v_rel + v_ego) * (is_metric ? static_cast<float>(MS_TO_KPH) : static_cast<float>(MS_TO_MPH)));
chevron_text[position].append(QString::number(val, 'f', 0) + " " + (is_metric ? "km/h" : "mph"));
}
// Time-to-contact display (chevron_data == 3 or all)
if (chevron_data == 3 || chevron_data == chevron_all) {
position = (chevron_data == 3) ? 0 : 2;
val = (d_rel > 0 && v_ego > 0) ? std::max(0.0f, d_rel / v_ego) : 0.0f;
QString ttc_str = (val > 0 && val < 200) ? QString::number(val, 'f', 1) + "s" : "---";
chevron_text[position].append(ttc_str);
}
// Collect all non-empty text lines
for (int i = 0; i < chevron_types; ++i) {
if (!chevron_text[i].isEmpty()) {
text_lines.append(chevron_text[i]);
}
}
// If no text to display, return early
if (text_lines.isEmpty()) {
return;
}
// Text box dimensions
float str_w = 150; // Width of text area
float str_h = 45; // Height per line
// Position text below chevron, centered horizontally
float text_x = chevron_pos.x() - str_w / 2;
float text_y = chevron_pos.y() + sz + 15;
// Clamp to screen bounds
text_x = std::clamp(text_x, 10.0f, (float)width - str_w - 10);
// Shadow offset
QPoint shadow_offset(2, 2);
// Draw each line of text with shadow
for (int i = 0; i < text_lines.size(); ++i) {
if (!text_lines[i].isEmpty()) {
QRect textRect(text_x, text_y + (i * str_h), str_w, str_h);
// Draw shadow
painter.setPen(QColor(0x0, 0x0, 0x0, (int)(200 * lead_status_alpha)));
painter.drawText(textRect.translated(shadow_offset.x(), shadow_offset.y()),
Qt::AlignBottom | Qt::AlignHCenter, text_lines[i]);
// Determine text color based on content and danger level
QColor text_color;
// Check if this is a distance line (contains 'm' or 'ft')
if (text_lines[i].contains("m") || text_lines[i].contains("ft")) {
if (d_rel < 20.0f) {
text_color = QColor(255, 80, 80, (int)(255 * lead_status_alpha)); // Red - danger
} else if (d_rel < 40.0f) {
text_color = QColor(255, 200, 80, (int)(255 * lead_status_alpha)); // Yellow - caution
} else {
text_color = QColor(80, 255, 120, (int)(255 * lead_status_alpha)); // Green - safe
}
}
// Enhanced color coding for time-to-contact
else if (text_lines[i].contains("s") && !text_lines[i].contains("---")) {
float ttc_val = text_lines[i].left(text_lines[i].length() - 1).toFloat();
if (ttc_val < 3.0f) {
text_color = QColor(255, 80, 80, (int)(255 * lead_status_alpha)); // Red - urgent
} else if (ttc_val < 6.0f) {
text_color = QColor(255, 200, 80, (int)(255 * lead_status_alpha)); // Yellow - caution
} else {
text_color = QColor(0xff, 0xff, 0xff, (int)(255 * lead_status_alpha)); // White - safe
}
}
else {
text_color = QColor(0xff, 0xff, 0xff, (int)(255 * lead_status_alpha)); // White for other lines
}
// Draw main text
painter.setPen(text_color);
painter.drawText(textRect, Qt::AlignBottom | Qt::AlignHCenter, text_lines[i]);
}
}
// Reset pen
painter.setPen(Qt::NoPen);
}
void ModelRenderer::drawLead(QPainter &painter, const cereal::RadarState::LeadData::Reader &lead_data,
const QPointF &vd, const QRect &surface_rect) {
const float speedBuff = 10.;
@@ -235,4 +402,4 @@ void ModelRenderer::mapLineToPolygon(const cereal::XYZTData::Reader &line, float
pvd->push_front(right);
}
}
}
}

View File

@@ -34,6 +34,12 @@ 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 drawLeadStatus(QPainter &painter, int height, int width);
void drawLeadStatusAtPosition(QPainter &painter,
const cereal::RadarState::LeadData::Reader &lead_data,
const QPointF &chevron_pos,
int height, int width,
const QString &label);
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);
virtual void update_model(const cereal::ModelDataV2::Reader &model, const cereal::RadarState::LeadData::Reader &lead);
@@ -59,4 +65,8 @@ protected:
Eigen::Matrix3f car_space_transform = Eigen::Matrix3f::Zero();
QRectF clip_region;
float lead_status_alpha = 0.0f;
QPointF lead_status_pos;
QString lead_status_text;
QColor lead_status_color;
};

View File

@@ -23,35 +23,6 @@ LongitudinalPanel::LongitudinalPanel(QWidget *parent) : QWidget(parent) {
QObject::connect(uiState(), &UIState::offroadTransition, this, &LongitudinalPanel::refresh);
// Vibe Personality Controller
vibePersonalityControl = new ParamControlSP("VibePersonalityEnabled",
tr("Vibe Personality Controller"),
tr("Advanced driving personality system with separate controls for acceleration behavior (Eco/Normal/Sport) and following distance/braking (Relaxed/Standard/Aggressive). "
"Customize your driving experience with independent acceleration and distance personalities."),
"../assets/offroad/icon_shell.png");
list->addItem(vibePersonalityControl);
connect(vibePersonalityControl, &ParamControlSP::toggleFlipped, [=]() {
refresh(offroad);
});
// Vibe Acceleration Personality
vibeAccelPersonalityControl = new ParamControlSP("VibeAccelPersonalityEnabled",
tr("Acceleration Personality"),
tr("Controls acceleration behavior: Eco (efficient), Normal (balanced), Sport (responsive). "
"Adjust how aggressively the vehicle accelerates while maintaining smooth operation."),
"../assets/offroad/icon_shell.png");
list->addItem(vibeAccelPersonalityControl);
// Vibe Following Distance Personality
vibeFollowPersonalityControl = new ParamControlSP("VibeFollowPersonalityEnabled",
tr("Following Distance Personality"),
tr("Controls following distance and braking behavior: Relaxed (longer distance, gentler braking), Standard (balanced), Aggressive (shorter distance, firmer braking). "
"Fine-tune your comfort level in traffic situations."),
"../assets/offroad/icon_shell.png");
list->addItem(vibeFollowPersonalityControl);
main_layout->addWidget(cruisePanelScreen);
main_layout->setCurrentWidget(cruisePanelScreen);
refresh(offroad);
@@ -99,26 +70,10 @@ void LongitudinalPanel::refresh(bool _offroad) {
customAccIncrement->showDescription();
}
}
bool vibePersonalityEnabled = params.getBool("VibePersonalityEnabled");
if (vibePersonalityEnabled) {
vibeAccelPersonalityControl->setVisible(true);
vibeFollowPersonalityControl->setVisible(true);
} else {
vibeAccelPersonalityControl->setVisible(false);
vibeFollowPersonalityControl->setVisible(false);
}
// enable toggle when long is available and is not PCM cruise
customAccIncrement->setEnabled(has_longitudinal_control && !is_pcm_cruise && !offroad);
customAccIncrement->refresh();
// Vibe Personality controls - always enabled for toggling
vibePersonalityControl->setEnabled(true);
vibeAccelPersonalityControl->setEnabled(true);
vibeFollowPersonalityControl->setEnabled(true);
vibePersonalityControl->refresh();
vibeAccelPersonalityControl->refresh();
vibeFollowPersonalityControl->refresh();
offroad = _offroad;
}

View File

@@ -29,8 +29,4 @@ private:
ScrollViewSP *cruisePanelScroller = nullptr;
QWidget *cruisePanelScreen = nullptr;
CustomAccIncrement *customAccIncrement = nullptr;
ParamControlSP *vibePersonalityControl;
ParamControlSP *vibeAccelPersonalityControl;
ParamControlSP *vibeFollowPersonalityControl;
};

View File

@@ -68,14 +68,6 @@ ModelsPanel::ModelsPanel(QWidget *parent) : QWidget(parent) {
connect(uiStateSP(), &UIStateSP::uiUpdate, this, &ModelsPanel::updateLabels);
list->addItem(currentModelLblBtn);
refreshAvailableModelsBtn = new ButtonControlSP(tr("Refresh Model List"), tr("REFRESH"), "", this);
connect(refreshAvailableModelsBtn, &ButtonControlSP::clicked, this, [=]() {
params.put("ModelManager_LastSyncTime", "0");
ConfirmationDialog::alert(tr("Fetching Latest Models"), this);
});
list->addItem(refreshAvailableModelsBtn);
clearModelCacheBtn = new ButtonControlSP(tr("Clear Model Cache"), tr("CLEAR"), "", this);
connect(clearModelCacheBtn, &ButtonControlSP::clicked, this, &ModelsPanel::clearModelCache);
@@ -374,11 +366,13 @@ void ModelsPanel::updateLabels() {
desc += "<br><br><b><span style=\"color:#e0e0e0\">" + tr("Current:") + "</span></b> <span style=\"color:#e0e0e0\">" + current + "</span>";
}
lagd_toggle_control->setDescription(desc);
lagd_toggle_control->showDescription();
delay_control->setVisible(!params.getBool("LagdToggle"));
if (delay_control->isVisible()) {
float value = QString::fromStdString(params.get("LagdToggledelay")).toFloat();
delay_control->setLabel(QString::number(value, 'f', 2) + "s");
delay_control->showDescription();
}
clearModelCacheBtn->setValue(QString::number(calculateCacheSize(), 'f', 2) + " MB");
@@ -431,10 +425,3 @@ double ModelsPanel::calculateCacheSize() {
});
return static_cast<double>(future_ModelCacheSize) / (1024.0 * 1024.0);
}
void ModelsPanel::showEvent(QShowEvent *event) {
lagd_toggle_control->showDescription();
if (delay_control->isVisible()) {
delay_control->showDescription();
}
}

View File

@@ -21,7 +21,6 @@ private:
QString GetActiveModelName();
QString GetActiveModelInternalName();
void updateModelManagerState();
void showEvent(QShowEvent *event) override;
bool isDownloading() const {
if (!model_manager.hasSelectedBundle()) {
@@ -79,6 +78,5 @@ private:
QFrame *policyFrame;
Params params;
ButtonControlSP *clearModelCacheBtn;
ButtonControlSP *refreshAvailableModelsBtn;
};

View File

@@ -48,162 +48,5 @@ void ModelRendererSP::drawPath(QPainter &painter, const cereal::ModelDataV2::Rea
painter.drawPolygon(right_blindspot_vertices);
}
}
ModelRenderer::drawPath(painter, model, surface_rect.height());
drawLeadStatus(painter, surface_rect.height(), surface_rect.width());
}
void ModelRendererSP::drawLeadStatus(QPainter &painter, int height, int width) {
auto *s = uiState();
auto &sm = *(s->sm);
if (!sm.alive("radarState")) return;
const auto &radar_state = sm["radarState"].getRadarState();
const auto &lead_one = radar_state.getLeadOne();
const auto &lead_two = radar_state.getLeadTwo();
// Check if we have any active leads
bool has_lead_one = lead_one.getStatus();
bool has_lead_two = lead_two.getStatus();
if (!has_lead_one && !has_lead_two) {
// Fade out status display
lead_status_alpha = std::max(0.0f, lead_status_alpha - 0.05f);
if (lead_status_alpha <= 0.0f) return;
} else {
// Fade in status display
lead_status_alpha = std::min(1.0f, lead_status_alpha + 0.1f);
}
if (has_lead_one) {
drawLeadStatusAtPosition(painter, lead_one, lead_vertices[0], height, width, "L1");
}
if (has_lead_two && std::abs(lead_one.getDRel() - lead_two.getDRel()) > 3.0) {
drawLeadStatusAtPosition(painter, lead_two, lead_vertices[1], height, width, "L2");
}
}
void ModelRendererSP::drawLeadStatusAtPosition(QPainter &painter,
const cereal::RadarState::LeadData::Reader &lead_data,
const QPointF &chevron_pos,
int height, int width,
const QString &label) {
float d_rel = lead_data.getDRel();
float v_rel = lead_data.getVRel();
auto *s = uiState();
auto &sm = *(s->sm);
float v_ego = sm["carState"].getCarState().getVEgo();
int chevron_data = std::atoi(Params().get("ChevronInfo").c_str());
// Calculate chevron size (same logic as drawLead)
float sz = std::clamp((25 * 30) / (d_rel / 3 + 30), 15.0f, 30.0f) * 2.35;
QFont content_font = painter.font();
content_font.setPixelSize(42);
content_font.setBold(true);
painter.setFont(content_font);
QFontMetrics fm(content_font);
bool is_metric = s->scene.is_metric;
QStringList text_lines;
const int chevron_types = 3;
const int chevron_all = chevron_types + 1; // All metrics (value 4)
QStringList chevron_text[chevron_types];
int position;
float val;
// Distance display (chevron_data == 1 or all)
if (chevron_data == 1 || chevron_data == chevron_all) {
position = 0;
val = std::max(0.0f, d_rel);
QString distance_unit = is_metric ? "m" : "ft";
if (!is_metric) {
val *= 3.28084f; // Convert meters to feet
}
chevron_text[position].append(QString::number(val, 'f', 0) + " " + distance_unit);
}
// Absolute velocity display (chevron_data == 2 or all)
if (chevron_data == 2 || chevron_data == chevron_all) {
position = (chevron_data == 2) ? 0 : 1;
val = std::max(0.0f, (v_rel + v_ego) * (is_metric ? static_cast<float>(MS_TO_KPH) : static_cast<float>(MS_TO_MPH)));
chevron_text[position].append(QString::number(val, 'f', 0) + " " + (is_metric ? "km/h" : "mph"));
}
// Time-to-contact display (chevron_data == 3 or all)
if (chevron_data == 3 || chevron_data == chevron_all) {
position = (chevron_data == 3) ? 0 : 2;
val = (d_rel > 0 && v_ego > 0) ? std::max(0.0f, d_rel / v_ego) : 0.0f;
QString ttc_str = (val > 0 && val < 200) ? QString::number(val, 'f', 1) + "s" : "---";
chevron_text[position].append(ttc_str);
}
// Collect all non-empty text lines
for (int i = 0; i < chevron_types; ++i) {
if (!chevron_text[i].isEmpty()) {
text_lines.append(chevron_text[i]);
}
}
// If no text to display, return early
if (text_lines.isEmpty()) {
return;
}
// Text box dimensions
float str_w = 150; // Width of text area
float str_h = 45; // Height per line
// Position text below chevron, centered horizontally
float text_x = chevron_pos.x() - str_w / 2;
float text_y = chevron_pos.y() + sz + 15;
// Clamp to screen bounds
text_x = std::clamp(text_x, 10.0f, (float)width - str_w - 10);
// Shadow offset
QPoint shadow_offset(2, 2);
// Draw each line of text with shadow
for (int i = 0; i < text_lines.size(); ++i) {
if (!text_lines[i].isEmpty()) {
QRect textRect(text_x, text_y + (i * str_h), str_w, str_h);
// Draw shadow
painter.setPen(QColor(0x0, 0x0, 0x0, (int)(200 * lead_status_alpha)));
painter.drawText(textRect.translated(shadow_offset.x(), shadow_offset.y()),
Qt::AlignBottom | Qt::AlignHCenter, text_lines[i]);
// Determine text color based on content and danger level
QColor text_color;
// Check if this is a distance line (contains 'm' or 'ft')
if (text_lines[i].contains("m") || text_lines[i].contains("ft")) {
if (d_rel < 20.0f) {
text_color = QColor(255, 80, 80, (int)(255 * lead_status_alpha)); // Red - danger
} else if (d_rel < 40.0f) {
text_color = QColor(255, 200, 80, (int)(255 * lead_status_alpha)); // Yellow - caution
} else {
text_color = QColor(80, 255, 120, (int)(255 * lead_status_alpha)); // Green - safe
}
}
else {
text_color = QColor(0xff, 0xff, 0xff, (int)(255 * lead_status_alpha)); // White for other lines
}
// Draw main text
painter.setPen(text_color);
painter.drawText(textRect, Qt::AlignBottom | Qt::AlignHCenter, text_lines[i]);
}
}
// Reset pen
painter.setPen(Qt::NoPen);
}

View File

@@ -17,17 +17,6 @@ private:
void update_model(const cereal::ModelDataV2::Reader &model, const cereal::RadarState::LeadData::Reader &lead) override;
void drawPath(QPainter &painter, const cereal::ModelDataV2::Reader &model, const QRect &rect) override;
// Lead status display methods
void drawLeadStatus(QPainter &painter, int height, int width);
void drawLeadStatusAtPosition(QPainter &painter,
const cereal::RadarState::LeadData::Reader &lead_data,
const QPointF &chevron_pos,
int height, int width,
const QString &label);
QPolygonF left_blindspot_vertices;
QPolygonF right_blindspot_vertices;
// Lead status animation
float lead_status_alpha = 0.0f;
};
};

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation>إيقاف التشغيل</translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>يحتاج sunnypilot أن يتم ضبط الجهاز ضمن حدود 4 درجات يميناً أو يساراً و5 درجات نحو الأعلى أو 9 نحو الأسفل. يقوم sunnypilot بالمعايرة باستمرار، ونادراً ما يحتاج إلى عملية إعادة الضبط.</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> يشير جهازك إلى %1 درجة %2، و%3 درجة %4.</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation>بدء تشغيل الكاميرا</translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished">تأكيد</translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation>🔥 وضع خرطوم الحريق 🔥</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation>وضع خرطوم الحريق: نشط</translation>
@@ -633,10 +534,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -763,37 +660,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -903,6 +769,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -915,10 +809,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -963,71 +869,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished">إلغاء</translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1178,9 +1019,7 @@ The default software delay value is 0.2</source>
<translation>لقد اكتشف sunnypilot تغييراً في موقع تركيب الجهاز. تأكد من تثبيت الجهاز بشكل كامل في موقعه وتثبيته بإحكام على الزجاج الأمامي.</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1199,13 +1038,6 @@ The default software delay value is 0.2</source>
<translation> تنبيه</translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1229,137 +1061,6 @@ The default software delay value is 0.2</source>
<translation>النظام لا يستجيب</translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished">التحقق</translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">اختيار</translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished">تحديث</translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1700,10 +1401,6 @@ This may take up to a minute.</source>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1799,16 +1496,6 @@ This may take up to a minute.</source>
<source>Custom Software</source>
<translation>البرمجيات المخصصة</translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -2020,30 +1707,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished">اختر فرعاً</translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">إعادة التشغيل</translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2394,25 +2057,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished">اختيار</translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">إلغاء</translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2449,49 +2093,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation>فشل التحديث</translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -210,18 +191,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +199,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -246,14 +211,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>View the error log for sunnypilot crashes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -398,31 +355,11 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>Always Offroad</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation>Kamera startet</translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished">Bestätigen</translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation>🔥 Firehose-Modus 🔥</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation>Firehose-Modus: AKTIV</translation>
@@ -629,10 +530,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream sunnypilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -755,37 +652,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -895,6 +761,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>SELECT</source>
<translation type="unfinished">AUSWÄHLEN</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>
@@ -907,10 +801,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -955,71 +861,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished">Abbrechen</translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1170,9 +1011,7 @@ The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1191,13 +1030,6 @@ The default software delay value is 0.2</source>
<translation> HINWEIS</translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1221,137 +1053,6 @@ The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished">ÜBERPRÜFEN</translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">AUSWÄHLEN</translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished">Aktualisieren</translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1680,10 +1381,6 @@ Dies kann bis zu einer Minute dauern.</translation>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1779,16 +1476,6 @@ Dies kann bis zu einer Minute dauern.</translation>
<source>sunnypilot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -2002,30 +1689,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished">Wähle einen Branch</translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">Neustart</translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2376,25 +2039,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Enable the sunnypilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished">Auswählen</translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Abbrechen</translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2431,49 +2075,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation>Aktualisierung fehlgeschlagen</translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -357,6 +314,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation>Apagar</translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilot requiere que el dispositivo sea montado entre 4° grados a la izquierda o derecha y entre 5° grados hacia arriba o 9° grados hacia abajo. sunnypilot está constantemente en calibración, formatear rara vez es necesario.</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> Su dispositivo está apuntando %1° %2 y %3° %4.</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation>iniciando cámara</translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished">Confirmar</translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
@@ -629,10 +530,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -755,37 +652,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -895,6 +761,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -907,10 +801,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -955,71 +861,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1170,9 +1011,7 @@ The default software delay value is 0.2</source>
<translation>sunnypilot detectó un cambio en la posición de montaje del dispositivo. Asegúrese de que el dispositivo esté completamente asentado en el soporte y que el soporte esté firmemente asegurado al parabrisas.</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1191,13 +1030,6 @@ The default software delay value is 0.2</source>
<translation> ALERTA</translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1221,137 +1053,6 @@ The default software delay value is 0.2</source>
<translation>Systema no responde</translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished">VERIFICAR</translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SELECCIONAR</translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished">ACTUALIZAR</translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1680,10 +1381,6 @@ Esto puede tardar un minuto.</translation>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1779,16 +1476,6 @@ Esto puede tardar un minuto.</translation>
<source>Select a language</source>
<translation>Seleccione un idioma</translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -2000,30 +1687,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished">Selecione una rama</translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">Reiniciar</translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2374,25 +2037,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished">Seleccionar</translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2429,49 +2073,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation>Actualización fallida</translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -345,6 +302,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation>Éteindre</translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilot nécessite que l&apos;appareil soit monté à 4° à gauche ou à droite et à 5° vers le haut ou 9° vers le bas. sunnypilot se calibre en continu, la réinitialisation est rarement nécessaire.</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> Votre appareil est orienté %1° %2 et %3° %4.</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation>démarrage de la caméra</translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished">Confirmer</translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
@@ -629,10 +530,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -755,37 +652,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -895,6 +761,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -907,10 +801,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -955,71 +861,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished">Annuler</translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1170,9 +1011,7 @@ The default software delay value is 0.2</source>
<translation>sunnypilot a détecté un changement dans la position de montage de l&apos;appareil. Assurez-vous que l&apos;appareil est totalement inséré dans le support et que le support est fermement fixé au pare-brise.</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1191,13 +1030,6 @@ The default software delay value is 0.2</source>
<translation> ALERTE</translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1221,137 +1053,6 @@ The default software delay value is 0.2</source>
<translation>Système inopérant</translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished">VÉRIFIER</translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SÉLECTIONNER</translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished">MISE À JOUR</translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1680,10 +1381,6 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1779,16 +1476,6 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>Custom Software</source>
<translation>Logiciel personnalisé</translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -2000,30 +1687,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished">Sélectionner une branche</translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">Redémarrer</translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2374,25 +2037,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished">Sélectionner</translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Annuler</translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2429,49 +2073,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation>Échec de la mise à jour</translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilotの本体は左右4°5°9°</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %2 %1°%4 %3°</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation></translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation>🔥 Firehoseモード 🔥</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
@@ -628,10 +529,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;&lt;/span&gt;: </translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -753,37 +650,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -893,6 +759,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -905,10 +799,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -953,71 +859,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1168,9 +1009,7 @@ The default software delay value is 0.2</source>
<translation>: %1</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1189,13 +1028,6 @@ The default software delay value is 0.2</source>
<translation> </translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1219,137 +1051,6 @@ The default software delay value is 0.2</source>
<translation></translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1675,10 +1376,6 @@ This may take up to a minute.</source>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1774,16 +1471,6 @@ This may take up to a minute.</source>
<source>Custom Software</source>
<translation></translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -1995,30 +1682,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2369,25 +2032,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2424,49 +2068,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation></translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation> </translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilot 4°, 5°, 9° . sunnypilot은 .</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %2 %1° %4 %3° .</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation> </translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation>🔥 🔥</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation> 모드: 활성화</translation>
@@ -628,10 +529,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -753,37 +650,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -893,6 +759,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -905,10 +799,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -953,71 +859,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1168,9 +1009,7 @@ The default software delay value is 0.2</source>
<translation> . . : %1</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1189,13 +1028,6 @@ The default software delay value is 0.2</source>
<translation> </translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1219,137 +1051,6 @@ The default software delay value is 0.2</source>
<translation> </translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1675,10 +1376,6 @@ This may take up to a minute.</source>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1774,16 +1471,6 @@ This may take up to a minute.</source>
<source>Custom Software</source>
<translation> </translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -1995,30 +1682,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2369,25 +2032,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2424,49 +2068,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation> </translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation>Desligar</translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>O sunnypilot requer que o dispositivo seja montado dentro de 4° esquerda ou direita e dentro de 5° para cima ou 9° para baixo. O sunnypilot está continuamente calibrando, resetar raramente é necessário.</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> Seu dispositivo está montado %1° %2 e %3° %4.</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation>câmera iniciando</translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished">Confirmar</translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation>🔥 Modo Firehose 🔥</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation>Modo Firehose: ATIVO</translation>
@@ -629,10 +530,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INATIVO&lt;/span&gt;: conecte-se a uma rede sem limite &lt;br&gt; de dados</translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -755,37 +652,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -895,6 +761,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -907,10 +801,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -955,71 +861,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1170,9 +1011,7 @@ The default software delay value is 0.2</source>
<translation>Temperatura do dispositivo muito alta. O sistema está sendo resfriado antes de iniciar. A temperatura atual do componente interno é: %1</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1191,13 +1030,6 @@ The default software delay value is 0.2</source>
<translation> ALERTA</translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1221,137 +1053,6 @@ The default software delay value is 0.2</source>
<translation>Sistema sem Resposta</translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished">VERIFICAR</translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">SELECIONE</translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished">ATUALIZAÇÃO</translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1680,10 +1381,6 @@ Isso pode levar até um minuto.</translation>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1779,16 +1476,6 @@ Isso pode levar até um minuto.</translation>
<source>Custom Software</source>
<translation>Software Customizado</translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -2000,30 +1687,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished">Selecione uma branch</translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">Reiniciar</translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2374,25 +2037,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished">Selecione</translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2429,49 +2073,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation>Falha na atualização</translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilot 4° 5° 9° sunnypilot </translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %2 %1° %4 %3°</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation></translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
@@ -628,10 +529,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -753,37 +650,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -893,6 +759,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -905,10 +799,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -953,71 +859,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1168,9 +1009,7 @@ The default software delay value is 0.2</source>
<translation>sunnypilot </translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1189,13 +1028,6 @@ The default software delay value is 0.2</source>
<translation> </translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1219,137 +1051,6 @@ The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1675,10 +1376,6 @@ This may take up to a minute.</source>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1774,16 +1471,6 @@ This may take up to a minute.</source>
<source>Custom Software</source>
<translation></translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -1995,30 +1682,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished"> Branch</translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2369,25 +2032,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2424,49 +2068,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation></translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation>Sistemi kapat</translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilot, cihazın 4° sola veya 5° yukarı yada 9° aşağı bakıcak şekilde monte edilmesi gerekmektedir. sunnypilot sürekli kendisini kalibre edilmektedir ve nadiren sıfırlama gerebilir.</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> Cihazınız %1° %2 ve %3° %4 yönünde ayarlı</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation>kamera başlatılıyor</translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
@@ -628,10 +529,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -753,37 +650,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -893,6 +759,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -905,10 +799,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -953,71 +859,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1167,9 +1008,7 @@ The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1188,13 +1027,6 @@ The default software delay value is 0.2</source>
<translation> UYARI</translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1218,137 +1050,6 @@ The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished">KONTROL ET</translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished">GÜNCELLE</translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1673,10 +1374,6 @@ This may take up to a minute.</source>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1772,16 +1469,6 @@ This may take up to a minute.</source>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -1993,30 +1680,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">Yeniden başlat</translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2367,25 +2030,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished">Seç</translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2422,49 +2066,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation>Güncelleme başarız oldu</translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilot要求设备安装的偏航角在左4°4°5°9°sunnypilot会持续更新校准</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %1° %2%3° %4</translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation></translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation>🔥 🔥</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation></translation>
@@ -628,10 +529,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;&lt;/span&gt;</translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -753,37 +650,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -893,6 +759,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -905,10 +799,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -953,71 +859,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1168,9 +1009,7 @@ The default software delay value is 0.2</source>
<translation>%1</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1189,13 +1028,6 @@ The default software delay value is 0.2</source>
<translation> </translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1219,137 +1051,6 @@ The default software delay value is 0.2</source>
<translation></translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1675,10 +1376,6 @@ This may take up to a minute.</source>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1774,16 +1471,6 @@ This may take up to a minute.</source>
<source>Custom Software</source>
<translation></translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -1995,30 +1682,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2369,25 +2032,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2424,49 +2068,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation></translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -135,25 +135,6 @@ Please use caution when using this feature. Only use the blinker when traffic an
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Brightness</name>
<message>
<source>Brightness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Overrides the brightness of the device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto (Dark)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmationDialog</name>
<message>
@@ -198,30 +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>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>DeveloperPanelSP</name>
<message>
<source>Show Advanced Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toggle visibility of advanced sunnypilot controls.
This only toggles the visibility of the controls; it does not toggle the actual control enabled/disabled state.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
@@ -230,10 +187,6 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Quickboot Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error Log</source>
<translation type="unfinished"></translation>
@@ -247,11 +200,15 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>When toggled on, this creates a prebuilt file to allow accelerated boot times. When toggled off, it immediately removes the prebuilt file so compilation of locally edited cpp files can be made. &lt;br&gt;&lt;br&gt;&lt;b&gt;To edit C++ files locally on device, you MUST first turn off this toggle so the changes can recompile.&lt;/b&gt;</source>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Quickboot mode requires updates to be disabled.&lt;br&gt;Enable &apos;Disable Updates&apos; in the Software panel first.</source>
<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>
@@ -337,6 +294,10 @@ This only toggles the visibility of the controls; it does not toggle the actual
<source>Power Off</source>
<translation></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required.</source>
<translation>sunnypilot 4° 5° 9° </translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
<translation> %2 %1° %4 %3° </translation>
@@ -398,31 +359,7 @@ This only toggles the visibility of the controls; it does not toggle the actual
<translation type="unfinished"></translation>
</message>
<message>
<source>sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Steering lag calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is %1% complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Steering torque response calibration is complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot is continuously calibrating, resetting is rarely required. Resetting calibration will restart openpilot if the car is powered on.</source>
<source> Resetting calibration will restart openpilot if the car is powered on.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -512,31 +449,6 @@ Steering lag calibration is complete.</source>
<source>The reset cannot be undone. You have been warned.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wake-Up Behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interactivity Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply a custom timeout for settings UI.
This is the time after which settings UI closes automatically if user is not interacting with the screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Default: Device will boot/wake-up normally &amp; will be ready to engage.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Offroad: Device will be in Always Offroad mode after boot/wake-up.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Controls state of the device after boot/sleep.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DriveStats</name>
@@ -572,21 +484,6 @@ This is the time after which settings UI closes automatically if user is not int
<translation></translation>
</message>
</context>
<context>
<name>ExitOffroadButton</name>
<message>
<source>Are you sure you want to exit Always Offroad mode?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>EXIT ALWAYS OFFROAD MODE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExperimentalModeButton</name>
<message>
@@ -600,6 +497,10 @@ This is the time after which settings UI closes automatically if user is not int
</context>
<context>
<name>FirehosePanel</name>
<message>
<source>🔥 Firehose Mode 🔥</source>
<translation>🔥 🔥</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation></translation>
@@ -628,10 +529,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished">&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;&lt;/span&gt;</translation>
</message>
<message>
<source>Firehose Mode</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -753,37 +650,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>This platform supports limited MADS settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause Lateral Control with Blinker</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pause lateral control with blinker when traveling below the desired speed selected.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LongitudinalPanel</name>
<message>
<source>Custom ACC Speed Increments</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable custom Short &amp; Long press increments for cruise speed increase/decrease.</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>This feature is not supported on this platform due to vehicle limitations.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start the vehicle to check vehicle compatibility.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MadsSettings</name>
@@ -893,6 +759,34 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -905,10 +799,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<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>
@@ -953,71 +859,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Model Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CLEAR</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Driving Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Navigation Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vision Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Policy Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Live Learning Steer Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust Software Delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust the software delay when Live Learning Steer Delay is toggled off.
The default software delay value is 0.2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %1 - %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> download failed - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> pending - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time. Keeping this on provides the stock openpilot experience. The Current value is updated automatically when the vehicle is Onroad.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded models from the cache&lt;br/&gt;&lt;u&gt;except the currently active model&lt;/u&gt;.&lt;br/&gt;&lt;br/&gt;Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear Cache</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -1168,9 +1009,7 @@ The default software delay value is 0.2</source>
<translation>%1</translation>
</message>
<message>
<source>OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.
%1</source>
<source>sunnypilot is now in Always Offroad mode. sunnypilot won&apos;t start until Always Offroad mode is disabled. Go to &quot;Settings&quot; -&gt; &quot;Device&quot; to exit Always Offroad mode.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1189,13 +1028,6 @@ The default software delay value is 0.2</source>
<translation> </translation>
</message>
</context>
<context>
<name>OffroadHomeSP</name>
<message>
<source>ALWAYS OFFROAD ACTIVE</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OnroadAlerts</name>
<message>
@@ -1219,137 +1051,6 @@ The default software delay value is 0.2</source>
<translation></translation>
</message>
</context>
<context>
<name>OsmPanel</name>
<message>
<source>Mapd Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offline Maps ETA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time Elapsed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DELETE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete ALL downloaded maps
Are you sure you want to delete all the maps?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Yes, delete all the maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CHECK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Country</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching Country list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching State list...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>REFRESH</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error: Invalid download. Retry.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will start the download process and it might take a while to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Calculating ETA...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time remaining: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PairingPopup</name>
<message>
@@ -1675,10 +1376,6 @@ This may take up to a minute.</source>
<source>Visuals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OSM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1774,16 +1471,6 @@ This may take up to a minute.</source>
<source>Custom Software</source>
<translation></translation>
</message>
<message>
<source>WARNING: Custom Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use caution when installing third-party software. Third-party software has not been tested by comma, and may cause damage to your device and/or vehicle.
If you&apos;d like to proceed, use https://flash.comma.ai to restore your device to a factory state later.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupWidget</name>
@@ -1995,30 +1682,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>Select a branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disable Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled. &lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 updates requires a reboot.&lt;br&gt;Reboot now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, software updates will be disabled.&lt;br&gt;&lt;b&gt;This requires a reboot to take effect.&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please enable always offroad mode or turn off vehicle to adjust these toggles</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -2369,25 +2032,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<source>openpilot longitudinal control may come in a future update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and Upload Microphone Audio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TreeOptionDialog</name>
<message>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>
@@ -2424,49 +2068,6 @@ If you&apos;d like to proceed, use https://flash.comma.ai to restore your device
<translation></translation>
</message>
</context>
<context>
<name>VisualsPanel</name>
<message>
<source>Show Blind Spot Warnings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enabling this will display warnings when a vehicle is detected in your blind spot as long as your car has BSM supported.</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>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distance</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Metrics Below Chevron</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display useful metrics below the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>WiFiPromptWidget</name>
<message>

View File

@@ -60,7 +60,6 @@ typedef struct UIScene {
cereal::PandaState::PandaType pandaType;
cereal::LongitudinalPersonality personality;
cereal::LongitudinalPlanSP::AccelerationPersonality accel_personality;
float light_sensor = -1;
bool started, ignition, is_metric, recording_audio;

View File

@@ -1,5 +0,0 @@
import os
from openpilot.common.basedir import BASEDIR
MAPD_BIN_DIR = os.path.join(BASEDIR, 'third_party/mapd_pfeiferj')
MAPD_PATH = os.path.join(MAPD_BIN_DIR, 'mapd')

View File

@@ -16,39 +16,32 @@ from urllib.request import urlopen
from cereal import messaging
from openpilot.common.params import Params
from openpilot.sunnypilot.mapd.mapd_manager import MAPD_PATH, MAPD_BIN_DIR
from openpilot.system.hardware.hw import Paths
from openpilot.common.spinner import Spinner
from openpilot.system.version import is_prebuilt
from openpilot.sunnypilot.mapd import MAPD_PATH, MAPD_BIN_DIR
import openpilot.system.sentry as sentry
VERSION = 'v1.10.0'
VERSION = 'v1.9.0'
URL = f"https://github.com/pfeiferj/openpilot-mapd/releases/download/{VERSION}/mapd"
def update_installed_version(version: str, params: Params = None) -> None:
if params is None:
params = Params()
params.put("MapdVersion", version)
class MapdInstallManager:
def __init__(self, spinner_ref: Spinner):
self._spinner = spinner_ref
self._params = Params()
def download(self) -> None:
self.ensure_directories_exist()
self._download_file()
update_installed_version(VERSION, self._params)
self.update_installed_version(VERSION)
def check_and_download(self) -> None:
if self.download_needed():
self.download()
def download_needed(self) -> bool:
return not os.path.exists(MAPD_PATH) or self.get_installed_version() != VERSION
@staticmethod
def download_needed() -> bool:
return not os.path.exists(MAPD_PATH) or MapdInstallManager.get_installed_version() != VERSION
@staticmethod
def ensure_directories_exist() -> None:
@@ -89,8 +82,13 @@ class MapdInstallManager:
temp_file.unlink()
logging.error("Failed to download file after all retries")
def get_installed_version(self) -> str:
return self._params.get("MapdVersion", encoding="utf-8") or ""
@staticmethod
def update_installed_version(version: str) -> None:
Params().put("MapdVersion", version)
@staticmethod
def get_installed_version() -> str:
return Params().get("MapdVersion", encoding="utf-8") or ""
def wait_for_internet_connection(self, return_on_failure: bool = False) -> bool:
max_retries = 10
@@ -124,7 +122,7 @@ class MapdInstallManager:
return
if self.wait_for_internet_connection(return_on_failure=True):
self._spinner.update(f"Downloading pfeiferj's mapd [{self.get_installed_version()}] => [{VERSION}].")
self._spinner.update(f"Downloading pfeiferj's mapd [{install_manager.get_installed_version()}] => [{VERSION}].")
time.sleep(0.1)
self.check_and_download()
self._spinner.close()
@@ -148,7 +146,7 @@ if __name__ == "__main__":
if is_prebuilt():
debug_msg = f"[DEBUG] This is prebuilt, no mapd install required. VERSION: [{VERSION}], Param [{install_manager.get_installed_version()}]"
spinner.update(debug_msg)
update_installed_version(VERSION)
install_manager.update_installed_version(VERSION)
else:
spinner.update(f"Checking if mapd is installed and valid. Prebuilt [{is_prebuilt()}]")
install_manager.non_prebuilt_install()

View File

@@ -12,20 +12,22 @@ import os
import glob
import shutil
from openpilot.common.basedir import BASEDIR
from openpilot.common.params import Params
from openpilot.common.realtime import Ratekeeper, config_realtime_process
from openpilot.common.swaglog import cloudlog
from openpilot.selfdrive.selfdrived.alertmanager import set_offroad_alert
from openpilot.sunnypilot.mapd.live_map_data.osm_map_data import OsmMapData
from openpilot.system.hardware.hw import Paths
from openpilot.sunnypilot.mapd import MAPD_PATH
from openpilot.sunnypilot.mapd.mapd_installer import VERSION, update_installed_version
# PFEIFER - MAPD {{
params = Params()
mem_params = Params("/dev/shm/params") if platform.system() != "Darwin" else params
# }} PFEIFER - MAPD
MAPD_BIN_DIR = os.path.join(BASEDIR, 'third_party/mapd_pfeiferj')
MAPD_PATH = os.path.join(MAPD_BIN_DIR, 'mapd')
def get_files_for_cleanup() -> list[str]:
paths = [
@@ -115,7 +117,6 @@ def update_osm_db() -> None:
def main_thread():
update_installed_version(VERSION, params)
config_realtime_process([0, 1, 2, 3], 5)
rk = Ratekeeper(1, print_delay_threshold=None)

View File

@@ -1,63 +0,0 @@
# Model Selector Version Compatibility
This document explains the version compatibility mechanism used by the Model Selector system, and the rationale behind certain version constraints and JSON file management strategies.
## Overview
The Model Selector is responsible for selecting and validating model bundles based on their metadata and version constraints. Each model bundle is distributed via a JSON file and includes a `minimumSelectorVersion` field indicating the minimum selector version required to load it.
To ensure robust compatibility and prevent mismatches between model expectations and selector capabilities, the selector enforces two version boundaries:
* **`REQUIRED_MIN_SELECTOR_VERSION`**: the oldest selector version we support.
* **`CURRENT_SELECTOR_VERSION`**: the current version of the selector logic.
## Version Compatibility Check
A model bundle is considered compatible if:
```python
REQUIRED_MIN_SELECTOR_VERSION <= bundle["minimumSelectorVersion"] <= CURRENT_SELECTOR_VERSION
```
This ensures:
* **Old bundles are rejected** if they rely on deprecated selector behavior.
* **Future bundles are ignored** if they expect logic that the current selector doesn't yet implement.
## Handling Breaking Changes
When a deep change in selector behavior requires *all* models to be recompiled (e.g., due to a major architectural update), we:
1. **Create a new JSON file** (e.g., from `models_v4.json` to `models_v5.json`).
2. **Assign updated `minimumSelectorVersion` values** in the new bundles.
This allows older selector versions to continue using the previous JSON file, while newer versions point to the new one, preventing cross-contamination.
## Why `REQUIRED_MIN_SELECTOR_VERSION` Still Matters
Despite using new JSON files to isolate breaking changes, `REQUIRED_MIN_SELECTOR_VERSION` plays a critical role:
### 1. **Cached Bundle Validation**
Model bundles are cached locally (e.g., in-memory or on disk). A user might have previously loaded a now-invalid bundle from an older JSON file.
`REQUIRED_MIN_SELECTOR_VERSION` prevents the selector from reloading or trusting that stale cached bundle, even if the original JSON is gone.
### 2. **Explicit Deprecation Boundary**
By raising `REQUIRED_MIN_SELECTOR_VERSION`, we declare older bundles officially unsupported, even if they technically still exist in a legacy JSON file.
### 3. **Avoiding Race Conditions**
Some clients may have intermittent access to updated JSONs. The runtime check ensures version compatibility is enforced independently of external file state.
## Summary
| Component | Purpose |
| ------------------------------- | --------------------------------------------------------------------- |
| `minimumSelectorVersion` | Declares the minimum selector version required to load a model bundle |
| `REQUIRED_MIN_SELECTOR_VERSION` | Prevents loading bundles that are too old (e.g., from stale cache) |
| `CURRENT_SELECTOR_VERSION` | Prevents loading bundles that are too new or forward-incompatible |
| JSON file renaming | Isolates bundles by selector generation to handle full recompiles |
This layered strategy ensures safe evolution of the model selection system while maintaining backward compatibility and runtime protection against stale or incompatible bundles.

View File

@@ -115,7 +115,7 @@ class ModelCache:
class ModelFetcher:
"""Handles fetching and caching of model data from remote source"""
MODEL_URL = "https://docs.sunnypilot.ai/driving_models_v6.json"
MODEL_URL = "https://docs.sunnypilot.ai/driving_models_v5.json"
def __init__(self, params: Params):
self.params = params

View File

@@ -19,9 +19,8 @@ from openpilot.system.hardware import PC
from openpilot.system.hardware.hw import Paths
from pathlib import Path
# see the README.md for more details on the model selector versioning
CURRENT_SELECTOR_VERSION = 8
REQUIRED_MIN_SELECTOR_VERSION = 6
CURRENT_SELECTOR_VERSION = 1
REQUIRED_MIN_SELECTOR_VERSION = 1
USE_ONNX = os.getenv('USE_ONNX', PC)

View File

@@ -10,14 +10,12 @@ from opendbc.car import structs
from openpilot.sunnypilot.selfdrive.controls.lib.dec.dec import DynamicExperimentalController
from openpilot.sunnypilot.models.helpers import get_active_bundle
from openpilot.sunnypilot.selfdrive.controls.lib.vibe_personality.vibe_personality import VibePersonalityController
DecState = custom.LongitudinalPlanSP.DynamicExperimentalControl.DynamicExperimentalControlState
class LongitudinalPlannerSP:
def __init__(self, CP: structs.CarParams, mpc):
self.dec = DynamicExperimentalController(CP, mpc)
self.vibe_controller = VibePersonalityController()
self.generation = int(model_bundle.generation) if (model_bundle := get_active_bundle()) else None
@property
@@ -33,7 +31,6 @@ class LongitudinalPlannerSP:
def update(self, sm: messaging.SubMaster) -> None:
self.dec.update(sm)
self.vibe_controller.update()
def publish_longitudinal_plan_sp(self, sm: messaging.SubMaster, pm: messaging.PubMaster) -> None:
plan_sp_send = messaging.new_message('longitudinalPlanSP')

View File

@@ -1,286 +0,0 @@
"""
Test suite for VibePersonalityController
Tests the core functionality of the vibe personality system including
acceleration profiles, following distance, and personality management.
"""
import pytest
import numpy as np
from pytest_mock import MockerFixture
from cereal import log, custom
from openpilot.sunnypilot.selfdrive.controls.lib.vibe_personality.vibe_personality import VibePersonalityController
AccelPersonality = custom.LongitudinalPlanSP.AccelerationPersonality
LongPersonality = log.LongitudinalPersonality
class TestVibePersonalityController:
"""Test suite for VibePersonalityController"""
@pytest.fixture
def mock_params(self, mocker: MockerFixture):
"""Mock Params with realistic behavior"""
mock = mocker.Mock()
mock.get.return_value = None
mock.get_bool.return_value = True
mock.put.return_value = None
mock.put_bool.return_value = None
return mock
@pytest.fixture
def controller(self, mock_params, mocker: MockerFixture):
"""Create controller with mocked dependencies"""
mocker.patch('openpilot.sunnypilot.selfdrive.controls.lib.vibe_personality.vibe_personality.Params', return_value=mock_params)
controller = VibePersonalityController()
controller.params = mock_params
return controller
def test_initialization_sets_correct_defaults(self, controller):
"""Controller should initialize with expected default values"""
assert controller.accel_personality == AccelPersonality.normal
assert controller.long_personality == LongPersonality.standard
assert controller.frame == 0
assert hasattr(controller, 'max_accel_slopes')
assert hasattr(controller, 'min_accel_slopes')
assert hasattr(controller, 'follow_distance_slopes')
def test_accel_personality_management(self, controller):
"""Test acceleration personality setting and cycling"""
# Valid personality setting
result = controller.set_accel_personality(AccelPersonality.sport)
assert result is True
assert controller.accel_personality == AccelPersonality.sport
controller.params.put.assert_called_with('AccelPersonality', str(AccelPersonality.sport))
# Invalid personality setting
result = controller.set_accel_personality(999)
assert result is False
assert controller.accel_personality == AccelPersonality.sport # unchanged
# Cycling behavior
controller.set_accel_personality(AccelPersonality.eco)
assert controller.cycle_accel_personality() == AccelPersonality.normal
assert controller.cycle_accel_personality() == AccelPersonality.sport
assert controller.cycle_accel_personality() == AccelPersonality.eco
def test_long_personality_management(self, controller):
"""Test longitudinal personality setting and cycling"""
# Valid setting
result = controller.set_long_personality(LongPersonality.aggressive)
assert result is True
assert controller.long_personality == LongPersonality.aggressive
# Invalid setting
result = controller.set_long_personality(-1)
assert result is False
# Cycling
controller.set_long_personality(LongPersonality.relaxed)
assert controller.cycle_long_personality() == LongPersonality.standard
assert controller.cycle_long_personality() == LongPersonality.aggressive
assert controller.cycle_long_personality() == LongPersonality.relaxed
def test_enable_disable_logic(self, controller):
"""Test feature enable/disable states"""
# Mock enabled state
controller.params.get_bool.return_value = True
assert controller.is_enabled() is True
assert controller.is_accel_enabled() is True
assert controller.is_follow_enabled() is True
# Mock disabled state
controller.params.get_bool.return_value = False
assert controller.is_enabled() is False
assert controller.is_accel_enabled() is False
assert controller.is_follow_enabled() is False
# Test partial disable (only main toggle off)
def mock_get_bool(key):
return key != 'VibePersonalityEnabled'
controller.params.get_bool.side_effect = mock_get_bool
assert controller.is_accel_enabled() is False
assert controller.is_follow_enabled() is False
def test_get_accel_limits_returns_valid_range(self, controller):
"""Acceleration limits should return valid min/max values"""
controller.params.get_bool.return_value = True
# Test at multiple speeds
for speed in [0.0, 15.0, 30.0]:
limits = controller.get_accel_limits(speed)
assert limits is not None, f"Failed at speed {speed}"
min_a, max_a = limits
assert isinstance(min_a, float)
assert isinstance(max_a, float)
assert min_a < 0, "Min acceleration should be negative (braking)"
assert max_a > 0, "Max acceleration should be positive"
assert min_a < max_a, "Min should be less than max"
def test_get_accel_limits_returns_none_when_disabled(self, controller):
"""Should return None when acceleration control is disabled"""
controller.params.get_bool.return_value = False
assert controller.get_accel_limits(20.0) is None
def test_get_follow_distance_multiplier_returns_positive_value(self, controller):
"""Follow distance multiplier should be positive"""
controller.params.get_bool.return_value = True
multiplier = controller.get_follow_distance_multiplier(20.0)
assert multiplier is not None
assert isinstance(multiplier, float)
assert multiplier > 0
def test_get_follow_distance_multiplier_returns_none_when_disabled(self, controller):
"""Should return None when follow distance control is disabled"""
controller.params.get_bool.return_value = False
assert controller.get_follow_distance_multiplier(20.0) is None
def test_personality_differences_produce_different_results(self, controller):
"""Different personalities should produce measurably different outputs"""
controller.params.get_bool.return_value = True
# Test acceleration personality differences
controller.set_accel_personality(AccelPersonality.eco)
eco_limits = controller.get_accel_limits(15.0)
controller.set_accel_personality(AccelPersonality.sport)
sport_limits = controller.get_accel_limits(15.0)
assert sport_limits[1] > eco_limits[1], "Sport should allow higher acceleration than eco"
# Test following distance personality differences
controller.set_long_personality(LongPersonality.relaxed)
relaxed_dist = controller.get_follow_distance_multiplier(20.0)
controller.set_long_personality(LongPersonality.aggressive)
aggressive_dist = controller.get_follow_distance_multiplier(20.0)
assert relaxed_dist > aggressive_dist, "Relaxed should have longer following distance"
def test_interpolation_functions_work_correctly(self, controller):
"""Test mathematical interpolation functions"""
# Test slope computation
x = np.array([0., 10., 20.])
y = np.array([1.0, 2.0, 1.5])
slopes = controller._compute_slopes(x, y)
assert len(slopes) == len(x)
assert all(np.isfinite(slope) for slope in slopes)
# Test interpolation accuracy at known points
result_0 = controller._interpolate(0.0, x, y, slopes)
result_10 = controller._interpolate(10.0, x, y, slopes)
assert abs(result_0 - 1.0) < 1e-6, "Interpolation should be exact at breakpoints"
assert abs(result_10 - 2.0) < 1e-6, "Interpolation should be exact at breakpoints"
# Test interpolation bounds
result_below = controller._interpolate(-5.0, x, y, slopes)
result_above = controller._interpolate(25.0, x, y, slopes)
assert abs(result_below - y[0]) < 1e-6, "Should clamp to first value"
assert abs(result_above - y[-1]) < 1e-6, "Should clamp to last value"
def test_get_personality_info_returns_complete_info(self, controller):
"""Personality info should contain all required fields"""
info = controller.get_personality_info()
required_fields = [
'accel_personality', 'accel_personality_int',
'long_personality', 'long_personality_int',
'enabled', 'accel_enabled', 'follow_enabled'
]
for field in required_fields:
assert field in info, f"Missing required field: {field}"
assert info['accel_personality'] in ['Eco', 'Normal', 'Sport']
assert info['long_personality'] in ['Relaxed', 'Standard', 'Aggressive']
assert isinstance(info['enabled'], bool)
def test_toggle_functions_change_state(self, controller):
"""Toggle functions should change parameter states"""
# Mock current enabled state
controller.params.get_bool.return_value = True
# Test main toggle
result = controller.toggle_personality()
assert result is False # should return new state
controller.params.put_bool.assert_called_with('VibePersonalityEnabled', False)
# Test specific toggles
controller.params.get_bool.return_value = True
controller.toggle_accel_personality()
controller.params.put_bool.assert_called_with('VibeAccelPersonalityEnabled', False)
controller.toggle_follow_distance_personality()
controller.params.put_bool.assert_called_with('VibeFollowPersonalityEnabled', False)
def test_reset_restores_defaults(self, controller):
"""Reset should restore controller to default state"""
# Change from defaults
controller.set_accel_personality(AccelPersonality.sport)
controller.set_long_personality(LongPersonality.aggressive)
controller.frame = 1000
# Reset and verify defaults
controller.reset()
assert controller.accel_personality == AccelPersonality.normal
assert controller.long_personality == LongPersonality.standard
assert controller.frame == 0
def test_update_increments_frame_counter(self, controller):
"""Update should increment frame counter with wraparound"""
initial_frame = controller.frame
controller.update()
assert controller.frame == initial_frame + 1
# Test wraparound
controller.frame = 999999
controller.update()
assert controller.frame == 0
def test_individual_accel_methods(self, controller):
"""Test individual min/max accel convenience methods"""
controller.params.get_bool.return_value = True
min_accel = controller.get_min_accel(15.0)
max_accel = controller.get_max_accel(15.0)
assert min_accel is not None
assert max_accel is not None
assert min_accel < 0
assert max_accel > 0
# Test disabled state
controller.params.get_bool.return_value = False
assert controller.get_min_accel(15.0) is None
assert controller.get_max_accel(15.0) is None
@pytest.mark.parametrize("speed", [0.0, 5.0, 15.0, 25.0, 40.0, 55.0])
def test_accel_limits_at_various_speeds(self, controller, speed):
"""Test acceleration limits across speed range"""
controller.params.get_bool.return_value = True
limits = controller.get_accel_limits(speed)
assert limits is not None
min_a, max_a = limits
assert min_a < max_a
assert -2.0 < min_a < 0 # Reasonable braking range
assert 0 < max_a < 3.0 # Reasonable acceleration range
def test_error_handling_in_interpolation(self, controller):
"""Test interpolation handles edge cases gracefully"""
# Test with minimal points
x = [0., 1.]
y = [1.0, 2.0]
slopes = controller._compute_slopes(x, y)
result = controller._interpolate(0.5, x, y, slopes)
assert 1.0 <= result <= 2.0
# Test with insufficient points
with pytest.raises(ValueError):
controller._compute_slopes([0.], [1.0])

View File

@@ -1,306 +0,0 @@
"""
Copyright (c) 2021-, rav4kumar, 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.
"""
from cereal import log, custom
import numpy as np
from openpilot.common.realtime import DT_MDL
from openpilot.common.params import Params
LongPersonality = log.LongitudinalPersonality
AccelPersonality = custom.LongitudinalPlanSP.AccelerationPersonality
# Acceleration Profiles mapped to AccelPersonality (eco/normal/sport)
MAX_ACCEL_PROFILES = {
AccelPersonality.eco: [2.00, 2.00, 1.32, 0.85, .58, .46, .365, .317, .089], # eco
AccelPersonality.normal: [2.00, 2.00, 1.42, 1.10, .65, .56, .43, .36, .12], # normal
AccelPersonality.sport: [2.00, 2.00, 1.52, 1.40, .80, .70, .53, .46, .20], # sport
}
MAX_ACCEL_BREAKPOINTS = [0., 6., 9., 11., 16., 20., 25., 30., 55.]
# Braking profiles mapped to LongPersonality (relaxed/standard/aggressive)
MIN_ACCEL_PROFILES = {
LongPersonality.relaxed: [-1.20, -1.20], # gentler braking
LongPersonality.standard: [-1.30, -1.30], # normal braking
LongPersonality.aggressive: [-1.40, -1.40], # more aggressive braking
}
MIN_ACCEL_BREAKPOINTS = [0., 50.]
# Following Distance Profiles mapped to LongPersonality (relaxed/standard/aggressive)
FOLLOW_DISTANCE_PROFILES = {
LongPersonality.relaxed: {
'x_vel': [0., 19.7, 22.2, 40.],
'y_dist': [1.40, 1.40, 1.65, 1.65] # longer following distance
},
LongPersonality.standard: {
'x_vel': [0., 19.7, 22.2, 40.],
'y_dist': [1.35, 1.35, 1.40, 1.40] # normal following distance
},
LongPersonality.aggressive: {
'x_vel': [0., 19.7, 22.2, 40.],
'y_dist': [1.20, 1.20, 1.30, 1.30] # shorter following distance
}
}
class VibePersonalityController:
"""
Controller for managing separated acceleration and distance controls:
- AccelPersonality controls acceleration behavior (eco, normal, sport)
- LongPersonality controls braking and following distance (relaxed, standard, aggressive)
"""
def __init__(self):
self.params = Params()
self.frame = 0
# Separate personalities for acceleration and distance control
self.accel_personality = AccelPersonality.normal
self.long_personality = LongPersonality.standard
# Parameter keys
self.param_keys = {
'accel_personality': 'AccelPersonality', # eco=0, normal=1, sport=2
'long_personality': 'LongitudinalPersonality', # relaxed=0, standard=1, aggressive=2
'enabled': 'VibePersonalityEnabled',
'accel_enabled': 'VibeAccelPersonalityEnabled',
'follow_enabled': 'VibeFollowPersonalityEnabled'
}
# Precompute slopes for all personalities
self._precompute_slopes()
def _precompute_slopes(self):
"""Precompute all interpolation slopes for efficiency"""
self.max_accel_slopes = {}
self.min_accel_slopes = {}
self.follow_distance_slopes = {}
# Precompute for AccelPersonality (acceleration)
for personality in [AccelPersonality.eco, AccelPersonality.normal, AccelPersonality.sport]:
if personality in MAX_ACCEL_PROFILES:
self.max_accel_slopes[personality] = self._compute_slopes(MAX_ACCEL_BREAKPOINTS, MAX_ACCEL_PROFILES[personality])
# Precompute for LongPersonality (braking and following)
for personality in [LongPersonality.relaxed, LongPersonality.standard, LongPersonality.aggressive]:
if personality in MIN_ACCEL_PROFILES:
self.min_accel_slopes[personality] = self._compute_slopes(MIN_ACCEL_BREAKPOINTS, MIN_ACCEL_PROFILES[personality])
if personality in FOLLOW_DISTANCE_PROFILES:
profile = FOLLOW_DISTANCE_PROFILES[personality]
self.follow_distance_slopes[personality] = self._compute_slopes(profile['x_vel'], profile['y_dist'])
def _update_from_params(self):
"""Update personalities from params (rate limited)"""
if self.frame % int(1. / DT_MDL) != 0:
return
# Update AccelPersonality
try:
accel_personality_str = self.params.get(self.param_keys['accel_personality'], encoding='utf-8')
if accel_personality_str:
accel_personality_int = int(accel_personality_str)
if accel_personality_int in [AccelPersonality.eco, AccelPersonality.normal, AccelPersonality.sport]:
self.accel_personality = accel_personality_int
except (ValueError, TypeError):
pass
# Update LongPersonality
try:
long_personality_str = self.params.get(self.param_keys['long_personality'], encoding='utf-8')
if long_personality_str:
long_personality_int = int(long_personality_str)
if long_personality_int in [LongPersonality.relaxed, LongPersonality.standard, LongPersonality.aggressive]:
self.long_personality = long_personality_int
except (ValueError, TypeError):
pass
def _get_toggle_state(self, key: str, default: bool = True) -> bool:
"""Get toggle state with default fallback"""
return self.params.get_bool(self.param_keys.get(key, key)) if key in self.param_keys else default
def _set_toggle_state(self, key: str, value: bool):
"""Set toggle state in params"""
if key in self.param_keys:
self.params.put_bool(self.param_keys[key], value)
# AccelPersonality Management (for acceleration)
def set_accel_personality(self, personality: int) -> bool:
"""Set AccelPersonality (eco=0, normal=1, sport=2)"""
if personality in [AccelPersonality.eco, AccelPersonality.normal, AccelPersonality.sport]:
self.accel_personality = personality
self.params.put(self.param_keys['accel_personality'], str(personality))
return True
return False
def cycle_accel_personality(self) -> int:
"""Cycle through AccelPersonality: eco -> normal -> sport -> eco"""
personalities = [AccelPersonality.eco, AccelPersonality.normal, AccelPersonality.sport]
current_idx = personalities.index(self.accel_personality)
next_personality = personalities[(current_idx + 1) % len(personalities)]
self.set_accel_personality(next_personality)
return int(next_personality)
def get_accel_personality(self) -> int:
"""Get current AccelPersonality"""
self._update_from_params()
return int(self.accel_personality)
# LongPersonality Management (for braking and following distance)
def set_long_personality(self, personality: int) -> bool:
"""Set LongPersonality (relaxed=0, standard=1, aggressive=2)"""
if personality in [LongPersonality.relaxed, LongPersonality.standard, LongPersonality.aggressive]:
self.long_personality = personality
self.params.put(self.param_keys['long_personality'], str(personality))
return True
return False
def cycle_long_personality(self) -> int:
"""Cycle through LongPersonality: relaxed -> standard -> aggressive -> relaxed"""
personalities = [LongPersonality.relaxed, LongPersonality.standard, LongPersonality.aggressive]
current_idx = personalities.index(self.long_personality)
next_personality = personalities[(current_idx + 1) % len(personalities)]
self.set_long_personality(next_personality)
return int(next_personality)
def get_long_personality(self) -> int:
"""Get current LongPersonality"""
self._update_from_params()
return int(self.long_personality)
# Toggle Functions
def toggle_personality(self): return self._toggle_flag('enabled')
def toggle_accel_personality(self): return self._toggle_flag('accel_enabled')
def toggle_follow_distance_personality(self): return self._toggle_flag('follow_enabled')
def _toggle_flag(self, key):
current = self._get_toggle_state(key)
self._set_toggle_state(key, not current)
return not current
def set_personality_enabled(self, enabled: bool): self._set_toggle_state('enabled', enabled)
# Feature-specific enable checks
def is_accel_enabled(self) -> bool:
self._update_from_params()
return self._get_toggle_state('enabled') and self._get_toggle_state('accel_enabled')
def is_follow_enabled(self) -> bool:
self._update_from_params()
return self._get_toggle_state('enabled') and self._get_toggle_state('follow_enabled')
def is_enabled(self) -> bool:
self._update_from_params()
return (self._get_toggle_state('enabled') and
(self._get_toggle_state('accel_enabled') or self._get_toggle_state('follow_enabled')))
def get_accel_limits(self, v_ego: float) -> tuple[float, float] | None:
"""
Get acceleration limits based on current personalities.
- Max acceleration from AccelPersonality (eco/normal/sport)
- Min acceleration (braking) from LongPersonality (relaxed/standard/aggressive)
Returns None if controller is disabled.
"""
self._update_from_params()
if not self.is_accel_enabled():
return None
try:
# Max acceleration from AccelPersonality
max_a = self._interpolate(v_ego, MAX_ACCEL_BREAKPOINTS, MAX_ACCEL_PROFILES[self.accel_personality],
self.max_accel_slopes[self.accel_personality])
# Min acceleration (braking) from LongPersonality
min_a = self._interpolate(v_ego, MIN_ACCEL_BREAKPOINTS, MIN_ACCEL_PROFILES[self.long_personality],
self.min_accel_slopes[self.long_personality])
return float(min_a), float(max_a)
except (KeyError, IndexError):
return None
def get_follow_distance_multiplier(self, v_ego: float) -> float | None:
"""Get following distance multiplier based on LongPersonality only"""
self._update_from_params()
if not self.is_follow_enabled():
return None
try:
profile = FOLLOW_DISTANCE_PROFILES[self.long_personality]
multiplier = float(self._interpolate(v_ego, profile['x_vel'], profile['y_dist'],
self.follow_distance_slopes[self.long_personality]))
return multiplier
except (KeyError, IndexError):
return None
def get_personality_info(self) -> dict:
"""Get comprehensive info about current personalities and settings"""
self._update_from_params()
accel_names = {AccelPersonality.eco: "Eco", AccelPersonality.normal: "Normal", AccelPersonality.sport: "Sport"}
long_names = {LongPersonality.relaxed: "Relaxed", LongPersonality.standard: "Standard", LongPersonality.aggressive: "Aggressive"}
info = {
"accel_personality": accel_names.get(self.accel_personality, "Unknown"),
"accel_personality_int": self.accel_personality,
"long_personality": long_names.get(self.long_personality, "Unknown"),
"long_personality_int": self.long_personality,
"enabled": self._get_toggle_state('enabled'),
"accel_enabled": self._get_toggle_state('accel_enabled'),
"follow_enabled": self._get_toggle_state('follow_enabled'),
"accel_description": f"Acceleration: {accel_names.get(self.accel_personality, 'Unknown')}",
"long_description": f"Following/Braking: {long_names.get(self.long_personality, 'Unknown')}",
}
return info
def get_min_accel(self, v_ego: float) -> float | None:
"""Get minimum acceleration (braking) from distance mode"""
limits = self.get_accel_limits(v_ego)
return limits[0] if limits else None
def get_max_accel(self, v_ego: float) -> float | None:
"""Get maximum acceleration from drive mode"""
limits = self.get_accel_limits(v_ego)
return limits[1] if limits else None
def reset(self):
"""Reset to default modes"""
self.accel_personality = AccelPersonality.normal
self.long_personality = LongPersonality.standard
self.frame = 0
def update(self):
"""Update frame counter"""
self.frame = (self.frame + 1) % 1000000
def _compute_slopes(self, x, y):
"""Compute slopes for Hermite interpolation using symmetric difference method."""
n = len(x)
if n < 2:
raise ValueError("At least two points required")
m = np.zeros(n)
for i in range(n):
if i == 0:
m[i] = (y[1] - y[0]) / (x[1] - x[0])
elif i == n-1:
m[i] = (y[i] - y[i-1]) / (x[i] - x[i-1])
else:
m[i] = ((y[i+1] - y[i]) / (x[i+1] - x[i]) + (y[i] - y[i-1]) / (x[i] - x[i-1])) / 2
return m
def _interpolate(self, x, xp, yp, slopes):
"""Perform cubic Hermite interpolation."""
x = np.clip(x, xp[0], xp[-1])
idx = np.clip(np.searchsorted(xp, x) - 1, 0, len(slopes) - 2)
x0, x1 = xp[idx], xp[idx+1]
y0, y1 = yp[idx], yp[idx+1]
m0, m1 = slopes[idx], slopes[idx+1]
t = (x - x0) / (x1 - x0)
h = [2*t**3 - 3*t**2 + 1, t**3 - 2*t**2 + t, -2*t**3 + 3*t**2, t**3 - t**2]
return h[0]*y0 + h[1]*(x1 - x0)*m0 + h[2]*y1 + h[3]*(x1 - x0)*m1

View File

@@ -45,7 +45,6 @@ def manager_init() -> None:
]
sunnypilot_default_params: list[tuple[str, str | bytes]] = [
("AccelPersonality", "1"),
("AutoLaneChangeTimer", "0"),
("AutoLaneChangeBsmDelay", "0"),
("BlindSpot", "0"),
@@ -75,10 +74,6 @@ def manager_init() -> None:
("QuickBootToggle", "0"),
("QuietMode", "0"),
("ShowAdvancedControls", "0" if build_metadata.tested_channel else "1"),
("VibePersonalityEnabled", "0"),
("VibeAccelPersonalityEnabled", "0"),
("VibeFollowPersonalityEnabled", "0"),
]
# device boot mode

View File

@@ -88,9 +88,6 @@ def is_stock_model(started, params, CP: car.CarParams) -> bool:
"""Check if the active model runner is stock."""
return bool(get_active_model_runner(params, not started) == custom.ModelManagerSP.Runner.stock)
def mapd_ready(started: bool, params: Params, CP: car.CarParams) -> bool:
return bool(os.path.exists(Paths.mapd_root()))
def or_(*fns):
return lambda *args: operator.or_(*(fn(*args) for fn in fns))
@@ -165,7 +162,7 @@ procs += [
PythonProcess("backup_manager", "sunnypilot.sunnylink.backups.manager", and_(only_offroad, sunnylink_ready_shim)),
# mapd
NativeProcess("mapd", Paths.mapd_root(), [MAPD_PATH], mapd_ready),
NativeProcess("mapd", Paths.mapd_root(), [MAPD_PATH], always_run),
PythonProcess("mapd_manager", "sunnypilot.mapd.mapd_manager", always_run),
]

View File

@@ -83,10 +83,6 @@ class OpenpilotMetadata:
# touch this to get rid of the orange startup alert. there's better ways to do that
return self.git_normalized_origin == "github.com/commaai/openpilot"
@property
def sunnypilot_remote(self) -> bool:
return self.git_normalized_origin == "github.com/sunnypilot/sunnypilot"
@property
def git_normalized_origin(self) -> str:
return self.git_origin \

Binary file not shown.

1693
uv.lock generated

File diff suppressed because it is too large Load Diff