mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-07-17 10:52:04 +08:00
Compare commits
8 Commits
0.7.7-i18n
...
0.7.8-i18n
| Author | SHA1 | Date | |
|---|---|---|---|
| 05a127a38e | |||
| 580a5f5265 | |||
| 099e257c0f | |||
| 6426e62171 | |||
| d8c8f2bd65 | |||
| 657e180ba3 | |||
| 27e12ccad7 | |||
| 899f68dabf |
@@ -1,3 +1,53 @@
|
||||
dragonpilot 0.7.8.2
|
||||
========================
|
||||
* 修正在沒網路的情況下,開機超過五分鐘的問題。
|
||||
* Fixed 5+ minutes boot time issue when there is no internet connection.
|
||||
* 錯誤回傳改使用 dp 的主機。
|
||||
* Used dp server for error reporting.
|
||||
* 更新服務改使用 gitee 的 IP 檢查連線狀態。
|
||||
* updated service uses gitee IP address instead.
|
||||
|
||||
dragonpilot 0.7.8.1
|
||||
========================
|
||||
* 加入 ko-KR 翻譯。
|
||||
* Added ko-KR translation.
|
||||
* 加入 Honda Jade 支援。(感謝 @李俊灝)
|
||||
* Added Honda Jade support. (Thanks to @lijunhao731)
|
||||
* 修正 ui.cc 內存越界的問題。(感謝 @piggy 提供)
|
||||
* Fixed ui.cc memory out of bound issue. (Thanks to @piggy)
|
||||
* gpxd 記錄改自動存成 zip 格式。
|
||||
* gpxd now store in zip format.
|
||||
* 強制關閉 panda 檢查 DOS 硬體。
|
||||
* Force disabled DOS hardware check in panda.
|
||||
|
||||
dragonpilot 0.7.8.0
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.8 devel.
|
||||
* Based on latest openpilot 0.7.8 devel.
|
||||
* 加入重置 DP 設定按鈕。(感謝 @LOVEChen 建議)
|
||||
* Added "Reset DP Settings" button. (Thanks to @LOVEChen)
|
||||
* 將警示訊息更改為類似於概念 UI 的設計。
|
||||
* Alert messages changed to concept UI alike design.
|
||||
* 當 manager 出現錯誤後,按 Exit 按鈕會執行 reset_update 腳本。
|
||||
* Added ability to execute reset_update.sh when press "Exit" button once manager returned errors.
|
||||
|
||||
dragonpilot 0.7.7.3
|
||||
========================
|
||||
* 修正方向盤監控。
|
||||
* Fixed steering monitor timer param.
|
||||
* 修正行駛時關閉畫面導致當機的錯誤。(感謝 @salmankhan, @stevej99, @bobbydough 回報)
|
||||
* Fixed screen frozen issue when "screen off while driving" toggle is enabled. (Thanks to @salmankhan, @stevej99, @bobbydough)
|
||||
* 加回 Dev Mini UI 開關。(感謝 @Ninjaa 建議)
|
||||
* Re-added Dev Mini UI. (Thanks to @Ninjaa)
|
||||
* 新增 (dp_reset_live_parameters_on_start) 每次發車重設 LiveParameters 值。(感謝 @eisenheim)
|
||||
* Added ability (dp_reset_live_param_on_start) to reset LiveParameters on each start. (Thanks @eisenheim)
|
||||
* 修正同時開啟 dp_toyota_zss 和 dp_lqr 產生的錯誤。(感謝 @bobbydough)
|
||||
* Fixed error cuased by enabling both dp_toyota_zss and dp_lqr at the same time. (Thanks to @bobbydough)
|
||||
* 新增 (dp_gpxd) 將 GPS 軌跡導出至 GPX 格式 (/sdcard/gpx_logs/)的功能。 (感謝 @mageymoo1)
|
||||
* Added ability (dp_gpxd) to export GPS track into GPX files (/sdcard/gpx_logs/). (Thanks to @mageymoo1)
|
||||
* 使用德國的車道寬度估算值。 (感謝 @arne182)
|
||||
* Used lane width estimate value from Germany. (Thanks to @arne182)
|
||||
|
||||
dragonpilot 0.7.7.2
|
||||
========================
|
||||
* 加入 d_poly offset。 (感謝 @ShaneSmiskol)
|
||||
|
||||
@@ -1,3 +1,30 @@
|
||||
dragonpilot 0.7.8
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.8 devel.
|
||||
* Based on latest openpilot 0.7.8 devel.
|
||||
* 加入重置 DP 設定按鈕。(感謝 @LOVEChen 建議)
|
||||
* Added "Reset DP Settings" button. (Thanks to @LOVEChen)
|
||||
* 將警示訊息更改為類似於概念 UI 的設計。
|
||||
* Alert messages changed to concept UI alike design.
|
||||
* 當 manager 出現錯誤後,按 Exit 按鈕會執行 reset_update 腳本。
|
||||
* Added ability to execute reset_update.sh when press "Exit" button once manager returned errors.
|
||||
* 加入 ko-KR 翻譯。
|
||||
* Added ko-KR translation.
|
||||
* 加入 Honda Jade 支援。(感謝 @李俊灝)
|
||||
* Added Honda Jade support. (Thanks to @lijunhao731)
|
||||
* 修正 ui.cc 內存越界的問題。(感謝 @piggy 提供)
|
||||
* Fixed ui.cc memory out of bound issue. (Thanks to @piggy)
|
||||
* gpxd 記錄改自動存成 zip 格式。
|
||||
* gpxd now store in zip format.
|
||||
* 強制關閉 panda 檢查 DOS 硬體。
|
||||
* Force disabled DOS hardware check in panda.
|
||||
* 修正在沒網路的情況下,開機超過五分鐘的問題。
|
||||
* Fixed 5+ minutes boot time issue when there is no internet connection.
|
||||
* 錯誤回傳改使用 dp 的主機。
|
||||
* Used dp server for error reporting.
|
||||
* 更新服務改使用 gitee 的 IP 檢查連線狀態。
|
||||
* updated service uses gitee IP address instead.
|
||||
|
||||
dragonpilot 0.7.7.0
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.7 devel.
|
||||
|
||||
@@ -1,3 +1,77 @@
|
||||
2020-09-23 (0.7.8.0)
|
||||
========================
|
||||
* 修正在沒網路的情況下,開機超過五分鐘的問題。
|
||||
* Fixed 5+ minutes boot time issue when there is no internet connection.
|
||||
* 錯誤回傳改使用 dp 的主機。
|
||||
* Used dp server for error reporting.
|
||||
* 更新服務改使用 gitee 的 IP 檢查連線狀態。
|
||||
* updated service uses gitee IP address instead.
|
||||
|
||||
2020-09-21 (0.7.8.0)
|
||||
========================
|
||||
* 強制關閉 panda 檢查 DOS 硬體。
|
||||
* Force disabled DOS hardware check in panda.
|
||||
|
||||
2020-09-18 (0.7.8.0)
|
||||
========================
|
||||
* gpxd 記錄改自動存成 zip 格式。
|
||||
* gpxd now store in zip format.
|
||||
|
||||
2020-09-15 (0.7.8.0)
|
||||
========================
|
||||
* 加入 Honda Jade 支援。(感謝 @李俊灝)
|
||||
* Added Honda Jade support. (Thanks to @lijunhao731)
|
||||
* 修正 ui.cc 內存越界的問題。(感謝 @piggy 提供)
|
||||
* Fixed ui.cc memory out of bound issue. (Thanks to @piggy)
|
||||
|
||||
2020-09-01 (0.7.8.0)
|
||||
========================
|
||||
* 加入 ko-KR 翻譯。
|
||||
* Added ko-KR translation.
|
||||
|
||||
2020-08-21 (0.7.8.0)
|
||||
========================
|
||||
* 基於最新 openpilot 0.7.8 devel.
|
||||
* Based on latest openpilot 0.7.8 devel.
|
||||
* 加入重置 DP 設定按鈕。(感謝 @LOVEChen 建議)
|
||||
* Added "Reset DP Settings" button. (Thanks to @LOVEChen)
|
||||
* 將警示訊息更改為類似於概念 UI 的設計。
|
||||
* Alert messages changed to concept UI alike design.
|
||||
* 當 manager 出現錯誤後,按 Exit 按鈕會執行 reset_update 腳本。
|
||||
* Added ability to execute reset_update.sh when press "Exit" button once manager returned errors.
|
||||
|
||||
2020-08-18 (0.7.7.0)
|
||||
========================
|
||||
* gpxd 不再切換至 GCJ-02 格式。(感謝 @arne182 建議)
|
||||
* gpxd no longer switch to GCJ-02 format automatically. (Thanks to @arne182)
|
||||
* 修正方向盤監控。
|
||||
* Fixed steering monitor timer param.
|
||||
* 修正行駛時關閉畫面導致當機的錯誤。(感謝 @salmankhan, @stevej99, @bobbydough 回報)
|
||||
* Fixed screen frozen issue when "screen off while driving" toggle is enabled. (Thanks to @salmankhan, @stevej99, @bobbydough)
|
||||
* 加回 Dev Mini UI 開關。(感謝 @Ninjaa 建議)
|
||||
* Re-added Dev Mini UI. (Thanks to @Ninjaa)
|
||||
|
||||
2020-08-17 (0.7.7.0)
|
||||
========================
|
||||
* gpxd 只儲存高精度數據。(感謝 @arne182)
|
||||
* gpxd now only stored high accuracy data. (Thanks to @arne182)
|
||||
* gpxd 加入自動切換成 GCJ-02 格式。
|
||||
* added ability to switch to GCJ-02 format in gpxd.
|
||||
* 新增 (dp_reset_live_parameters_on_start) 每次發車重設 LiveParameters 值。(感謝 @eisenheim)
|
||||
* Added ability (dp_reset_live_param_on_start) to reset LiveParameters on each start. (Thanks @eisenheim)
|
||||
|
||||
2020-08-12 (0.7.7.0)
|
||||
========================
|
||||
* 修正同時開啟 dp_toyota_zss 和 dp_lqr 產生的錯誤。(感謝 @bobbydough)
|
||||
* Fixed error cuased by enabling both dp_toyota_zss and dp_lqr at the same time. (Thanks to @bobbydough)
|
||||
|
||||
2020-08-12 (0.7.7.0)
|
||||
========================
|
||||
* 新增 (dp_gpxd) 將 GPS 軌跡導出至 GPX 格式 (/sdcard/gpx_logs/)的功能。 (感謝 @mageymoo1)
|
||||
* Added ability (dp_gpxd) to export GPS track into GPX files (/sdcard/gpx_logs/). (Thanks to @mageymoo1)
|
||||
* 使用德國的車道寬度估算值。 (感謝 @arne182)
|
||||
* Used lane width estimate value from Germany. (Thanks to @arne182)
|
||||
|
||||
2020-08-11 (0.7.7.0)
|
||||
========================
|
||||
* 加入 d_poly offset。 (感謝 @ShaneSmiskol)
|
||||
|
||||
Vendored
+105
-46
@@ -1,33 +1,60 @@
|
||||
pipeline {
|
||||
agent {
|
||||
docker {
|
||||
image 'python:3.7.3'
|
||||
args '--user=root'
|
||||
def phone(String ip, String step_label, String cmd) {
|
||||
def ci_env = "CI=1 TEST_DIR=${env.TEST_DIR} GIT_BRANCH=${env.GIT_BRANCH} GIT_COMMIT=${env.GIT_COMMIT}"
|
||||
|
||||
withCredentials([file(credentialsId: 'id_rsa_public', variable: 'key_file')]) {
|
||||
sh label: step_label,
|
||||
script: """
|
||||
ssh -tt -o StrictHostKeyChecking=no -i ${key_file} -p 8022 root@${ip} '${ci_env} /usr/bin/bash -le' <<'EOF'
|
||||
echo \$\$ > /dev/cpuset/app/tasks || true
|
||||
echo \$PPID > /dev/cpuset/app/tasks || true
|
||||
mkdir -p /dev/shm
|
||||
chmod 777 /dev/shm
|
||||
cd ${env.TEST_DIR} || true
|
||||
${cmd}
|
||||
exit 0
|
||||
EOF"""
|
||||
}
|
||||
}
|
||||
|
||||
def phone_steps(String device_type, steps) {
|
||||
lock(resource: "", label: device_type, inversePrecedence: true, variable: 'device_ip', quantity: 1) {
|
||||
timeout(time: 60, unit: 'MINUTES') {
|
||||
phone(device_ip, "kill old processes", "pkill -f comma || true")
|
||||
phone(device_ip, "git checkout", readFile("selfdrive/test/setup_device_ci.sh"),)
|
||||
steps.each { item ->
|
||||
phone(device_ip, item[0], item[1])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pipeline {
|
||||
agent none
|
||||
environment {
|
||||
COMMA_JWT = credentials('athena-test-jwt')
|
||||
TEST_DIR = "/data/openpilot"
|
||||
}
|
||||
|
||||
stages {
|
||||
|
||||
stage('Release Build') {
|
||||
agent {
|
||||
docker {
|
||||
image 'python:3.7.3'
|
||||
args '--user=root'
|
||||
}
|
||||
}
|
||||
when {
|
||||
branch 'devel-staging'
|
||||
}
|
||||
steps {
|
||||
lock(resource: "", label: 'eon-build', inversePrecedence: true, variable: 'eon_ip', quantity: 1){
|
||||
timeout(time: 60, unit: 'MINUTES') {
|
||||
dir(path: 'selfdrive/test') {
|
||||
sh 'pip install paramiko'
|
||||
sh 'python phone_ci.py "cd release && PUSH=1 ./build_release2.sh"'
|
||||
}
|
||||
}
|
||||
}
|
||||
phone_steps("eon-build", [
|
||||
["build release2-staging and dashcam-staging", "cd release && PUSH=1 ./build_release2.sh"],
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
stage('On-device Tests') {
|
||||
stage('openpilot tests') {
|
||||
when {
|
||||
not {
|
||||
anyOf {
|
||||
@@ -36,48 +63,80 @@ pipeline {
|
||||
}
|
||||
}
|
||||
|
||||
parallel {
|
||||
|
||||
stage('Build') {
|
||||
environment {
|
||||
CI_PUSH = "${env.BRANCH_NAME == 'master' ? 'master-ci' : ''}"
|
||||
stages {
|
||||
|
||||
/*
|
||||
stage('PC tests') {
|
||||
agent {
|
||||
dockerfile {
|
||||
filename 'Dockerfile.openpilot'
|
||||
args '--privileged --shm-size=1G --user=root'
|
||||
}
|
||||
}
|
||||
|
||||
steps {
|
||||
lock(resource: "", label: 'eon', inversePrecedence: true, variable: 'eon_ip', quantity: 1){
|
||||
timeout(time: 60, unit: 'MINUTES') {
|
||||
dir(path: 'selfdrive/test') {
|
||||
sh 'pip install paramiko'
|
||||
sh 'python phone_ci.py "cd release && ./build_devel.sh"'
|
||||
}
|
||||
stages {
|
||||
stage('Build') {
|
||||
steps {
|
||||
sh 'scons -j$(nproc)'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Replay Tests') {
|
||||
steps {
|
||||
lock(resource: "", label: 'eon2', inversePrecedence: true, variable: 'eon_ip', quantity: 1){
|
||||
timeout(time: 60, unit: 'MINUTES') {
|
||||
dir(path: 'selfdrive/test') {
|
||||
sh 'pip install paramiko'
|
||||
sh 'python phone_ci.py "cd selfdrive/test/process_replay && ./camera_replay.py"'
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
// fix permissions since docker runs as another user
|
||||
sh "chmod -R 777 ."
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
stage('HW Tests') {
|
||||
steps {
|
||||
lock(resource: "", label: 'eon', inversePrecedence: true, variable: 'eon_ip', quantity: 1){
|
||||
timeout(time: 60, unit: 'MINUTES') {
|
||||
dir(path: 'selfdrive/test') {
|
||||
sh 'pip install paramiko'
|
||||
sh 'python phone_ci.py "SCONS_CACHE=1 scons -j3 cereal/ && \
|
||||
nosetests -s selfdrive/test/test_sounds.py && \
|
||||
nosetests -s selfdrive/boardd/tests/test_boardd_loopback.py"'
|
||||
stage('On-device Tests') {
|
||||
agent {
|
||||
docker {
|
||||
image 'python:3.7.3'
|
||||
args '--user=root'
|
||||
}
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('parallel tests') {
|
||||
parallel {
|
||||
|
||||
stage('Devel Build') {
|
||||
environment {
|
||||
CI_PUSH = "${env.BRANCH_NAME == 'master' ? 'master-ci' : ' '}"
|
||||
}
|
||||
steps {
|
||||
phone_steps("eon", [
|
||||
["build devel", "cd release && CI_PUSH=${env.CI_PUSH} ./build_devel.sh"],
|
||||
["test openpilot", "nosetests -s selfdrive/test/test_openpilot.py"],
|
||||
["test cpu usage", "cd selfdrive/test/ && ./test_cpu_usage.py"],
|
||||
["test car interfaces", "cd selfdrive/car/tests/ && ./test_car_interfaces.py"],
|
||||
["test spinner build", "cd selfdrive/ui/spinner && make clean && make"],
|
||||
["test text window build", "cd selfdrive/ui/text && make clean && make"],
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
stage('Replay Tests') {
|
||||
steps {
|
||||
phone_steps("eon2", [
|
||||
["camerad/modeld replay", "cd selfdrive/test/process_replay && ./camera_replay.py"],
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
stage('HW + Unit Tests') {
|
||||
steps {
|
||||
phone_steps("eon", [
|
||||
["build cereal", "SCONS_CACHE=1 scons -j4 cereal/"],
|
||||
["test sounds", "nosetests -s selfdrive/test/test_sounds.py"],
|
||||
["test boardd loopback", "nosetests -s selfdrive/boardd/tests/test_boardd_loopback.py"],
|
||||
//["test updater", "python installer/updater/test_updater.py"],
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ Supported Cars
|
||||
| ----------| ------------------------------| ------------------| -----------------| -------------------| ------------------|
|
||||
| Acura | ILX 2016-18 | AcuraWatch Plus | openpilot | 25mph<sup>1</sup> | 25mph |
|
||||
| Acura | RDX 2016-18 | AcuraWatch Plus | openpilot | 25mph<sup>1</sup> | 12mph |
|
||||
| Honda | Accord 2018-19 | All | Stock | 0mph | 3mph |
|
||||
| Honda | Accord 2018-20 | All | Stock | 0mph | 3mph |
|
||||
| Honda | Accord Hybrid 2018-20 | All | Stock | 0mph | 3mph |
|
||||
| Honda | Civic Hatchback 2017-19 | Honda Sensing | Stock | 0mph | 12mph |
|
||||
| Honda | Civic Sedan/Coupe 2016-18 | Honda Sensing | openpilot | 0mph | 12mph |
|
||||
@@ -76,7 +76,7 @@ Supported Cars
|
||||
| Honda | CR-V Hybrid 2017-2019 | Honda Sensing | Stock | 0mph | 12mph |
|
||||
| Honda | Fit 2018-19 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
|
||||
| Honda | HR-V 2019 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
|
||||
| Honda | Insight 2019 | Honda Sensing | Stock | 0mph | 3mph |
|
||||
| Honda | Insight 2019-20 | Honda Sensing | Stock | 0mph | 3mph |
|
||||
| Honda | Odyssey 2018-20 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 0mph |
|
||||
| Honda | Passport 2019 | All | openpilot | 25mph<sup>1</sup> | 12mph |
|
||||
| Honda | Pilot 2016-18 | Honda Sensing | openpilot | 25mph<sup>1</sup> | 12mph |
|
||||
@@ -136,6 +136,7 @@ Community Maintained Cars and Features
|
||||
| Chrysler | Pacifica 2020 | Adaptive Cruise | Stock | 0mph | 39mph |
|
||||
| Chrysler | Pacifica Hybrid 2017-18 | Adaptive Cruise | Stock | 0mph | 9mph |
|
||||
| Chrysler | Pacifica Hybrid 2019-20 | Adaptive Cruise | Stock | 0mph | 39mph |
|
||||
| Genesis | G70 2018 | All | Stock | 0mph | 0mph |
|
||||
| Genesis | G80 2018 | All | Stock | 0mph | 0mph |
|
||||
| Genesis | G90 2018 | All | Stock | 0mph | 0mph |
|
||||
| GMC | Acadia Denali 2018<sup>2</sup>| Adaptive Cruise | openpilot | 0mph | 7mph |
|
||||
@@ -144,11 +145,12 @@ Community Maintained Cars and Features
|
||||
| Hyundai | Genesis 2015-16 | SCC + LKAS | Stock | 19mph | 37mph |
|
||||
| Hyundai | Ioniq Electric Premium SE 2020| SCC + LKAS | Stock | 0mph | 32mph |
|
||||
| Hyundai | Ioniq Electric Limited 2019 | SCC + LKAS | Stock | 0mph | 32mph |
|
||||
| Hyundai | Kona 2017-19 | SCC + LKAS | Stock | 22mph | 0mph |
|
||||
| Hyundai | Kona 2020 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Hyundai | Kona EV 2019 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Hyundai | Palisade 2020 | All | Stock | 0mph | 0mph |
|
||||
| Hyundai | Santa Fe 2019 | All | Stock | 0mph | 0mph |
|
||||
| Hyundai | Sonata 2019 | All | Stock | 0mph | 0mph |
|
||||
| Hyundai | Veloster 2019 | SCC + LKAS | Stock | 5mph | 0mph |
|
||||
| Jeep | Grand Cherokee 2016-18 | Adaptive Cruise | Stock | 0mph | 9mph |
|
||||
| Jeep | Grand Cherokee 2019-20 | Adaptive Cruise | Stock | 0mph | 39mph |
|
||||
| Kia | Forte 2018-19 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
@@ -156,9 +158,9 @@ Community Maintained Cars and Features
|
||||
| Kia | Optima 2019 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Kia | Sorento 2018 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Kia | Stinger 2018 | SCC + LKAS | Stock | 0mph | 0mph |
|
||||
| Nissan | Leaf 2018-19<sup>2</sup> | Propilot | Stock | 0mph | 0mph |
|
||||
| Nissan | Rogue 2019<sup>2</sup> | Propilot | Stock | 0mph | 0mph |
|
||||
| Nissan | X-Trail 2017<sup>2</sup> | Propilot | Stock | 0mph | 0mph |
|
||||
| Nissan | Leaf 2018-19 | Propilot | Stock | 0mph | 0mph |
|
||||
| Nissan | Rogue 2019 | Propilot | Stock | 0mph | 0mph |
|
||||
| Nissan | X-Trail 2017 | Propilot | Stock | 0mph | 0mph |
|
||||
| Subaru | Ascent 2019 | EyeSight | Stock | 0mph | 0mph |
|
||||
| Subaru | Crosstrek 2018-19 | EyeSight | Stock | 0mph | 0mph |
|
||||
| Subaru | Forester 2019 | EyeSight | Stock | 0mph | 0mph |
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
Version 0.7.8 (2020-08-19)
|
||||
========================
|
||||
* New driver monitoring model: improved face detection and better compatibility with sunglasses
|
||||
* Download NEOS operating system updates in the background
|
||||
* Improved updater reliability and responsiveness
|
||||
* Hyundai Kona 2020, Veloster 2019, and Genesis G70 2018 support thanks to xps-genesis!
|
||||
|
||||
Version 0.7.7 (2020-07-20)
|
||||
========================
|
||||
* White panda is no longer supported, upgrade to comma two or black panda
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import Cython
|
||||
import distutils
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
@@ -12,6 +14,10 @@ AddOption('--asan',
|
||||
action='store_true',
|
||||
help='turn on ASAN')
|
||||
|
||||
# Rebuild cython extensions if python, distutils, or cython change
|
||||
cython_dependencies = [Value(v) for v in (sys.version, distutils.__version__, Cython.__version__)]
|
||||
Export('cython_dependencies')
|
||||
|
||||
arch = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip()
|
||||
if platform.system() == "Darwin":
|
||||
arch = "Darwin"
|
||||
|
||||
Binary file not shown.
+19
-20
@@ -1,35 +1,34 @@
|
||||
Import('env', 'arch', 'zmq')
|
||||
Import('env', 'arch', 'zmq', 'cython_dependencies')
|
||||
|
||||
import shutil
|
||||
|
||||
gen_dir = Dir('gen')
|
||||
messaging_dir = Dir('messaging')
|
||||
|
||||
# TODO: remove src-prefix and cereal from command string. can we set working directory?
|
||||
env.Command(["gen/c/include/c++.capnp.h", "gen/c/include/java.capnp.h"], [], "mkdir -p " + gen_dir.path + "/c/include && touch $TARGETS")
|
||||
env.Command(
|
||||
['gen/cpp/car.capnp.c++', 'gen/cpp/log.capnp.c++', 'gen/cpp/car.capnp.h', 'gen/cpp/log.capnp.h'],
|
||||
['car.capnp', 'log.capnp'],
|
||||
'capnpc $SOURCES --src-prefix=cereal -o c++:' + gen_dir.path + '/cpp/')
|
||||
import shutil
|
||||
env.Command(['gen/cpp/car.capnp.c++', 'gen/cpp/log.capnp.c++', 'gen/cpp/car.capnp.h', 'gen/cpp/log.capnp.h'],
|
||||
['car.capnp', 'log.capnp'],
|
||||
'capnpc $SOURCES --src-prefix=cereal -o c++:' + gen_dir.path + '/cpp/')
|
||||
|
||||
if shutil.which('capnpc-java'):
|
||||
env.Command(
|
||||
['gen/java/Car.java', 'gen/java/Log.java'],
|
||||
['car.capnp', 'log.capnp'],
|
||||
'capnpc $SOURCES --src-prefix=cereal -o java:' + gen_dir.path + '/java/')
|
||||
env.Command(['gen/java/Car.java', 'gen/java/Log.java'],
|
||||
['car.capnp', 'log.capnp'],
|
||||
'capnpc $SOURCES --src-prefix=cereal -o java:' + gen_dir.path + '/java/')
|
||||
|
||||
# TODO: remove non shared cereal and messaging
|
||||
cereal_objects = env.SharedObject([
|
||||
'gen/cpp/car.capnp.c++',
|
||||
'gen/cpp/log.capnp.c++',
|
||||
])
|
||||
'gen/cpp/car.capnp.c++',
|
||||
'gen/cpp/log.capnp.c++',
|
||||
])
|
||||
|
||||
env.Library('cereal', cereal_objects)
|
||||
env.SharedLibrary('cereal_shared', cereal_objects)
|
||||
|
||||
cereal_dir = Dir('.')
|
||||
services_h = env.Command(
|
||||
['services.h'],
|
||||
['service_list.yaml', 'services.py'],
|
||||
'python3 ' + cereal_dir.path + '/services.py > $TARGET')
|
||||
services_h = env.Command(['services.h'],
|
||||
['service_list.yaml', 'services.py'],
|
||||
'python3 ' + cereal_dir.path + '/services.py > $TARGET')
|
||||
|
||||
messaging_objects = env.SharedObject([
|
||||
'messaging/messaging.cc',
|
||||
@@ -56,9 +55,9 @@ Depends('messaging/bridge.cc', services_h)
|
||||
#env.Program('messaging/demo', ['messaging/demo.cc'], LIBS=[messaging_lib, 'zmq'])
|
||||
|
||||
|
||||
env.Command(['messaging/messaging_pyx.so'],
|
||||
[messaging_lib, 'messaging/messaging_pyx_setup.py', 'messaging/messaging_pyx.pyx', 'messaging/messaging.pxd'],
|
||||
"cd " + messaging_dir.path + " && python3 messaging_pyx_setup.py build_ext --inplace")
|
||||
env.Command(['messaging/messaging_pyx.so', 'messaging/messaging_pyx.cpp'],
|
||||
cython_dependencies + [messaging_lib, 'messaging/messaging_pyx_setup.py', 'messaging/messaging_pyx.pyx', 'messaging/messaging.pxd'],
|
||||
"cd " + messaging_dir.path + " && python3 messaging_pyx_setup.py build_ext --inplace")
|
||||
|
||||
|
||||
if GetOption('test'):
|
||||
|
||||
+8
-6
@@ -112,14 +112,15 @@ struct CarEvent @0x9b1657f34caf3ad3 {
|
||||
wrongCruiseMode @87;
|
||||
neosUpdateRequired @88;
|
||||
modeldLagging @89;
|
||||
deviceFalling @90;
|
||||
|
||||
#dp
|
||||
preLaneChangeLeftALC @90;
|
||||
preLaneChangeRightALC @91;
|
||||
laneChangeALC @92;
|
||||
manualSteeringRequired @93;
|
||||
manualSteeringRequiredBlinkersOn @94;
|
||||
leadCarMoving @95;
|
||||
preLaneChangeLeftALC @91;
|
||||
preLaneChangeRightALC @92;
|
||||
laneChangeALC @93;
|
||||
manualSteeringRequired @94;
|
||||
manualSteeringRequiredBlinkersOn @95;
|
||||
leadCarMoving @96;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -485,6 +486,7 @@ struct CarParams {
|
||||
volkswagenPq @21;
|
||||
subaruLegacy @22; # pre-Global platform
|
||||
hyundaiLegacy @23;
|
||||
hyundaiCommunity @24;
|
||||
}
|
||||
|
||||
enum SteerControlType {
|
||||
|
||||
+39
-33
@@ -441,18 +441,22 @@ struct RadarState @0x9a185389d6fdd05f {
|
||||
struct LiveCalibrationData {
|
||||
# deprecated
|
||||
warpMatrix @0 :List(Float32);
|
||||
|
||||
# camera_frame_from_model_frame
|
||||
warpMatrix2 @5 :List(Float32);
|
||||
warpMatrixBig @6 :List(Float32);
|
||||
|
||||
calStatus @1 :Int8;
|
||||
calCycle @2 :Int32;
|
||||
calPerc @3 :Int8;
|
||||
validBlocks @9 :Int32;
|
||||
|
||||
# view_frame_from_road_frame
|
||||
# ui's is inversed needs new
|
||||
extrinsicMatrix @4 :List(Float32);
|
||||
# the direction of travel vector in device frame
|
||||
rpyCalib @7 :List(Float32);
|
||||
rpyCalibSpread @8 :List(Float32);
|
||||
}
|
||||
|
||||
struct LiveTracks {
|
||||
@@ -867,6 +871,7 @@ struct LiveLocationKalman {
|
||||
posenetOK @18 :Bool = true;
|
||||
gpsOK @19 :Bool = true;
|
||||
sensorsOK @21 :Bool = true;
|
||||
deviceStable @22 :Bool = true;
|
||||
|
||||
enum Status {
|
||||
uninitialized @0;
|
||||
@@ -2081,11 +2086,11 @@ struct DragonConf {
|
||||
dpSteeringLimitAlert @12 :Bool;
|
||||
dpSteeringOnSignal @13 :Bool;
|
||||
dpSignalOffDelay @14 :UInt8;
|
||||
dpAssistedLcMinMph @15 :UInt8;
|
||||
dpAssistedLcMinMph @15 :Float32;
|
||||
dpAutoLc @16 :Bool;
|
||||
dpAutoLcCont @17 :Bool;
|
||||
dpAutoLcMinMph @18 :UInt8;
|
||||
dpAutoLcDelay @19 :UInt8;
|
||||
dpAutoLcMinMph @18 :Float32;
|
||||
dpAutoLcDelay @19 :Float32;
|
||||
dpSlowOnCurve @20 :Bool;
|
||||
dpAllowGas @21 :Bool;
|
||||
dpMaxCtrlSpeed @22 :Float32;
|
||||
@@ -2108,34 +2113,35 @@ struct DragonConf {
|
||||
dpUiPath @39 :Bool;
|
||||
dpUiLead @40 :Bool;
|
||||
dpUiDev @41 :Bool;
|
||||
dpUiBlinker @42 :Bool;
|
||||
dpUiBrightness @43 :UInt8;
|
||||
dpUiVolumeBoost @44 :Int8;
|
||||
dpAppAutoUpdate @45 :Bool;
|
||||
dpAppExtGps @46 :Bool;
|
||||
dpAppTomtom @47 :Bool;
|
||||
dpAppTomtomAuto @48 :Bool;
|
||||
dpAppTomtomManual @49 :Int8;
|
||||
dpAppAutonavi @50 :Bool;
|
||||
dpAppAutonaviAuto @51 :Bool;
|
||||
dpAppAutonaviManual @52 :Int8;
|
||||
dpAppAegis @53 :Bool;
|
||||
dpAppAegisAuto @54 :Bool;
|
||||
dpAppAegisManual @55 :Int8;
|
||||
dpAppMixplorer @56 :Bool;
|
||||
dpAppMixplorerManual @57 :Int8;
|
||||
dpToyotaLdw @58 :Bool;
|
||||
dpToyotaSng @59 :Bool;
|
||||
dpToyotaLowestCruiseOverride @60 :Bool;
|
||||
dpToyotaLowestCruiseOverrideAt @61 :Float32;
|
||||
dpToyotaLowestCruiseOverrideSpeed @62 :Float32;
|
||||
dpIpAddr @63 :Text;
|
||||
dpCameraOffset @64 :Int8;
|
||||
dpLocale @65 :Text;
|
||||
dpChargingCtrl @66 :Bool;
|
||||
dpChargingAt @67 :UInt8;
|
||||
dpDischargingAt @68 :UInt8;
|
||||
dpIsUpdating @69 :Bool;
|
||||
dpThermalStarted @70 :Bool;
|
||||
dpThermalOverheat @71 :Bool;
|
||||
dpUiDevMini @42 :Bool;
|
||||
dpUiBlinker @43 :Bool;
|
||||
dpUiBrightness @44 :UInt8;
|
||||
dpUiVolumeBoost @45 :Int8;
|
||||
dpAppAutoUpdate @46 :Bool;
|
||||
dpAppExtGps @47 :Bool;
|
||||
dpAppTomtom @48 :Bool;
|
||||
dpAppTomtomAuto @49 :Bool;
|
||||
dpAppTomtomManual @50 :Int8;
|
||||
dpAppAutonavi @51 :Bool;
|
||||
dpAppAutonaviAuto @52 :Bool;
|
||||
dpAppAutonaviManual @53 :Int8;
|
||||
dpAppAegis @54 :Bool;
|
||||
dpAppAegisAuto @55 :Bool;
|
||||
dpAppAegisManual @56 :Int8;
|
||||
dpAppMixplorer @57 :Bool;
|
||||
dpAppMixplorerManual @58 :Int8;
|
||||
dpToyotaLdw @59 :Bool;
|
||||
dpToyotaSng @60 :Bool;
|
||||
dpToyotaLowestCruiseOverride @61 :Bool;
|
||||
dpToyotaLowestCruiseOverrideAt @62 :Float32;
|
||||
dpToyotaLowestCruiseOverrideSpeed @63 :Float32;
|
||||
dpIpAddr @64 :Text;
|
||||
dpCameraOffset @65 :Int8;
|
||||
dpLocale @66 :Text;
|
||||
dpChargingCtrl @67 :Bool;
|
||||
dpChargingAt @68 :UInt8;
|
||||
dpDischargingAt @69 :UInt8;
|
||||
dpIsUpdating @70 :Bool;
|
||||
dpThermalStarted @71 :Bool;
|
||||
dpThermalOverheat @72 :Bool;
|
||||
}
|
||||
|
||||
@@ -122,13 +122,6 @@ def recv_one_retry(sock):
|
||||
if dat is not None:
|
||||
return log.Event.from_bytes(dat)
|
||||
|
||||
# TODO: This does not belong in messaging
|
||||
def get_one_can(logcan):
|
||||
while True:
|
||||
can = recv_one_retry(logcan)
|
||||
if len(can.can) > 0:
|
||||
return can
|
||||
|
||||
class SubMaster():
|
||||
def __init__(self, services, ignore_alive=None, addr="127.0.0.1"):
|
||||
self.poller = Poller()
|
||||
|
||||
@@ -59,34 +59,36 @@ public:
|
||||
};
|
||||
|
||||
class SubMaster {
|
||||
public:
|
||||
public:
|
||||
SubMaster(const std::initializer_list<const char *> &service_list,
|
||||
const char *address = nullptr, const std::initializer_list<const char *> &ignore_alive = {});
|
||||
int update(int timeout = 1000);
|
||||
inline bool allAlive(const std::initializer_list<const char *> &service_list = {}) { return all_(service_list, false, true); }
|
||||
inline bool allValid(const std::initializer_list<const char *> &service_list = {}) { return all_(service_list, true, false); }
|
||||
inline bool allAliveAndValid(const std::initializer_list<const char *> &service_list = {}) { return all_(service_list, true, true); }
|
||||
bool updated(const char *name) const;
|
||||
void drain();
|
||||
cereal::Event::Reader &operator[](const char *name);
|
||||
~SubMaster();
|
||||
|
||||
private:
|
||||
uint64_t frame = 0;
|
||||
bool updated(const char *name) const;
|
||||
uint64_t rcv_frame(const char *name) const;
|
||||
cereal::Event::Reader &operator[](const char *name);
|
||||
|
||||
private:
|
||||
bool all_(const std::initializer_list<const char *> &service_list, bool valid, bool alive);
|
||||
Poller *poller_ = nullptr;
|
||||
uint64_t frame_ = 0;
|
||||
struct SubMessage;
|
||||
std::map<SubSocket *, SubMessage *> messages_;
|
||||
std::map<std::string, SubMessage *> services_;
|
||||
};
|
||||
|
||||
class PubMaster {
|
||||
public:
|
||||
public:
|
||||
PubMaster(const std::initializer_list<const char *> &service_list);
|
||||
inline int send(const char *name, capnp::byte *data, size_t size) { return sockets_.at(name)->send((char *)data, size); }
|
||||
int send(const char *name, capnp::MessageBuilder &msg);
|
||||
~PubMaster();
|
||||
|
||||
private:
|
||||
private:
|
||||
std::map<std::string, PubSocket *> sockets_;
|
||||
};
|
||||
|
||||
@@ -39,7 +39,7 @@ if ARCH == "aarch64" and os.path.isdir("/system"):
|
||||
extra_compile_args += ["-Wno-deprecated-register"]
|
||||
libraries += ['gnustl_shared']
|
||||
|
||||
setup(name='CAN parser',
|
||||
setup(name='messaging',
|
||||
cmdclass={'build_ext': BuildExtWithoutPlatformSuffix},
|
||||
ext_modules=cythonize(
|
||||
Extension(
|
||||
@@ -51,7 +51,7 @@ setup(name='CAN parser',
|
||||
extra_objects=[
|
||||
os.path.join(os.path.dirname(os.path.realpath(__file__)), '../', 'libmessaging.a'),
|
||||
]
|
||||
)
|
||||
),
|
||||
nthreads=4,
|
||||
),
|
||||
nthreads=4,
|
||||
)
|
||||
|
||||
@@ -2,20 +2,24 @@
|
||||
#include <time.h>
|
||||
#include "messaging.hpp"
|
||||
#include "services.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define CLOCK_BOOTTIME CLOCK_MONOTONIC
|
||||
#endif
|
||||
|
||||
static inline uint64_t nanos_since_boot() {
|
||||
struct timespec t;
|
||||
clock_gettime(CLOCK_BOOTTIME, &t);
|
||||
return t.tv_sec * 1000000000ULL + t.tv_nsec;
|
||||
}
|
||||
|
||||
static const service *get_service(const char *name) {
|
||||
for (const auto &it : services) {
|
||||
if (strcmp(it.name, name) == 0) return ⁢
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static inline bool inList(const std::initializer_list<const char *> &list, const char *value) {
|
||||
for (auto &v : list) {
|
||||
if (strcmp(value, v) == 0) return true;
|
||||
@@ -24,7 +28,7 @@ static inline bool inList(const std::initializer_list<const char *> &list, const
|
||||
}
|
||||
|
||||
class MessageContext {
|
||||
public:
|
||||
public:
|
||||
MessageContext() { ctx_ = Context::create(); }
|
||||
~MessageContext() { delete ctx_; }
|
||||
Context *ctx_;
|
||||
@@ -53,18 +57,18 @@ SubMaster::SubMaster(const std::initializer_list<const char *> &service_list, co
|
||||
assert(socket != 0);
|
||||
poller_->registerSocket(socket);
|
||||
SubMessage *m = new SubMessage{
|
||||
.socket = socket,
|
||||
.freq = serv->frequency,
|
||||
.ignore_alive = inList(ignore_alive, name),
|
||||
.allocated_msg_reader = malloc(sizeof(capnp::FlatArrayMessageReader)),
|
||||
.buf = kj::heapArray<capnp::word>(1024)};
|
||||
.socket = socket,
|
||||
.freq = serv->frequency,
|
||||
.ignore_alive = inList(ignore_alive, name),
|
||||
.allocated_msg_reader = malloc(sizeof(capnp::FlatArrayMessageReader)),
|
||||
.buf = kj::heapArray<capnp::word>(1024)};
|
||||
messages_[socket] = m;
|
||||
services_[name] = m;
|
||||
}
|
||||
}
|
||||
|
||||
int SubMaster::update(int timeout) {
|
||||
if (++frame_ == UINT64_MAX) frame_ = 1;
|
||||
if (++frame == UINT64_MAX) frame = 1;
|
||||
for (auto &kv : messages_) kv.second->updated = false;
|
||||
|
||||
int updated = 0;
|
||||
@@ -89,7 +93,7 @@ int SubMaster::update(int timeout) {
|
||||
m->event = m->msg_reader->getRoot<cereal::Event>();
|
||||
m->updated = true;
|
||||
m->rcv_time = current_time;
|
||||
m->rcv_frame = frame_;
|
||||
m->rcv_frame = frame;
|
||||
m->valid = m->event.getValid();
|
||||
|
||||
++updated;
|
||||
@@ -126,8 +130,17 @@ void SubMaster::drain() {
|
||||
}
|
||||
}
|
||||
|
||||
bool SubMaster::updated(const char *name) const { return services_.at(name)->updated; }
|
||||
cereal::Event::Reader &SubMaster::operator[](const char *name) { return services_.at(name)->event; };
|
||||
bool SubMaster::updated(const char *name) const {
|
||||
return services_.at(name)->updated;
|
||||
}
|
||||
|
||||
uint64_t SubMaster::rcv_frame(const char *name) const {
|
||||
return services_.at(name)->rcv_frame;
|
||||
}
|
||||
|
||||
cereal::Event::Reader &SubMaster::operator[](const char *name) {
|
||||
return services_.at(name)->event;
|
||||
};
|
||||
|
||||
SubMaster::~SubMaster() {
|
||||
delete poller_;
|
||||
|
||||
@@ -63,7 +63,7 @@ orbOdometry: [8057, true, 0.]
|
||||
orbFeatures: [8058, false, 0.]
|
||||
orbKeyFrame: [8059, true, 0.]
|
||||
uiLayoutState: [8060, true, 0.]
|
||||
frontEncodeIdx: [8061, true, 5.]
|
||||
frontEncodeIdx: [8061, true, 5.] # should be 20fps on tici
|
||||
orbFeaturesSummary: [8062, true, 0.]
|
||||
driverState: [8063, true, 5., 1]
|
||||
liveParameters: [8064, true, 20., 2]
|
||||
@@ -77,8 +77,9 @@ carParams: [8071, true, 0.02, 1]
|
||||
frontFrame: [8072, true, 10.]
|
||||
dMonitoringState: [8073, true, 5., 1]
|
||||
offroadLayout: [8074, false, 0.]
|
||||
wideEncodeIdx: [8075, true, 20.]
|
||||
|
||||
dragonConf: [8075, false, 2.]
|
||||
dragonConf: [8088, false, 2.]
|
||||
|
||||
testModel: [8040, false, 0.]
|
||||
testLiveLocation: [8045, false, 0.]
|
||||
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
Import('env')
|
||||
Import('env', 'cython_dependencies')
|
||||
|
||||
# parser
|
||||
env.Command(['common_pyx.so'],
|
||||
['common_pyx_setup.py', 'clock.pyx'],
|
||||
"cd common && python3 common_pyx_setup.py build_ext --inplace")
|
||||
# Build cython clock module
|
||||
env.Command(['common_pyx.so', 'clock.cpp'],
|
||||
cython_dependencies + ['common_pyx_setup.py', 'clock.pyx'],
|
||||
"cd common && python3 common_pyx_setup.py build_ext --inplace")
|
||||
|
||||
+1
-1
@@ -39,4 +39,4 @@ def common_interface_get_params_lqr(ret):
|
||||
ret.lateralTuning.lqr.k = [-110.73572306, 451.22718255]
|
||||
ret.lateralTuning.lqr.l = [0.3233671, 0.3185757]
|
||||
ret.lateralTuning.lqr.dcGain = 0.002237852961363602
|
||||
return ret
|
||||
return ret
|
||||
|
||||
+13
-9
@@ -3,6 +3,7 @@ import os
|
||||
import json
|
||||
import time
|
||||
from math import floor
|
||||
from common.android import getprop
|
||||
|
||||
confs = [
|
||||
{'name': 'dp_atl', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct'], 'update_once': True},
|
||||
@@ -22,6 +23,7 @@ confs = [
|
||||
{'name': 'dp_upload_on_mobile', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_uploader', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_upload_on_hotspot', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_uploader', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_updated', 'default': True, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_gpxd', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_hotspot_on_boot', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
# lat ctrl
|
||||
{'name': 'dp_lat_ctrl', 'default': True, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
@@ -29,15 +31,15 @@ confs = [
|
||||
{'name': 'dp_steering_on_signal', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_lat_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_signal_off_delay', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 10, 'conf_type': ['param', 'struct']},
|
||||
# assist/auto lane change
|
||||
{'name': 'dp_assisted_lc_min_mph', 'default': 45, 'type': 'UInt8', 'min': 0, 'max': 255, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_assisted_lc_min_mph', 'default': 45, 'type': 'Float32', 'min': 0, 'max': 255., 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_auto_lc', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_auto_lc_cont', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_auto_lc', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_auto_lc_min_mph', 'default': 60, 'type': 'UInt8', 'min': 0, 'max': 255, 'depends': [{'name': 'dp_auto_lc', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_auto_lc_delay', 'default': 3, 'type': 'UInt8', 'min': 0, 'max': 10, 'depends': [{'name': 'dp_auto_lc', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_auto_lc_min_mph', 'default': 60, 'type': 'Float32', 'min': 0, 'max': 255., 'depends': [{'name': 'dp_auto_lc', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_auto_lc_delay', 'default': 3, 'type': 'Float32', 'min': 0, 'max': 10., 'depends': [{'name': 'dp_auto_lc', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
# long ctrl
|
||||
{'name': 'dp_slow_on_curve', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_allow_gas', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_max_ctrl_speed', 'default': 92, 'type': 'Float32', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_max_ctrl_speed', 'default': 92., 'type': 'Float32', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_lead_car_alert', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_dynamic_follow', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 4, 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_accel_profile', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 3, 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
@@ -58,7 +60,8 @@ confs = [
|
||||
{'name': 'dp_ui_lane', 'default': True, 'type': 'Bool', 'depends': [{'name': 'dp_driving_ui', 'vals': [True]}, {'name': 'dp_ui_screen_off_driving', 'vals': [False]}, {'name': 'dp_app_waze', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_path', 'default': True, 'type': 'Bool', 'depends': [{'name': 'dp_driving_ui', 'vals': [True]}, {'name': 'dp_ui_screen_off_driving', 'vals': [False]}, {'name': 'dp_app_waze', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_lead', 'default': True, 'type': 'Bool', 'depends': [{'name': 'dp_driving_ui', 'vals': [True]}, {'name': 'dp_ui_screen_off_driving', 'vals': [False]}, {'name': 'dp_app_waze', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_dev', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_driving_ui', 'vals': [True]}, {'name': 'dp_ui_screen_off_driving', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_dev', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_dev_mini', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_blinker', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_driving_ui', 'vals': [True]}, {'name': 'dp_ui_screen_off_driving', 'vals': [False]}, {'name': 'dp_app_waze', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_brightness', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 100, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_ui_volume_boost', 'default': 0, 'type': 'Int8', 'min': -100, 'max': 100, 'conf_type': ['param', 'struct']},
|
||||
@@ -81,8 +84,8 @@ confs = [
|
||||
{'name': 'dp_toyota_sng', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_zss', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_toyota_lowest_cruise_override', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_lowest_cruise_override_at', 'default': 44, 'type': 'Float32', 'depends': [{'name': 'dp_toyota_lowest_cruise_override', 'vals': [True]}], 'min': 44, 'max': 46, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_lowest_cruise_override_speed', 'default': 32, 'type': 'Float32', 'depends': [{'name': 'dp_toyota_lowest_cruise_override_speed', 'vals': [True]}], 'min': 27, 'max': 44, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_lowest_cruise_override_at', 'default': 44, 'type': 'Float32', 'depends': [{'name': 'dp_toyota_lowest_cruise_override', 'vals': [True]}], 'min': 0, 'max': 255., 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_toyota_lowest_cruise_override_speed', 'default': 32, 'type': 'Float32', 'depends': [{'name': 'dp_toyota_lowest_cruise_override_speed', 'vals': [True]}], 'min': 0, 'max': 255., 'conf_type': ['param', 'struct']},
|
||||
# custom car
|
||||
{'name': 'dp_car_selected', 'default': '', 'type': 'Text', 'conf_type': ['param']},
|
||||
{'name': 'dp_car_list', 'default': '', 'type': 'Text', 'conf_type': ['param']},
|
||||
@@ -94,16 +97,17 @@ confs = [
|
||||
{'name': 'dp_last_modified', 'default': str(floor(time.time())), 'type': 'Text', 'conf_type': ['param']},
|
||||
{'name': 'dp_camera_offset', 'default': 6, 'type': 'Int8', 'min': -255, 'max': 255, 'conf_type': ['param', 'struct']},
|
||||
|
||||
{'name': 'dp_locale', 'default': '', 'type': 'Text', 'conf_type': ['param', 'struct'], 'update_once': True},
|
||||
{'name': 'dp_locale', 'default': getprop("persist.sys.locale").rstrip('\n'), 'type': 'Text', 'conf_type': ['param', 'struct'], 'update_once': True},
|
||||
{'name': 'dp_disable_relay', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_charging_ctrl', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_charging_at', 'default': 60, 'type': 'UInt8', 'min': 0, 'max': 100, 'depends': [{'name': 'dp_charging_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_discharging_at', 'default': 70, 'type': 'UInt8', 'min': 0, 'max': 100, 'depends': [{'name': 'dp_charging_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_reg', 'default': True, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_is_updating', 'default': False, 'type': 'Bool', 'set_param_only': True, 'conf_type': ['param', 'struct']},
|
||||
{'name': 'dp_is_updating', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
|
||||
|
||||
{'name': 'dp_sr_learner', 'default': True, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_lqr', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
{'name': 'dp_reset_live_param_on_start', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
|
||||
|
||||
# including thermal data
|
||||
{'name': 'dp_thermal_started', 'default': False, 'type': 'Bool', 'conf_type': ['struct']},
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ from common import android
|
||||
|
||||
is_android = android.ANDROID
|
||||
locale_dir = '/data/openpilot/selfdrive/assets/locales'
|
||||
supported_language = ['en-US', 'zh-TW', 'zh-CN']
|
||||
supported_language = ['en-US', 'zh-TW', 'zh-CN', 'ja-JP', 'ko-KR']
|
||||
locale = android.getprop("persist.sys.locale") if is_android else 'en-US'
|
||||
|
||||
def events():
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Import('env')
|
||||
Import('env', 'cython_dependencies')
|
||||
|
||||
env.Command(['simple_kalman_impl.so'],
|
||||
['simple_kalman_impl.pyx', 'simple_kalman_impl.pxd', 'simple_kalman_setup.py'],
|
||||
"cd common/kalman && python3 simple_kalman_setup.py build_ext --inplace")
|
||||
cython_dependencies + ['simple_kalman_impl.pyx', 'simple_kalman_impl.pxd', 'simple_kalman_setup.py'],
|
||||
"cd common/kalman && python3 simple_kalman_setup.py build_ext --inplace")
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ class KF1D:
|
||||
def __init__(self, x0, A, C, K):
|
||||
self.x = x0
|
||||
self.A = A
|
||||
self.C = C
|
||||
self.C = np.atleast_2d(C)
|
||||
self.K = K
|
||||
|
||||
self.A_K = self.A - np.dot(self.K, self.C)
|
||||
|
||||
@@ -21,10 +21,10 @@ class TestSimpleKalman(unittest.TestCase):
|
||||
K0_0 = 0.12287673
|
||||
K1_0 = 0.29666309
|
||||
|
||||
self.kf_old = KF1D_old(x0=np.matrix([[x0_0], [x1_0]]),
|
||||
A=np.matrix([[A0_0, A0_1], [A1_0, A1_1]]),
|
||||
C=np.matrix([C0_0, C0_1]),
|
||||
K=np.matrix([[K0_0], [K1_0]]))
|
||||
self.kf_old = KF1D_old(x0=np.array([[x0_0], [x1_0]]),
|
||||
A=np.array([[A0_0, A0_1], [A1_0, A1_1]]),
|
||||
C=np.array([C0_0, C0_1]),
|
||||
K=np.array([[K0_0], [K1_0]]))
|
||||
|
||||
self.kf = KF1D(x0=[[x0_0], [x1_0]],
|
||||
A=[[A0_0, A0_1], [A1_0, A1_1]],
|
||||
@@ -47,8 +47,8 @@ class TestSimpleKalman(unittest.TestCase):
|
||||
x = self.kf.update(v_wheel)
|
||||
|
||||
# Compare the output x, verify that the error is less than 1e-4
|
||||
self.assertAlmostEqual(x_old[0], x[0])
|
||||
self.assertAlmostEqual(x_old[1], x[1])
|
||||
np.testing.assert_almost_equal(x_old[0], x[0])
|
||||
np.testing.assert_almost_equal(x_old[1], x[1])
|
||||
|
||||
def test_new_is_faster(self):
|
||||
setup = """
|
||||
@@ -69,10 +69,10 @@ C0_1 = 0.0
|
||||
K0_0 = 0.12287673
|
||||
K1_0 = 0.29666309
|
||||
|
||||
kf_old = KF1D_old(x0=np.matrix([[x0_0], [x1_0]]),
|
||||
A=np.matrix([[A0_0, A0_1], [A1_0, A1_1]]),
|
||||
C=np.matrix([C0_0, C0_1]),
|
||||
K=np.matrix([[K0_0], [K1_0]]))
|
||||
kf_old = KF1D_old(x0=np.array([[x0_0], [x1_0]]),
|
||||
A=np.array([[A0_0, A0_1], [A1_0, A1_1]]),
|
||||
C=np.array([C0_0, C0_1]),
|
||||
K=np.array([[K0_0], [K1_0]]))
|
||||
|
||||
kf = KF1D(x0=[[x0_0], [x1_0]],
|
||||
A=[[A0_0, A0_1], [A1_0, A1_1]],
|
||||
|
||||
+6
-3
@@ -81,6 +81,7 @@ keys = {
|
||||
"IsUploadRawEnabled": [TxType.PERSISTENT],
|
||||
"LastAthenaPingTime": [TxType.PERSISTENT],
|
||||
"LastUpdateTime": [TxType.PERSISTENT],
|
||||
"LastUpdateException": [TxType.PERSISTENT],
|
||||
"LimitSetSpeed": [TxType.PERSISTENT],
|
||||
"LimitSetSpeedNeural": [TxType.PERSISTENT],
|
||||
"LiveParameters": [TxType.PERSISTENT],
|
||||
@@ -109,6 +110,7 @@ keys = {
|
||||
"Offroad_InvalidTime": [TxType.CLEAR_ON_MANAGER_START],
|
||||
"Offroad_IsTakingSnapshot": [TxType.CLEAR_ON_MANAGER_START],
|
||||
"Offroad_NeosUpdate": [TxType.CLEAR_ON_MANAGER_START],
|
||||
"Offroad_UpdateFailed": [TxType.CLEAR_ON_MANAGER_START],
|
||||
}
|
||||
|
||||
keys = init_params_keys(keys, [TxType.PERSISTENT])
|
||||
@@ -321,14 +323,15 @@ def write_db(params_path, key, value):
|
||||
lock.acquire()
|
||||
|
||||
try:
|
||||
tmp_path = tempfile.mktemp(prefix=".tmp", dir=params_path)
|
||||
with open(tmp_path, "wb") as f:
|
||||
tmp_path = tempfile.NamedTemporaryFile(mode="wb", prefix=".tmp", dir=params_path, delete=False)
|
||||
with tmp_path as f:
|
||||
f.write(value)
|
||||
f.flush()
|
||||
os.fsync(f.fileno())
|
||||
os.chmod(tmp_path.name, 0o666)
|
||||
|
||||
path = "%s/d/%s" % (params_path, key)
|
||||
os.rename(tmp_path, path)
|
||||
os.rename(tmp_path.name, path)
|
||||
fsync_dir(os.path.dirname(path))
|
||||
finally:
|
||||
os.umask(prev_umask)
|
||||
|
||||
+11
-25
@@ -4,14 +4,17 @@ from common.basedir import BASEDIR
|
||||
|
||||
|
||||
class Spinner():
|
||||
def __init__(self):
|
||||
try:
|
||||
self.spinner_proc = subprocess.Popen(["./spinner"],
|
||||
stdin=subprocess.PIPE,
|
||||
cwd=os.path.join(BASEDIR, "selfdrive", "ui", "spinner"),
|
||||
close_fds=True)
|
||||
except OSError:
|
||||
self.spinner_proc = None
|
||||
def __init__(self, noop=False):
|
||||
# spinner is currently only implemented for android
|
||||
self.spinner_proc = None
|
||||
if not noop:
|
||||
try:
|
||||
self.spinner_proc = subprocess.Popen(["./spinner"],
|
||||
stdin=subprocess.PIPE,
|
||||
cwd=os.path.join(BASEDIR, "selfdrive", "ui", "spinner"),
|
||||
close_fds=True)
|
||||
except OSError:
|
||||
self.spinner_proc = None
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
@@ -40,23 +43,6 @@ class Spinner():
|
||||
self.close()
|
||||
|
||||
|
||||
class FakeSpinner(Spinner):
|
||||
def __init__(self): # pylint: disable=super-init-not-called
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def update(self, _):
|
||||
pass
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import time
|
||||
with Spinner() as s:
|
||||
|
||||
+17
-36
@@ -6,20 +6,22 @@ from common.basedir import BASEDIR
|
||||
|
||||
|
||||
class TextWindow():
|
||||
def __init__(self, s):
|
||||
try:
|
||||
self.text_proc = subprocess.Popen(["./text", s],
|
||||
stdin=subprocess.PIPE,
|
||||
cwd=os.path.join(BASEDIR, "selfdrive", "ui", "text"),
|
||||
close_fds=True)
|
||||
except OSError:
|
||||
self.text_proc = None
|
||||
def __init__(self, s, noop=False):
|
||||
# text window is only implemented for android currently
|
||||
self.text_proc = None
|
||||
if not noop:
|
||||
try:
|
||||
self.text_proc = subprocess.Popen(["./text", s],
|
||||
stdin=subprocess.PIPE,
|
||||
cwd=os.path.join(BASEDIR, "selfdrive", "ui", "text"),
|
||||
close_fds=True)
|
||||
except OSError:
|
||||
self.text_proc = None
|
||||
|
||||
def get_status(self):
|
||||
if self.text_proc is not None:
|
||||
self.text_proc.poll()
|
||||
return self.text_proc.returncode
|
||||
|
||||
return None
|
||||
|
||||
def __enter__(self):
|
||||
@@ -31,10 +33,12 @@ class TextWindow():
|
||||
self.text_proc = None
|
||||
|
||||
def wait_for_exit(self):
|
||||
while True:
|
||||
if self.get_status() == 1:
|
||||
return
|
||||
time.sleep(0.1)
|
||||
if self.text_proc is not None:
|
||||
while True:
|
||||
if self.get_status() == 1:
|
||||
os.system('/data/openpilot/scripts/reset_update.sh')
|
||||
return
|
||||
time.sleep(0.1)
|
||||
|
||||
def __del__(self):
|
||||
self.close()
|
||||
@@ -43,29 +47,6 @@ class TextWindow():
|
||||
self.close()
|
||||
|
||||
|
||||
class FakeTextWindow(TextWindow):
|
||||
def __init__(self, s): # pylint: disable=super-init-not-called
|
||||
pass
|
||||
|
||||
def get_status(self):
|
||||
return 1
|
||||
|
||||
def wait_for_exit(self):
|
||||
return
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def update(self, _):
|
||||
pass
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
text = """Traceback (most recent call last):
|
||||
File "./controlsd.py", line 608, in <module>
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
Import('env')
|
||||
Import('env', 'cython_dependencies')
|
||||
|
||||
d = Dir('.')
|
||||
|
||||
env.Command(
|
||||
['transformations.so'],
|
||||
['transformations.pxd', 'transformations.pyx',
|
||||
'coordinates.cc', 'orientation.cc', 'coordinates.hpp', 'orientation.hpp'],
|
||||
'cd ' + d.path + ' && python3 setup.py build_ext --inplace')
|
||||
env.Command(['transformations.so'],
|
||||
cython_dependencies + ['transformations.pxd', 'transformations.pyx',
|
||||
'coordinates.cc', 'orientation.cc', 'coordinates.hpp', 'orientation.hpp'],
|
||||
'cd ' + d.path + ' && python3 setup.py build_ext --inplace')
|
||||
|
||||
@@ -52,6 +52,13 @@ def get_view_frame_from_road_frame(roll, pitch, yaw, height):
|
||||
return np.hstack((view_from_road, [[0], [height], [0]]))
|
||||
|
||||
|
||||
# aka 'extrinsic_matrix'
|
||||
def get_view_frame_from_calib_frame(roll, pitch, yaw, height):
|
||||
device_from_calib= orient.rot_from_euler([roll, pitch, yaw])
|
||||
view_from_calib = view_frame_from_device_frame.dot(device_from_calib)
|
||||
return np.hstack((view_from_calib, [[0], [height], [0]]))
|
||||
|
||||
|
||||
def vp_from_ke(m):
|
||||
"""
|
||||
Computes the vanishing point from the product of the intrinsic and extrinsic
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
#define RAD2DEG(x) ((x) * 180.0 / M_PI)
|
||||
|
||||
|
||||
double a = 6378137;
|
||||
double b = 6356752.3142;
|
||||
double esq = 6.69437999014 * 0.001;
|
||||
double a = 6378137; // lgtm [cpp/short-global-name]
|
||||
double b = 6356752.3142; // lgtm [cpp/short-global-name]
|
||||
double esq = 6.69437999014 * 0.001; // lgtm [cpp/short-global-name]
|
||||
double e1sq = 6.73949674228 * 0.001;
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import numpy as np
|
||||
|
||||
from common.transformations.camera import (FULL_FRAME_SIZE, eon_focal_length,
|
||||
get_view_frame_from_road_frame,
|
||||
get_view_frame_from_calib_frame,
|
||||
vp_from_ke)
|
||||
|
||||
# segnet
|
||||
@@ -73,6 +74,9 @@ bigmodel_frame_from_road_frame = np.dot(bigmodel_intrinsics,
|
||||
medmodel_frame_from_road_frame = np.dot(medmodel_intrinsics,
|
||||
get_view_frame_from_road_frame(0, 0, 0, model_height))
|
||||
|
||||
medmodel_frame_from_calib_frame = np.dot(medmodel_intrinsics,
|
||||
get_view_frame_from_calib_frame(0, 0, 0, 0))
|
||||
|
||||
model_frame_from_bigmodel_frame = np.dot(model_intrinsics, np.linalg.inv(bigmodel_intrinsics))
|
||||
medmodel_frame_from_bigmodel_frame = np.dot(medmodel_intrinsics, np.linalg.inv(bigmodel_intrinsics))
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ quats_from_rotations = rot2quat
|
||||
quat_from_rot = rot2quat
|
||||
rotations_from_quats = quat2rot
|
||||
rot_from_quat = quat2rot
|
||||
rot_from_quat = quat2rot
|
||||
euler_from_rot = rot2euler
|
||||
euler_from_quat = quat2euler
|
||||
rot_from_euler = euler2rot
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ota_url": "https://commadist.azureedge.net/neosupdate/ota-signed-efdf7de63b1aef63d68301e6175930991bf9a5927d16ec6fcc69287e2ee7ca4a.zip",
|
||||
"ota_hash": "efdf7de63b1aef63d68301e6175930991bf9a5927d16ec6fcc69287e2ee7ca4a",
|
||||
"recovery_url": "https://commadist.azureedge.net/neosupdate/recovery-97c27e6ed04ed6bb0608b845a2d4100912093f9380c3f2ba6b56bccd608e5f6e.img",
|
||||
"recovery_len": 15861036,
|
||||
"recovery_hash": "97c27e6ed04ed6bb0608b845a2d4100912093f9380c3f2ba6b56bccd608e5f6e"
|
||||
"ota_url": "http://dpp.cool/neosupdate/ota-signed-16e6e346e0e29ba9953d0ebd7185a7955b8e2261790f0e68aee74ced3028dfb8.zip",
|
||||
"ota_hash": "16e6e346e0e29ba9953d0ebd7185a7955b8e2261790f0e68aee74ced3028dfb8",
|
||||
"recovery_url": "http://dpp.cool/neosupdate/recovery-4772f9348e04b560b9df87d6dea6c740fa8d62ea41a8db3842eec216f04e3110.img",
|
||||
"recovery_len": 15922476,
|
||||
"recovery_hash": "4772f9348e04b560b9df87d6dea6c740fa8d62ea41a8db3842eec216f04e3110"
|
||||
}
|
||||
|
||||
Binary file not shown.
+153
-124
@@ -10,6 +10,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
|
||||
@@ -33,10 +34,10 @@
|
||||
|
||||
#define USER_AGENT "NEOSUpdater-0.2"
|
||||
|
||||
#define MANIFEST_URL_EON_STAGING "https://github.com/commaai/eon-neos/raw/master/update.staging.json"
|
||||
#define MANIFEST_URL_EON_LOCAL "http://192.168.5.1:8000/neosupdate/update.local.json"
|
||||
#define MANIFEST_URL_EON "https://github.com/commaai/eon-neos/raw/master/update.json"
|
||||
const char *manifest_url = MANIFEST_URL_EON;
|
||||
#define MANIFEST_URL_NEOS_STAGING "https://github.com/commaai/eon-neos/raw/master/update.staging.json"
|
||||
#define MANIFEST_URL_NEOS_LOCAL "http://192.168.5.1:8000/neosupdate/update.local.json"
|
||||
#define MANIFEST_URL_NEOS "https://github.com/commaai/eon-neos/raw/master/update.json"
|
||||
const char *manifest_url = MANIFEST_URL_NEOS;
|
||||
|
||||
#define RECOVERY_DEV "/dev/block/bootdevice/by-name/recovery"
|
||||
#define RECOVERY_COMMAND "/cache/recovery/command"
|
||||
@@ -96,7 +97,7 @@ std::string download_string(CURL *curl, std::string url) {
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 0);
|
||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, USER_AGENT);
|
||||
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 0);
|
||||
@@ -149,6 +150,32 @@ static void start_settings_activity(const char* name) {
|
||||
system(launch_cmd);
|
||||
}
|
||||
|
||||
bool is_settings_active() {
|
||||
FILE *fp;
|
||||
char sys_output[4096];
|
||||
|
||||
fp = popen("/bin/dumpsys window windows", "r");
|
||||
if (fp == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool active = false;
|
||||
while (fgets(sys_output, sizeof(sys_output), fp) != NULL) {
|
||||
if (strstr(sys_output, "mCurrentFocus=null") != NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (strstr(sys_output, "mCurrentFocus=Window") != NULL) {
|
||||
active = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pclose(fp);
|
||||
|
||||
return active;
|
||||
}
|
||||
|
||||
struct Updater {
|
||||
bool do_exit = false;
|
||||
|
||||
@@ -166,7 +193,6 @@ struct Updater {
|
||||
|
||||
std::mutex lock;
|
||||
|
||||
// i hate state machines give me coroutines already
|
||||
enum UpdateState {
|
||||
CONFIRMATION,
|
||||
LOW_BATTERY,
|
||||
@@ -190,9 +216,15 @@ struct Updater {
|
||||
int b_x, b_w, b_y, b_h;
|
||||
int balt_x;
|
||||
|
||||
// download stage writes these for the installation stage
|
||||
int recovery_len;
|
||||
std::string recovery_hash;
|
||||
std::string recovery_fn;
|
||||
std::string ota_fn;
|
||||
|
||||
CURL *curl = NULL;
|
||||
|
||||
Updater() {
|
||||
void ui_init() {
|
||||
touch_init(&touch);
|
||||
|
||||
fb = framebuffer_init("updater", 0x00001000, false,
|
||||
@@ -218,7 +250,6 @@ struct Updater {
|
||||
b_h = 220;
|
||||
|
||||
state = CONFIRMATION;
|
||||
|
||||
}
|
||||
|
||||
int download_file_xferinfo(curl_off_t dltotal, curl_off_t dlno,
|
||||
@@ -251,7 +282,7 @@ struct Updater {
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 0);
|
||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, USER_AGENT);
|
||||
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_RESUME_FROM, resume_from);
|
||||
@@ -319,32 +350,113 @@ struct Updater {
|
||||
state = RUNNING;
|
||||
}
|
||||
|
||||
std::string stage_download(std::string url, std::string hash, std::string name) {
|
||||
std::string download(std::string url, std::string hash, std::string name) {
|
||||
std::string out_fn = UPDATE_DIR "/" + util::base_name(url);
|
||||
|
||||
set_progress("Downloading " + name + "...");
|
||||
bool r = download_file(url, out_fn);
|
||||
if (!r) {
|
||||
set_error("failed to download " + name);
|
||||
return "";
|
||||
// start or resume downloading if hash doesn't match
|
||||
std::string fn_hash = sha256_file(out_fn);
|
||||
if (hash.compare(fn_hash) != 0) {
|
||||
set_progress("Downloading " + name + "...");
|
||||
bool r = download_file(url, out_fn);
|
||||
if (!r) {
|
||||
set_error("failed to download " + name);
|
||||
unlink(out_fn.c_str());
|
||||
return "";
|
||||
}
|
||||
fn_hash = sha256_file(out_fn);
|
||||
}
|
||||
|
||||
set_progress("Verifying " + name + "...");
|
||||
std::string fn_hash = sha256_file(out_fn);
|
||||
printf("got %s hash: %s\n", name.c_str(), hash.c_str());
|
||||
if (fn_hash != hash) {
|
||||
set_error(name + " was corrupt");
|
||||
unlink(out_fn.c_str());
|
||||
return "";
|
||||
}
|
||||
|
||||
return out_fn;
|
||||
}
|
||||
|
||||
void run_stages() {
|
||||
bool download_stage() {
|
||||
curl = curl_easy_init();
|
||||
assert(curl);
|
||||
|
||||
// ** quick checks before download **
|
||||
|
||||
if (!check_space()) {
|
||||
set_error("2GB of free space required to update");
|
||||
return false;
|
||||
}
|
||||
|
||||
mkdir(UPDATE_DIR, 0777);
|
||||
|
||||
set_progress("Finding latest version...");
|
||||
std::string manifest_s = download_string(curl, manifest_url);
|
||||
printf("manifest: %s\n", manifest_s.c_str());
|
||||
|
||||
std::string err;
|
||||
auto manifest = json11::Json::parse(manifest_s, err);
|
||||
if (manifest.is_null() || !err.empty()) {
|
||||
set_error("failed to load update manifest");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string ota_url = manifest["ota_url"].string_value();
|
||||
std::string ota_hash = manifest["ota_hash"].string_value();
|
||||
|
||||
std::string recovery_url = manifest["recovery_url"].string_value();
|
||||
recovery_hash = manifest["recovery_hash"].string_value();
|
||||
recovery_len = manifest["recovery_len"].int_value();
|
||||
|
||||
// std::string installer_url = manifest["installer_url"].string_value();
|
||||
// std::string installer_hash = manifest["installer_hash"].string_value();
|
||||
|
||||
if (ota_url.empty() || ota_hash.empty()) {
|
||||
set_error("invalid update manifest");
|
||||
return false;
|
||||
}
|
||||
|
||||
// std::string installer_fn = download(installer_url, installer_hash, "installer");
|
||||
// if (installer_fn.empty()) {
|
||||
// //error'd
|
||||
// return;
|
||||
// }
|
||||
|
||||
// ** handle recovery download **
|
||||
if (recovery_url.empty() || recovery_hash.empty() || recovery_len == 0) {
|
||||
set_progress("Skipping recovery flash...");
|
||||
} else {
|
||||
// only download the recovery if it differs from what's flashed
|
||||
set_progress("Checking recovery...");
|
||||
std::string existing_recovery_hash = sha256_file(RECOVERY_DEV, recovery_len);
|
||||
printf("existing recovery hash: %s\n", existing_recovery_hash.c_str());
|
||||
|
||||
if (existing_recovery_hash != recovery_hash) {
|
||||
recovery_fn = download(recovery_url, recovery_hash, "recovery");
|
||||
if (recovery_fn.empty()) {
|
||||
// error'd
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ** handle ota download **
|
||||
ota_fn = download(ota_url, ota_hash, "update");
|
||||
if (ota_fn.empty()) {
|
||||
//error'd
|
||||
return false;
|
||||
}
|
||||
|
||||
// download sucessful
|
||||
return true;
|
||||
}
|
||||
|
||||
// thread that handles downloading and installing the update
|
||||
void run_stages() {
|
||||
printf("run_stages start\n");
|
||||
|
||||
|
||||
// ** download update **
|
||||
|
||||
if (!check_battery()) {
|
||||
set_battery_low();
|
||||
int battery_cap = battery_capacity();
|
||||
@@ -356,77 +468,12 @@ struct Updater {
|
||||
set_running();
|
||||
}
|
||||
|
||||
if (!check_space()) {
|
||||
set_error("2GB of free space required to update");
|
||||
bool sucess = download_stage();
|
||||
if (!sucess) {
|
||||
return;
|
||||
}
|
||||
|
||||
mkdir(UPDATE_DIR, 0777);
|
||||
|
||||
const int EON = (access("/EON", F_OK) != -1);
|
||||
|
||||
set_progress("Finding latest version...");
|
||||
std::string manifest_s;
|
||||
if (EON) {
|
||||
manifest_s = download_string(curl, manifest_url);
|
||||
} else {
|
||||
// don't update NEO
|
||||
exit(0);
|
||||
}
|
||||
|
||||
printf("manifest: %s\n", manifest_s.c_str());
|
||||
|
||||
std::string err;
|
||||
auto manifest = json11::Json::parse(manifest_s, err);
|
||||
if (manifest.is_null() || !err.empty()) {
|
||||
set_error("failed to load update manifest");
|
||||
return;
|
||||
}
|
||||
|
||||
std::string ota_url = manifest["ota_url"].string_value();
|
||||
std::string ota_hash = manifest["ota_hash"].string_value();
|
||||
|
||||
std::string recovery_url = manifest["recovery_url"].string_value();
|
||||
std::string recovery_hash = manifest["recovery_hash"].string_value();
|
||||
int recovery_len = manifest["recovery_len"].int_value();
|
||||
|
||||
// std::string installer_url = manifest["installer_url"].string_value();
|
||||
// std::string installer_hash = manifest["installer_hash"].string_value();
|
||||
|
||||
if (ota_url.empty() || ota_hash.empty()) {
|
||||
set_error("invalid update manifest");
|
||||
return;
|
||||
}
|
||||
|
||||
// std::string installer_fn = stage_download(installer_url, installer_hash, "installer");
|
||||
// if (installer_fn.empty()) {
|
||||
// //error'd
|
||||
// return;
|
||||
// }
|
||||
|
||||
std::string recovery_fn;
|
||||
if (recovery_url.empty() || recovery_hash.empty() || recovery_len == 0) {
|
||||
set_progress("Skipping recovery flash...");
|
||||
} else {
|
||||
// only download the recovery if it differs from what's flashed
|
||||
set_progress("Checking recovery...");
|
||||
std::string existing_recovery_hash = sha256_file(RECOVERY_DEV, recovery_len);
|
||||
printf("existing recovery hash: %s\n", existing_recovery_hash.c_str());
|
||||
|
||||
if (existing_recovery_hash != recovery_hash) {
|
||||
recovery_fn = stage_download(recovery_url, recovery_hash, "recovery");
|
||||
if (recovery_fn.empty()) {
|
||||
// error'd
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string ota_fn = stage_download(ota_url, ota_hash, "update");
|
||||
if (ota_fn.empty()) {
|
||||
//error'd
|
||||
return;
|
||||
}
|
||||
// ** install update **
|
||||
|
||||
if (!check_battery()) {
|
||||
set_battery_low();
|
||||
@@ -601,7 +648,7 @@ struct Updater {
|
||||
int powerprompt_y = 312;
|
||||
nvgFontFace(vg, "opensans_regular");
|
||||
nvgFontSize(vg, 64.0f);
|
||||
nvgText(vg, fb_w/2, 740, "Ensure EON is connected to power.", NULL);
|
||||
nvgText(vg, fb_w/2, 740, "Ensure your device remains connected to a power source.", NULL);
|
||||
|
||||
NVGpaint paint = nvgBoxGradient(
|
||||
vg, progress_x + 1, progress_y + 1,
|
||||
@@ -657,9 +704,7 @@ struct Updater {
|
||||
void ui_update() {
|
||||
std::lock_guard<std::mutex> guard(lock);
|
||||
|
||||
switch (state) {
|
||||
case ERROR:
|
||||
case CONFIRMATION: {
|
||||
if (state == ERROR || state == CONFIRMATION) {
|
||||
int touch_x = -1, touch_y = -1;
|
||||
int res = touch_poll(&touch, &touch_x, &touch_y, 0);
|
||||
if (res == 1 && !is_settings_active()) {
|
||||
@@ -678,13 +723,11 @@ struct Updater {
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void go() {
|
||||
ui_init();
|
||||
|
||||
while (!do_exit) {
|
||||
ui_update();
|
||||
|
||||
@@ -718,51 +761,37 @@ struct Updater {
|
||||
update_thread_handle.join();
|
||||
}
|
||||
|
||||
// reboot
|
||||
system("service call power 16 i32 0 i32 0 i32 1");
|
||||
}
|
||||
|
||||
bool is_settings_active() {
|
||||
FILE *fp;
|
||||
char sys_output[4096];
|
||||
|
||||
fp = popen("/bin/dumpsys window windows", "r");
|
||||
if (fp == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool active = false;
|
||||
while (fgets(sys_output, sizeof(sys_output), fp) != NULL) {
|
||||
if (strstr(sys_output, "mCurrentFocus=null") != NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (strstr(sys_output, "mCurrentFocus=Window") != NULL) {
|
||||
active = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pclose(fp);
|
||||
|
||||
return active;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
bool background_cache = false;
|
||||
if (argc > 1) {
|
||||
if (strcmp(argv[1], "local") == 0) {
|
||||
manifest_url = MANIFEST_URL_EON_LOCAL;
|
||||
manifest_url = MANIFEST_URL_NEOS_LOCAL;
|
||||
} else if (strcmp(argv[1], "staging") == 0) {
|
||||
manifest_url = MANIFEST_URL_EON_STAGING;
|
||||
manifest_url = MANIFEST_URL_NEOS_STAGING;
|
||||
} else if (strcmp(argv[1], "bgcache") == 0) {
|
||||
manifest_url = argv[2];
|
||||
background_cache = true;
|
||||
} else {
|
||||
manifest_url = argv[1];
|
||||
}
|
||||
}
|
||||
|
||||
printf("updating from %s\n", manifest_url);
|
||||
Updater updater;
|
||||
updater.go();
|
||||
|
||||
return 0;
|
||||
int err = 0;
|
||||
if (background_cache) {
|
||||
err = !updater.download_stage();
|
||||
} else {
|
||||
updater.go();
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
export PASSIVE="0"
|
||||
exec ./launch_chffrplus.sh
|
||||
+13
-22
@@ -1,25 +1,20 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
export OMP_NUM_THREADS=1
|
||||
export MKL_NUM_THREADS=1
|
||||
export NUMEXPR_NUM_THREADS=1
|
||||
export OPENBLAS_NUM_THREADS=1
|
||||
export VECLIB_MAXIMUM_THREADS=1
|
||||
|
||||
if [ -z "$BASEDIR" ]; then
|
||||
BASEDIR="/data/openpilot"
|
||||
fi
|
||||
|
||||
if [ -z "$PASSIVE" ]; then
|
||||
export PASSIVE="1"
|
||||
fi
|
||||
source "$BASEDIR/launch_env.sh"
|
||||
|
||||
STAGING_ROOT="/data/safe_staging"
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
|
||||
function launch {
|
||||
# Wifi scan
|
||||
wpa_cli IFNAME=wlan0 SCAN
|
||||
|
||||
# Remove orphaned git lock if it exists on boot
|
||||
[ -f "$DIR/.git/index.lock" ] && rm -f $DIR/.git/index.lock
|
||||
|
||||
# Check to see if there's a valid overlay-based update available. Conditions
|
||||
# are as follows:
|
||||
#
|
||||
@@ -49,6 +44,7 @@ function launch {
|
||||
git submodule foreach --recursive git reset --hard
|
||||
|
||||
echo "Restarting launch script ${LAUNCHER_LOCATION}"
|
||||
unset REQUIRED_NEOS_VERSION
|
||||
exec "${LAUNCHER_LOCATION}"
|
||||
else
|
||||
echo "openpilot backup found, not updating"
|
||||
@@ -75,26 +71,21 @@ function launch {
|
||||
[ -d "/proc/irq/733" ] && echo 3 > /proc/irq/733/smp_affinity_list # USB for LeEco
|
||||
[ -d "/proc/irq/736" ] && echo 3 > /proc/irq/736/smp_affinity_list # USB for OP3T
|
||||
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
|
||||
# Remove old NEOS update file
|
||||
# TODO: move this code to the updater
|
||||
if [ -d /data/neoupdate ]; then
|
||||
rm -rf /data/neoupdate
|
||||
fi
|
||||
|
||||
# Check for NEOS update
|
||||
if [ $(< /VERSION) != "14" ]; then
|
||||
if [ $(< /VERSION) != "$REQUIRED_NEOS_VERSION" ]; then
|
||||
if [ -f "$DIR/scripts/continue.sh" ]; then
|
||||
cp "$DIR/scripts/continue.sh" "/data/data/com.termux/files/continue.sh"
|
||||
fi
|
||||
|
||||
if [ ! -f "$BASEDIR/prebuilt" ]; then
|
||||
echo "Clearing build products and resetting scons state prior to NEOS update"
|
||||
cd $BASEDIR && scons --clean
|
||||
rm -rf /tmp/scons_cache
|
||||
rm -r $BASEDIR/.sconsign.dblite
|
||||
# Clean old build products, but preserve the scons cache
|
||||
cd $DIR
|
||||
scons --clean
|
||||
git clean -xdf
|
||||
git submodule foreach --recursive git clean -xdf
|
||||
fi
|
||||
|
||||
"$DIR/installer/updater/updater" "file://$DIR/installer/updater/update.json"
|
||||
else
|
||||
if [[ $(uname -v) == "#1 SMP PREEMPT Wed Jun 10 12:40:53 PDT 2020" ]]; then
|
||||
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
export OMP_NUM_THREADS=1
|
||||
export MKL_NUM_THREADS=1
|
||||
export NUMEXPR_NUM_THREADS=1
|
||||
export OPENBLAS_NUM_THREADS=1
|
||||
export VECLIB_MAXIMUM_THREADS=1
|
||||
|
||||
if [ -z "$REQUIRED_NEOS_VERSION" ]; then
|
||||
export REQUIRED_NEOS_VERSION="14"
|
||||
fi
|
||||
|
||||
if [ -z "$PASSIVE" ]; then
|
||||
export PASSIVE="1"
|
||||
fi
|
||||
|
||||
export STAGING_ROOT="/data/safe_staging"
|
||||
Binary file not shown.
@@ -14,4 +14,3 @@ can/packer_pyx.cpp
|
||||
can/parser_pyx.cpp
|
||||
can/packer_pyx.html
|
||||
can/parser_pyx.html
|
||||
can/packer_impl.cpp
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Import('env', 'cereal')
|
||||
Import('env', 'cereal', 'cython_dependencies')
|
||||
|
||||
import os
|
||||
from opendbc.can.process_dbc import process
|
||||
@@ -17,7 +17,6 @@ for x in sorted(os.listdir('../')):
|
||||
libdbc = env.SharedLibrary('libdbc', ["dbc.cc", "parser.cc", "packer.cc", "common.cc"]+dbcs, LIBS=["capnp", "kj"])
|
||||
|
||||
# Build packer and parser
|
||||
|
||||
env.Command(['packer_pyx.so', 'parser_pyx.so'],
|
||||
[libdbc, cereal, 'common_pyx_setup.py', 'packer_pyx.pyx', 'parser_pyx.pyx', 'common.pxd'],
|
||||
"cd opendbc/can && python3 common_pyx_setup.py build_ext --inplace")
|
||||
env.Command(['packer_pyx.so', 'packer_pyx.cpp', 'parser_pyx.so', 'parser_pyx.cpp'],
|
||||
cython_dependencies + [libdbc, cereal, 'common_pyx_setup.py', 'common.pxd', 'packer_pyx.pyx', 'parser_pyx.pyx', 'packer.cc', 'parser.cc'],
|
||||
"cd opendbc/can && python3 common_pyx_setup.py build_ext --inplace")
|
||||
|
||||
@@ -63,9 +63,9 @@ setup(name='CAN parser',
|
||||
include_dirs=include_dirs,
|
||||
extra_link_args=extra_link_args,
|
||||
),
|
||||
nthreads=4,
|
||||
annotate=ANNOTATE
|
||||
),
|
||||
nthreads=4,
|
||||
)
|
||||
|
||||
if platform.system() == "Darwin":
|
||||
@@ -85,9 +85,9 @@ setup(name='CAN packer',
|
||||
include_dirs=include_dirs,
|
||||
extra_link_args=extra_link_args,
|
||||
),
|
||||
nthreads=4,
|
||||
annotate=ANNOTATE
|
||||
),
|
||||
nthreads=4,
|
||||
)
|
||||
|
||||
if platform.system() == "Darwin":
|
||||
|
||||
@@ -3,20 +3,17 @@
|
||||
|
||||
from libcpp.string cimport string
|
||||
from libcpp.vector cimport vector
|
||||
from libcpp cimport bool
|
||||
from libcpp.unordered_set cimport unordered_set
|
||||
from libc.stdint cimport uint32_t, uint64_t, uint16_t
|
||||
from libcpp.map cimport map
|
||||
|
||||
from collections import defaultdict
|
||||
from libcpp cimport bool
|
||||
|
||||
from common cimport CANParser as cpp_CANParser
|
||||
from common cimport SignalParseOptions, MessageParseOptions, dbc_lookup, SignalValue, DBC
|
||||
|
||||
|
||||
from libcpp cimport bool
|
||||
import os
|
||||
import numbers
|
||||
from collections import defaultdict
|
||||
|
||||
cdef int CAN_INVALID_CNT = 5
|
||||
|
||||
@@ -30,7 +27,7 @@ cdef class CANParser:
|
||||
vector[SignalValue] can_values
|
||||
bool test_mode_enabled
|
||||
|
||||
cdef public:
|
||||
cdef readonly:
|
||||
string dbc_name
|
||||
dict vl
|
||||
dict ts
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
CM_ "AUTOGENERATED FILE, DO NOT EDIT"
|
||||
|
||||
CM_ "honda_crv_ex_2017_body.dbc starts here"
|
||||
BO_ 318291879 BSM_STATUS_RIGHT: 8 XXX
|
||||
SG_ BSM_ALERT : 4|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BSM_MODE : 6|2@0+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 318291615 BSM_STATUS_LEFT: 8 XXX
|
||||
SG_ BSM_ALERT : 4|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BSM_MODE : 6|2@0+ (1,0) [0|3] "" XXX
|
||||
|
||||
VAL_ 318291879 BSM_MODE 2 "blind_spot" 1 "cross_traffic" 0 "off";
|
||||
VAL_ 318291615 BSM_MODE 2 "blind_spot" 1 "cross_traffic" 0 "off";
|
||||
+178
-23
@@ -191,8 +191,12 @@ BO_ 916 TCS13: 8 ESC
|
||||
SG_ BrakeLight : 11|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,SCC
|
||||
SG_ DCEnable : 12|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,SCC
|
||||
SG_ AliveCounterTCS : 13|3@1+ (1.0,0.0) [0.0|7.0] "" EMS,SCC
|
||||
SG_ ACCReqLim : 22|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
|
||||
SG_ TQI_ACC : 24|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS
|
||||
SG_ Pre_TCS_CTL : 16|1@1+ (1.0,0.0) [0.0|1.0] "" Vector__XXX
|
||||
SG_ EBA_ACK : 17|1@1+ (1.0,0.0) [0.0|1.0] "" Vector__XXX
|
||||
SG_ FCA_ACK : 18|1@1+ (1.0,0.0) [0.0|1.0] "" Vector__XXX
|
||||
SG_ DF_BF_STAT : 19|2@1+ (1.0,0.0) [0.0|3.0] "" BCW
|
||||
SG_ SCCReqLim : 21|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
|
||||
SG_ TQI_SCC : 23|9@1+ (0.390625,0.0) [0.0|199.609375] "%" Vector__XXX
|
||||
SG_ ACCEL_REF_ACC : 32|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,SCC
|
||||
SG_ ACCEnable : 43|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
|
||||
SG_ DriverOverride : 45|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
|
||||
@@ -448,6 +452,7 @@ BO_ 897 MDPS11: 8 MDPS
|
||||
SG_ CF_Mdps_LKAS_FUNC : 58|1@1+ (1.0,0.0) [0.0|1.0] "flag" LDWS_LKAS
|
||||
SG_ CF_Mdps_CurrMode : 59|2@1+ (1.0,0.0) [0.0|3.0] "" LDWS_LKAS
|
||||
SG_ CF_Mdps_Type : 61|2@1+ (1.0,0.0) [0.0|2.0] "" LDWS_LKAS,SPAS
|
||||
SG_ CF_MDPS_VSM_FUNC : 56|1@0+ (1.0,0.0) [0.0|1.0] "" XXX
|
||||
|
||||
BO_ 896 DI_BOX13: 8 DI_BOX
|
||||
SG_ CF_DiBox_HPreInjVConfStat : 0|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
|
||||
@@ -961,7 +966,7 @@ BO_ 64 DATC14: 8 DATC
|
||||
SG_ DATC_ADSDisp : 28|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
|
||||
|
||||
BO_ 832 LKAS11: 8 LDWS_LKAS
|
||||
SG_ CF_Lkas_Bca_R : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,IBOX,PSB
|
||||
SG_ CF_Lkas_LdwsActivemode : 0|2@1+ (1,0) [0|3] "" CLU,IBOX,PSB
|
||||
SG_ CF_Lkas_LdwsSysState : 2|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,IBOX,PSB
|
||||
SG_ CF_Lkas_SysWarning : 6|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU
|
||||
SG_ CF_Lkas_LdwsLHWarning : 10|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,PSB
|
||||
@@ -978,11 +983,11 @@ BO_ 832 LKAS11: 8 LDWS_LKAS
|
||||
SG_ CF_Lkas_FcwSysState : 40|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
|
||||
SG_ CF_Lkas_FcwCollisionWarning : 43|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
|
||||
SG_ CF_Lkas_FusionState : 45|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
|
||||
SG_ CF_Lkas_Unknown1 : 47|1@1+ (1.0,0.0) [0.0|1.0] "" XXX
|
||||
SG_ CF_Lkas_Chksum : 48|8@1+ (1.0,0.0) [0.0|255.0] "" MDPS
|
||||
SG_ CF_Lkas_FcwOpt_USM : 56|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
|
||||
SG_ CF_Lkas_LdwsOpt_USM : 59|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,MDPS
|
||||
SG_ CF_Lkas_Unknown1 : 47|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ CF_Lkas_Unknown2 : 63|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ CF_Lkas_Unknown2 : 62|2@1+ (1.0,0.0) [0.0|1.0] "" XXX
|
||||
|
||||
BO_ 1342 LKAS12: 6 LDWS_LKAS
|
||||
SG_ CF_Lkas_TsrSlifOpt : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
|
||||
@@ -1037,6 +1042,7 @@ BO_ 1322 CLU15: 8 CLU
|
||||
SG_ CF_Clu_HudFontSizeSet : 31|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
|
||||
SG_ CF_Clu_LanguageInfo : 33|5@1+ (1.0,0.0) [0.0|31.0] "" BCM,PGS
|
||||
SG_ CF_Clu_ClusterSound : 38|1@1- (1.0,0.0) [0.0|0.0] "" BCM,CGW,FATC
|
||||
SG_ CF_Clu_VehicleSpeed2 : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 1066 _4WD13: 6 _4WD
|
||||
SG_ _4WD_CURRENT : 0|8@1+ (0.390625,0.0) [-50.0|50.0] "A" TCU
|
||||
@@ -1250,14 +1256,6 @@ BO_ 790 EMS11: 8 EMS
|
||||
SG_ VS : 48|8@1+ (1.0,0.0) [0.0|254.0] "km/h" _4WD,AAF,ACU,AHLS,BCM,CLU,DATC,ECS,EPB,IBOX,LCA,LDWS_LKAS,LVR,MDPS,ODS,SCC,SMK,SPAS,TCU,TPMS
|
||||
SG_ RATIO_TQI_BAS_MAX_STND : 56|8@1+ (0.0078,0.0) [0.0|2.0] "" _4WD,IBOX,TCU
|
||||
|
||||
BO_ 881 E_EMS11: 8 XXX
|
||||
SG_ Cruise_Limit_Status : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Limit_Target : 23|8@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Gear_Change : 12|1@0+ (1,0) [0|31] "" XXX
|
||||
SG_ IG_Reactive_Stat : 8|3@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Brake_Pedal_Pos : 0|8@1+ (1,0) [0|127] "" XXX
|
||||
SG_ Accel_Pedal_Pos : 31|8@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
BO_ 1301 CLU14: 8 CLU
|
||||
SG_ CF_Clu_ADrUNValueSet : 0|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
|
||||
SG_ CF_Clu_ADrLNValueSet : 3|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
|
||||
@@ -1380,6 +1378,7 @@ BO_ 1290 SCC13: 8 SCC
|
||||
SG_ SCCDrvModeRValue : 0|3@1+ (1,0) [0|7] "" CLU
|
||||
SG_ SCC_Equip : 3|1@1+ (1,0) [0|1] "" ESC
|
||||
SG_ AebDrvSetStatus : 4|3@1+ (1,0) [0|7] "" CLU,ESC
|
||||
SG_ Lead_Veh_Dep_Alert_USM : 13|2@0+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 1287 TCS15: 4 ESC
|
||||
SG_ ABS_W_LAMP : 0|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,CUBIS,IBOX
|
||||
@@ -1451,6 +1450,18 @@ BO_ 909 FCA11: 8 FCA
|
||||
SG_ Supplemental_Counter : 35|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ PAINT1_Status : 16|2@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1156 HDA11_MFC: 8 XXX
|
||||
SG_ Counter : 5|4@0+ (1,0) [0|15] "" XXX
|
||||
SG_ NEW_SIGNAL_1 : 1|2@0+ (1,0) [0|255] "" XXX
|
||||
SG_ NEW_SIGNAL_2 : 7|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ NEW_SIGNAL_4 : 16|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ NEW_SIGNAL_5 : 18|14@1+ (1,0) [0|63] "" XXX
|
||||
SG_ NEW_SIGNAL_6 : 33|2@0+ (1,0) [0|1] "" XXX
|
||||
SG_ NEW_SIGNAL_7 : 34|14@1+ (1,0) [0|16383] "" XXX
|
||||
SG_ NEW_SIGNAL_8 : 49|2@0+ (1,0) [0|1] "" XXX
|
||||
SG_ NEW_SIGNAL_9 : 50|14@1- (1,-4095) [0|16383] "" XXX
|
||||
|
||||
BO_ 1155 FCA12: 8 FCA
|
||||
SG_ FCA_USM : 0|3@1+ (1,0) [0|7] "" CGW,CLU,ESC
|
||||
SG_ FCA_DrvSetState : 3|3@1+ (1,0) [0|7] "" CGW
|
||||
@@ -1459,22 +1470,166 @@ BO_ 1186 FRT_RADAR11: 2 FCA
|
||||
SG_ CF_FCA_Equip_Front_Radar : 0|3@1+ (1,0) [0|7] "" LDWS_LKAS,LDW_LKA,ESC
|
||||
|
||||
BO_ 905 SCC14: 8 SCC
|
||||
SG_ ComfortBandLower : 6|6@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ ComfortBandUpper : 0|6@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ JerkLowerLimit : 19|7@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ JerkUpperLimit : 12|7@1+ (0.1,0) [0|0] "" Vector__XXX
|
||||
SG_ ComfortBandUpper : 0|6@1+ (0.0986,-4.14) [0|1.26] "m/s^2" ESC
|
||||
SG_ ComfortBandLower : 6|6@1+ (0.0986,-4.14) [0|1.26] "m/s^2" ESC
|
||||
SG_ JerkUpperLimit : 12|7@1+ (1,0) [0|12.7] "m/s^3" ESC
|
||||
SG_ JerkLowerLimit : 19|7@1+ (0.1,0) [0|12.7] "m/s^3" ESC
|
||||
SG_ ACCMode : 32|3@1+ (1,0) [0|7] "" CLU,HUD,LDWS_LKAS,ESC
|
||||
SG_ ObjGap : 56|8@1+ (1,0) [0|255] "" CLU,HUD,ESC
|
||||
|
||||
BO_ 882 ELECT_GEAR: 8 XXX
|
||||
SG_ Elect_Gear_Shifter : 16|3@1+ (1,0) [0|7] "" CLU
|
||||
|
||||
BO_ 1157 LFAHDA_MFC: 4 XXX
|
||||
SG_ LFA_USM : 28|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ LFA_SysWarning : 16|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ ACTIVE2 : 4|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ HDA_USM : 0|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ ACTIVE2 : 4|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ LFA_SysWarning : 16|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ ACTIVE : 25|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ LFA_USM : 28|2@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 913 BCM_PO_11: 8 Vector__XXX
|
||||
SG_ BCM_Door_Dri_Status : 5|1@0+ (1,0) [0|1] "" PT_ESC_ABS
|
||||
SG_ BCM_Shift_R_MT_SW_Status : 39|2@0+ (1,0) [0|3] "" PT_ESC_ABS
|
||||
|
||||
BO_ 1426 LABEL11: 8 XXX
|
||||
SG_ CC_React : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 910 WHL_SPD12_FS: 5 iBAU
|
||||
SG_ CRC : 0|8@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ WHL_SPD12_AliveCounter : 8|4@1+ (1,0) [0|15] "" Vector__XXX
|
||||
SG_ WHL_SPD_FL : 12|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
|
||||
SG_ WHL_SPD_FR : 26|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
|
||||
|
||||
BO_ 911 WHL_SPD13_FS: 5 iBAU
|
||||
SG_ CRC : 0|8@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ WHL_SPD13_AliveCounter : 8|4@1+ (1,0) [0|15] "" Vector__XXX
|
||||
SG_ WHL_SPD_RL : 12|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
|
||||
SG_ WHL_SPD_RR : 26|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
|
||||
|
||||
BO_ 865 ADAS_PRK_11: 8 ADAS_PRK
|
||||
SG_ CF_PCA_BrkReq : 24|1@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ CF_PCA_DclTrgtVal : 28|4@1+ (0.04,0) [0|0] "g" Vector__XXX
|
||||
SG_ PCA_ALIVE_CNT : 40|4@1+ (1,0) [0|0] "" Vector__XXX
|
||||
SG_ PCA_CHECK_SUM : 48|8@1+ (1,0) [0|0] "" Vector__XXX
|
||||
|
||||
BO_ 882 ELECT_GEAR: 8 XXX
|
||||
SG_ Elect_Gear_Shifter : 16|4@1+ (1,0) [0|7] "" CLU
|
||||
|
||||
BO_ 881 E_EMS11: 8 XXX
|
||||
SG_ Brake_Pedal_Pos : 0|8@1+ (1,0) [0|127] "" XXX
|
||||
SG_ IG_Reactive_Stat : 8|3@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Gear_Change : 12|1@0+ (1,0) [0|31] "" XXX
|
||||
SG_ Cruise_Limit_Status : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Limit_Target : 23|8@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Accel_Pedal_Pos : 31|8@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
BO_ 1355 EV_PC6: 8 CGW
|
||||
SG_ CF_Vcu_SbwWarnMsg : 16|3@1+ (1,0) [0|7] "" Vector__XXX
|
||||
|
||||
BO_ 1430 EV_PC2: 8 CGW
|
||||
SG_ CR_Ldc_ActVol_LS_V : 32|8@1+ (0.1,0) [0|0] "V" Vector__XXX
|
||||
|
||||
BO_ 1535 EV_PC10: 8 CGW
|
||||
SG_ CF_Vcu_EpbRequest : 37|1@1+ (1,0) [0|0] "" Vector__XXX
|
||||
|
||||
BO_ 908 RSPA11: 8 RSPA
|
||||
SG_ CF_RSPA_State : 0|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ CF_RSPA_Act : 4|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ CF_RSPA_DecCmd : 6|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ CF_RSPA_Trgt_Spd : 8|10@1+ (0.01,0) [0|10.23] "km/h" XXX
|
||||
SG_ CF_RSPA_StopReq : 18|1@1+ (1,0) [0|2] "" XXX
|
||||
SG_ CR_RSPA_EPB_Req : 22|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ CF_RSPA_ACC_ACT : 50|1@1+ (1,0) [0|2] "" XXX
|
||||
SG_ CF_RSPA_AliveCounter : 52|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ CF_RSPA_CRC : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 914 S_MDPS11: 8 XXX
|
||||
SG_ CF_Mdps_Stat : 0|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ CR_Mdps_DrvTq : 8|12@1+ (1,0) [0|15] "" XXX
|
||||
SG_ CR_Mdps_StrAng : 24|16@1- (1,0) [0|65535] "" XXX
|
||||
SG_ CF_Mdps_AliveCnt : 47|8@0+ (1,0) [0|255] "" XXX
|
||||
SG_ CF_Mdps_Chksum : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 357 S_MDPS12: 8 XXX
|
||||
SG_ NEW_SIGNAL_1 : 0|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ NEW_SIGNAL_2 : 12|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Counter : 48|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Checksum : 63|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 352 AHB1: 8 iBAU
|
||||
SG_ CF_Ahb_SLmp : 0|2@1+ (1,0) [0|3] "" CLU
|
||||
SG_ CF_Ahb_Def : 2|2@1+ (1,0) [0|3] "" CGW
|
||||
SG_ CF_Ahb_Act : 4|2@1+ (1,0) [0|3] "" Vector__XXX
|
||||
SG_ CF_Ahb_Diag : 6|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ CF_Ahb_WLmp : 7|1@1+ (1,0) [0|1] "" CLU
|
||||
SG_ CR_Ahb_StDep_mm : 8|16@1- (0.1,0) [-3276.8|3276.7] "mm" Vector__XXX
|
||||
SG_ CF_Ahb_SnsFail : 24|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ CF_Ahb_PedalCalStat : 25|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ CF_Ahb_Bzzr : 26|1@1+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ CF_Ahb_ChkSum : 56|8@1+ (1,0) [0|255] "" Vector__XXX
|
||||
|
||||
BO_ 1191 4a7MFC: 8 XXX
|
||||
SG_ PAINT1 : 0|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1162 BCA11: 8 BCW
|
||||
SG_ CF_BCA_State : 16|3@1+ (1,0) [0|7] "" CLU,iBAU
|
||||
SG_ CF_BCA_Warning : 19|2@1+ (1,0) [0|3] "" CLU,iBAU
|
||||
SG_ AliveCounter : 21|4@1+ (1,0) [0|15] "" CLU,iBAU
|
||||
SG_ RCCA_Brake_Command : 29|1@1+ (1,0) [0|1] "" iBAU
|
||||
SG_ Check_Sum : 56|8@1+ (1,0) [0|16] "" iBAU
|
||||
|
||||
BO_ 1136 P_STS: 6 CGW
|
||||
SG_ HCU1_STS : 6|2@1+ (1,0) [0|3] "" BCW,EPB,FCA,MDPS,SCC,iBAU
|
||||
SG_ HCU5_STS : 8|2@1+ (1,0) [0|3] "" EPB,FCA,MDPS,iBAU
|
||||
|
||||
BO_ 304 YRS11: 8 ACU
|
||||
SG_ CR_Yrs_Yr : 0|16@1+ (0.005,-163.84) [-163.84|163.83] "deg/s" CGW,iBAU
|
||||
SG_ CR_Yrs_LatAc : 16|16@1+ (0.000127465,-4.17677312) [-4.17677312|4.17651819] "g" iBAU
|
||||
SG_ CF_Yrs_YrStat : 32|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CF_Yrs_LatAcStat : 36|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CF_Yrs_MCUStat : 40|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CR_Yrs_MsgCnt1 : 48|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CR_Yrs_Crc1 : 56|8@1+ (1,0) [0|255] "" iBAU
|
||||
|
||||
BO_ 320 YRS12: 8 ACU
|
||||
SG_ CF_Yrs_LongAcStat : 16|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CF_IMU_ResetStat : 20|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ YRS_Temp : 24|8@1+ (1,-68) [-68|187] "" iBAU
|
||||
SG_ YRS_TempStat : 32|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CF_Yrs_Type : 36|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CR_Yrs_MsgCnt2 : 48|4@1+ (1,0) [0|15] "" iBAU
|
||||
SG_ CR_Yrs_Crc2 : 56|8@1+ (1,0) [0|255] "" iBAU
|
||||
SG_ CR_Yrs_LongAc : 0|16@1+ (0.000127465,-4.17677312) [-4.17677312|4.17651819] "g" CGW,iBAU
|
||||
|
||||
BO_ 1173 YRS13: 8 ACU
|
||||
SG_ YRS_SeralNo : 16|48@1+ (1,0) [0|281474976710655] "" iBAU
|
||||
|
||||
BO_ 870 366_EMS: 8 EMS
|
||||
SG_ N : 7|16@0+ (1,0.25) [0|16383.75] "rpm" XXX
|
||||
SG_ EMS_Related : 23|16@0+ (1,0) [0|65535] "" XXX
|
||||
SG_ TQFR : 39|8@0+ (0.390625,0) [0|99.6094] "%" XXX
|
||||
SG_ VS : 40|8@1+ (1,0) [0|255] "km/h" MDPS
|
||||
SG_ SWI_IGK : 48|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 854 356: 8 XXX
|
||||
SG_ PAINT1 : 32|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ PAINT2 : 34|2@0+ (1,0) [0|1] "" XXX
|
||||
SG_ PAINT3 : 36|2@0+ (1,0) [0|3] "" XXX
|
||||
SG_ PAINT4 : 38|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1042 ICM_412h: 8 ICM
|
||||
SG_ T_Outside_input : 0|9@0+ (0.01,0) [0|5] "V" Vector__XXX
|
||||
SG_ WarningSoundOutput_1Group : 5|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ WarningSoundOutput_2Group : 6|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ WarningSoundOutput_3Group : 7|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ TRIP_A_DT_Display_clock : 22|7@0+ (1,0) [0|99] "clock" Vector__XXX
|
||||
SG_ TRIP_A_DT_Display_minute : 29|6@0+ (1,0) [0|59] "minute" Vector__XXX
|
||||
SG_ TRIP_B_DT_Display_clock : 38|7@0+ (1,0) [0|99] "clock" Vector__XXX
|
||||
SG_ TRIP_B_DT_Display_minute : 45|6@0+ (1,0) [0|59] "minute" Vector__XXX
|
||||
SG_ PopupMessageOutput_1Level : 48|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ PopupMessageOutput_2Level : 49|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ PopupMessageOutput_3Level : 50|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ PopupMessageOutput_4Level : 51|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ PopupMessageOutput_5Level : 52|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ PopupMessageOutput_6Level : 53|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ PopupMessageOutput_7Level : 54|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
SG_ PopupMessageOutput_8Level : 55|1@0+ (1,0) [0|1] "" Vector__XXX
|
||||
|
||||
VAL_ 909 CF_VSM_Warn 2 "FCW" 3 "AEB";
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
CM_ "AUTOGENERATED FILE, DO NOT EDIT"
|
||||
|
||||
|
||||
CM_ "Imported file _subaru_preglobal_2015.dbc starts here"
|
||||
VERSION ""
|
||||
|
||||
|
||||
NS_ :
|
||||
NS_DESC_
|
||||
CM_
|
||||
BA_DEF_
|
||||
BA_
|
||||
VAL_
|
||||
CAT_DEF_
|
||||
CAT_
|
||||
FILTER
|
||||
BA_DEF_DEF_
|
||||
EV_DATA_
|
||||
ENVVAR_DATA_
|
||||
SGTYPE_
|
||||
SGTYPE_VAL_
|
||||
BA_DEF_SGTYPE_
|
||||
BA_SGTYPE_
|
||||
SIG_TYPE_REF_
|
||||
VAL_TABLE_
|
||||
SIG_GROUP_
|
||||
SIG_VALTYPE_
|
||||
SIGTYPE_VALTYPE_
|
||||
BO_TX_BU_
|
||||
BA_DEF_REL_
|
||||
BA_REL_
|
||||
BA_DEF_DEF_REL_
|
||||
BU_SG_REL_
|
||||
BU_EV_REL_
|
||||
BU_BO_REL_
|
||||
SG_MUL_VAL_
|
||||
|
||||
BS_:
|
||||
|
||||
BU_: XXX X
|
||||
|
||||
|
||||
BO_ 2 Steering: 8 XXX
|
||||
SG_ Steering_Angle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
|
||||
SG_ Counter : 27|3@0+ (1,0) [0|7] "" XXX
|
||||
SG_ Checksum : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 208 G_Sensor: 8 XXX
|
||||
SG_ Steering_Angle : 0|16@1- (-0.1,0) [-500|500] "" XXX
|
||||
SG_ Lateral : 16|16@1- (-0.0035,1) [-255|255] "" XXX
|
||||
SG_ Longitudinal : 48|16@1- (-0.00035,0) [-255|255] "" XXX
|
||||
|
||||
BO_ 209 Brake_Pedal: 8 XXX
|
||||
SG_ Speed : 0|16@1+ (0.05625,0) [0|255] "KPH" XXX
|
||||
SG_ Brake_Pedal : 16|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 210 Brake_2: 8 XXX
|
||||
SG_ Brake_Light : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Related : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Right_Brake : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Left_Brake : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 211 Brake_Type: 8 XXX
|
||||
SG_ Brake_Light : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Speed_Counter : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Cruise_On : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal_On : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 212 Wheel_Speeds: 8 XXX
|
||||
SG_ FL : 0|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ FR : 16|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ RL : 32|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ RR : 48|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
|
||||
BO_ 320 Throttle: 8 XXX
|
||||
SG_ Throttle_Pedal : 0|8@1+ (0.392157,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Not_Full_Throttle : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Engine_RPM : 16|14@1+ (1,0) [0|32767] "" XXX
|
||||
SG_ Off_Throttle : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Throttle_Cruise : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Combo : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Body : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Off_Throttle_2 : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 321 Engine: 8 XXX
|
||||
SG_ Engine_Torque : 0|15@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Engine_Stop : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Wheel_Torque : 16|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Engine_RPM : 32|12@1+ (1,0) [0|8191] "" XXX
|
||||
|
||||
BO_ 324 CruiseControl: 8 XXX
|
||||
SG_ OnOffButton : 2|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_BUTTON : 3|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RES_BUTTON : 4|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Button : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_On : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal_On : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 328 Transmission: 8 XXX
|
||||
SG_ Manual_Gear : 4|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Transmission_Engine : 16|15@1+ (1,0) [0|65535] "" XXX
|
||||
SG_ Gear : 48|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Gear_2 : 52|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Paddle_Shift : 60|2@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 329 CVT_Ratio: 8 XXX
|
||||
|
||||
BO_ 336 Brake_Pressure: 8 XXX
|
||||
SG_ Brake_Pressure_Right : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Pressure_Left : 8|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 338 Stalk: 8 XXX
|
||||
SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Brake_Light : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Runlights : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Headlights : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Highbeam : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Wiper : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 352 ES_Brake: 8 XXX
|
||||
SG_ Brake_Pressure : 0|16@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Light : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ES_Error : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_On : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 353 ES_CruiseThrottle: 8 XXX
|
||||
SG_ Throttle_Cruise : 0|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_Activated : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 17|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Brake_On : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DistanceSwap : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Standstill : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ CloseDistance : 24|8@1+ (0.0196,0) [0|255] "m" XXX
|
||||
SG_ Signal4 : 32|9@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Standstill_2 : 41|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ES_Error : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal5 : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 44|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Signal6 : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Button : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Signal7 : 51|5@1+ (1,0) [0|31] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 354 ES_RPM: 8 XXX
|
||||
SG_ Brake : 8|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 9|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RPM : 16|16@1+ (1,0) [0|65535] "" XXX
|
||||
SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
BO_ 356 ES_LKAS: 8 XXX
|
||||
SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ LKAS_Command : 8|13@1- (-1,0) [-4096|4096] "" XXX
|
||||
SG_ LKAS_Active : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 359 ES_LDW: 8 XXX
|
||||
SG_ All_depart_2015 : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Right_Line_2017 : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Left_Line_2017 : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1All_Depart : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig2All_Depart : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Inactive_2017 : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Active : 37|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1Right_Depart : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1Right_Depart_Front : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig2Right_Depart : 50|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Left_Depart_Front : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig3All_Depart : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 604 BSD_RCTA: 8 XXX
|
||||
SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ State : 5|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_ADJACENT : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_ADJACENT : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_APPROACHING : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_APPROACHING : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_RCTA : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_RCTA : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 642 Dashlights: 8 XXX
|
||||
SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ SEATBELT_FL : 40|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LEFT_BLINKER : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RIGHT_BLINKER : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 880 Steering_Torque_2: 8 XXX
|
||||
SG_ Steering_Voltage_Flat : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
|
||||
SG_ Counter : 40|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 884 BodyInfo: 8 XXX
|
||||
SG_ DOOR_OPEN_FR : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_FL : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RL : 26|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RR : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_Hatch : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 864 Engine_Temp: 8 XXX
|
||||
SG_ Oil_Temp : 16|8@1+ (1,-40) [0|255] "" XXX
|
||||
SG_ Coolant_Temp : 24|8@1+ (1,-40) [0|255] "" XXX
|
||||
SG_ Cruise_Activated : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Saved_Speed : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 866 Fuel: 8 XXX
|
||||
|
||||
BO_ 1745 Dash_State: 8 XXX
|
||||
SG_ Units : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
CM_ SG_ 320 Off_Throttle_2 "Less sensitive";
|
||||
CM_ SG_ 320 Throttle_Body "Throttle related";
|
||||
CM_ SG_ 328 Gear "15 = P, 14 = R, 0 = N, 1-6=gear";
|
||||
CM_ SG_ 328 Gear_2 "15 = P, 14 = R, 0 = N, 1-6=gear";
|
||||
CM_ SG_ 353 Button "1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 resume deep";
|
||||
CM_ SG_ 354 RPM "20hz version of Transmission_Engine under Transmission";
|
||||
CM_ SG_ 359 Sig1Right_Depart "right depart, hill steep and seatbelt disengage";
|
||||
CM_ SG_ 359 LKAS_Inactive_2017 "1 when not steering, 0 when lkas steering";
|
||||
CM_ SG_ 359 Sig1Right_Depart_Front "object in front, right depart, hill steep and seatbelt disengage alert ";
|
||||
CM_ SG_ 359 Left_Depart_Front "warning after acceleration into car in front and left depart";
|
||||
CM_ SG_ 359 Sig1All_Depart "Left and right depart";
|
||||
CM_ SG_ 359 Sig2All_Depart "Left and right depart";
|
||||
CM_ SG_ 359 All_depart_2015 "always 1 on 2017";
|
||||
CM_ SG_ 604 R_APPROACHING "Faster car approaching in far right lane";
|
||||
CM_ SG_ 604 L_APPROACHING "Faster car approaching in far left lane";
|
||||
CM_ SG_ 604 R_RCTA "Rear cross traffic alert, only when in R gear";
|
||||
CM_ SG_ 604 L_RCTA "Rear cross traffic alert, only when in R gear";
|
||||
CM_ SG_ 642 Counter "Affected by signals";
|
||||
CM_ SG_ 642 SEATBELT_FL "Driver seatbelt";
|
||||
CM_ SG_ 880 Steering_Voltage_Flat "receives later than 371";
|
||||
|
||||
VAL_ 328 Gear 0 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D" 14 "R" 15 "P";
|
||||
VAL_ 1745 Units 0 "Metric" 1 "Imperial";
|
||||
|
||||
CM_ "subaru_forester_2017.dbc starts here"
|
||||
|
||||
|
||||
BO_ 355 ES_DashStatus: 8 XXX
|
||||
SG_ Not_Ready_Startup : 4|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_On : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Set_Speed : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 40|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Cruise_Activated : 54|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 881 Steering_Torque: 8 XXX
|
||||
SG_ Steering_Motor_Flat : 0|10@1+ (32,0) [0|1000] "" XXX
|
||||
SG_ Steer_Torque_Output : 16|11@1- (-32,0) [-1000|1000] "" XXX
|
||||
SG_ LKA_Lockout : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
|
||||
SG_ Steering_Angle : 40|16@1- (-0.033,0) [-600|600] "" XXX
|
||||
@@ -1,209 +0,0 @@
|
||||
VERSION ""
|
||||
|
||||
|
||||
NS_ :
|
||||
NS_DESC_
|
||||
CM_
|
||||
BA_DEF_
|
||||
BA_
|
||||
VAL_
|
||||
CAT_DEF_
|
||||
CAT_
|
||||
FILTER
|
||||
BA_DEF_DEF_
|
||||
EV_DATA_
|
||||
ENVVAR_DATA_
|
||||
SGTYPE_
|
||||
SGTYPE_VAL_
|
||||
BA_DEF_SGTYPE_
|
||||
BA_SGTYPE_
|
||||
SIG_TYPE_REF_
|
||||
VAL_TABLE_
|
||||
SIG_GROUP_
|
||||
SIG_VALTYPE_
|
||||
SIGTYPE_VALTYPE_
|
||||
BO_TX_BU_
|
||||
BA_DEF_REL_
|
||||
BA_REL_
|
||||
BA_DEF_DEF_REL_
|
||||
BU_SG_REL_
|
||||
BU_EV_REL_
|
||||
BU_BO_REL_
|
||||
SG_MUL_VAL_
|
||||
|
||||
BS_:
|
||||
|
||||
BU_: XXX X
|
||||
|
||||
|
||||
BO_ 2 Steering: 8 XXX
|
||||
SG_ Steering_Angle : 7|16@0- (0.1,0) [0|65535] "" XXX
|
||||
SG_ Counter : 25|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ CHECKSUM : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 64 Throttle: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Engine_RPM : 16|12@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Pedal : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Cruise : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Combo : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Off_Accel : 60|4@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
BO_ 72 Transmission: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Gear : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 326 Cruise_Buttons: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|30@1+ (1,0) [0|1073741823] "" XXX
|
||||
SG_ Main : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ set : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Resume : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 45|19@1+ (1,0) [0|524287] "" XXX
|
||||
|
||||
BO_ 315 G_Sensor: 8 XXX
|
||||
SG_ Lateral : 48|8@1- (-0.1,0) [0|255] "m/s2" XXX
|
||||
SG_ Longitudinal : 56|8@1- (-0.1,0) [0|255] "m/s2" XXX
|
||||
|
||||
BO_ 314 Wheel_Speeds: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ FR : 12|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
SG_ RR : 25|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
SG_ FL : 51|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
SG_ RL : 38|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
|
||||
BO_ 281 Steering_Torque: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Steer_Error_1 : 12|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 16|11@1- (-1,0) [0|3] "" XXX
|
||||
SG_ Steer_Error_2 : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Steer_Warning : 29|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Steering_Angle : 32|16@1- (-0.0217,0) [0|255] "" X
|
||||
SG_ Steer_Torque_Output : 48|11@1- (-1,0) [0|31] "" XXX
|
||||
|
||||
BO_ 312 Brake_Pressure_L_R: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|31] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Brake_1 : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_2 : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 313 Brake_Pedal: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Brake_Pedal_On : 34|1@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Brake_Pedal : 36|12@1+ (1,0) [0|65535] "" XXX
|
||||
|
||||
BO_ 290 ES_LKAS: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ SET_1 : 12|1@0+ (1,0) [0|3] "" XXX
|
||||
SG_ LKAS_Output : 16|13@1- (-1,0) [0|3] "" XXX
|
||||
SG_ LKAS_Request : 29|1@0+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 544 ES_Brake: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Brake_Pressure : 16|16@1+ (1,0) [0|255] "" XXX
|
||||
SG_ __Status : 36|4@1+ (1,0) [0|63] "" XXX
|
||||
|
||||
BO_ 545 ES_Distance: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|20@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal2 : 32|24@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Main : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 57|7@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 546 ES_Status: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ RPM : 16|12@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Cruise_Activated : 29|1@0+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_Brake : 30|1@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 576 CruiseControl: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_On : 40|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_Activated : 41|1@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 552 BSD_RCTA: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ R_ADJACENT : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_ADJACENT : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_APPROACHING : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_APPROACHING : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 912 Dashlights: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ SEATBELT_FL : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LEFT_BLINKER : 50|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ RIGHT_BLINKER : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 940 BodyInfo: 8 XXX
|
||||
SG_ DOOR_OPEN_FL : 32|1@1+ (1,0) [0|255] "" XXX
|
||||
SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ DOOR_OPEN_RL : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RR : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_TRUNK : 36|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Lowbeam : 57|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ WIPERS : 62|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 801 ES_DashStatus: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Cruise_Distance : 28|3@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_Activated : 36|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Cruise_Fault : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal : 51|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Car_Follow : 52|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_State : 60|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 802 ES_LKAS_State: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Keep_Hands_On_Wheel : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Empty_Box : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal1 : 14|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ LKAS_ACTIVE : 17|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Signal2 : 18|5@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Backward_Speed_Limit_Menu : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_ENABLE_3 : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_ENABLE_2 : 26|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal4 : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Left_Line_Visible : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal6 : 29|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Right_Line_Visible : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal7 : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ FCW_Cont_Beep : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ FCW_Repeated_Beep : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Throttle_Management_Activated : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Traffic_light_Ahead : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Right_Depart : 36|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Signal5 : 37|27@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1677 Dash_State: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Units : 29|3@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
CM_ SG_ 801 Cruise_State "0 = Normal, 3 = Hold";
|
||||
CM_ SG_ 802 Traffic_light_Ahead "Crosstrek 2018 = car in front has moved";
|
||||
CM_ SG_ 940 FOG_LIGHTS2 "yellow fog light in the dash";
|
||||
CM_ SG_ 940 Highbeam "01 = low beam, 11 = high beam";
|
||||
CM_ SG_ 1677 Units "1 = imperial, 6 = metric";
|
||||
VAL_ 72 Gear 2 "N" 3 "R" 4 "P" 121 "D" 137 "1" 145 "2" 153 "3" 161 "4" 169 "5" 177 "6";
|
||||
@@ -0,0 +1,306 @@
|
||||
CM_ "AUTOGENERATED FILE, DO NOT EDIT"
|
||||
|
||||
|
||||
CM_ "Imported file _subaru_global.dbc starts here"
|
||||
VERSION ""
|
||||
|
||||
|
||||
NS_ :
|
||||
NS_DESC_
|
||||
CM_
|
||||
BA_DEF_
|
||||
BA_
|
||||
VAL_
|
||||
CAT_DEF_
|
||||
CAT_
|
||||
FILTER
|
||||
BA_DEF_DEF_
|
||||
EV_DATA_
|
||||
ENVVAR_DATA_
|
||||
SGTYPE_
|
||||
SGTYPE_VAL_
|
||||
BA_DEF_SGTYPE_
|
||||
BA_SGTYPE_
|
||||
SIG_TYPE_REF_
|
||||
VAL_TABLE_
|
||||
SIG_GROUP_
|
||||
SIG_VALTYPE_
|
||||
SIGTYPE_VALTYPE_
|
||||
BO_TX_BU_
|
||||
BA_DEF_REL_
|
||||
BA_REL_
|
||||
BA_DEF_DEF_REL_
|
||||
BU_SG_REL_
|
||||
BU_EV_REL_
|
||||
BU_BO_REL_
|
||||
SG_MUL_VAL_
|
||||
|
||||
BS_:
|
||||
|
||||
BU_: XXX X
|
||||
|
||||
|
||||
BO_ 2 Steering: 8 XXX
|
||||
SG_ Steering_Angle : 7|16@0- (0.1,0) [0|65535] "" XXX
|
||||
SG_ Counter : 25|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ CHECKSUM : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 64 Throttle: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Engine_RPM : 16|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Throttle_Pedal : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Cruise : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Combo : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Signal1 : 56|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Off_Accel : 60|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 316 Brake_Status: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|46@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ES_Brake : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 59|3@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 326 Cruise_Buttons: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|30@1+ (1,0) [0|1073741823] "" XXX
|
||||
SG_ Main : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Set : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Resume : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 45|19@1+ (1,0) [0|524287] "" XXX
|
||||
|
||||
BO_ 315 G_Sensor: 8 XXX
|
||||
SG_ Lateral : 48|8@1- (-0.1,0) [0|255] "m/s2" XXX
|
||||
SG_ Longitudinal : 56|8@1- (-0.1,0) [0|255] "m/s2" XXX
|
||||
|
||||
BO_ 314 Wheel_Speeds: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ FR : 12|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
SG_ RR : 25|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
SG_ FL : 51|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
SG_ RL : 38|13@1+ (0.057,0) [0|255] "kph" XXX
|
||||
|
||||
BO_ 280 STOP_START: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ State : 63|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 281 Steering_Torque: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Steer_Error_1 : 12|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 16|11@1- (-1,0) [-1000|1000] "" XXX
|
||||
SG_ Steer_Error_2 : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Steer_Warning : 29|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Steering_Angle : 32|16@1- (-0.0217,0) [-600|600] "" X
|
||||
SG_ Steer_Torque_Output : 48|11@1- (-1,0) [-1000|1000] "" XXX
|
||||
|
||||
BO_ 312 Brake_Pressure_L_R: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Brake_1 : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_2 : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 313 Brake_Pedal: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Speed : 16|12@1+ (0.05625,0) [0|255] "kph" XXX
|
||||
SG_ Signal2 : 28|6@1+ (1,0) [0|63] "" XXX
|
||||
SG_ Brake_Lights : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal : 36|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Signal4 : 48|16@1+ (1,0) [0|65535] "" XXX
|
||||
|
||||
BO_ 290 ES_LKAS: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ SET_1 : 12|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Output : 16|13@1- (-1,0) [-8191|8191] "" XXX
|
||||
SG_ LKAS_Request : 29|1@0+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 544 ES_Brake: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Brake_Pressure : 16|16@1+ (1,0) [0|65535] "" XXX
|
||||
SG_ Signal2 : 32|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_Brake_Lights : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Brake_Fault : 37|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Brake_Active : 38|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 39|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 40|24@1+ (1,0) [0|16777215] "" XXX
|
||||
|
||||
BO_ 577 Cruise_Status: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_On : 54|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 55|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Active : 57|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 552 BSD_RCTA: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ R_ADJACENT : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_ADJACENT : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_APPROACHING : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_APPROACHING : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 912 Dashlights: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ ICY_ROAD : 32|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ SEATBELT_FL : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LEFT_BLINKER : 50|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RIGHT_BLINKER : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 940 BodyInfo: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ DOOR_OPEN_FL : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RL : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RR : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_TRUNK : 36|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Lowbeam : 57|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ WIPERS : 62|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ BRAKE : 54|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 801 ES_DashStatus: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ PCB_Off : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LDW_Off : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal1 : 14|10@1+ (1,0) [0|1023] "" XXX
|
||||
SG_ Cruise_Soft_Disable : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 25|3@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Distance : 28|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Signal3 : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Conventional_Cruise : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal4 : 33|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal5 : 37|3@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Cruise_Fault : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_On : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal6 : 50|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Lights : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Car_Follow : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal7 : 53|3@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_State : 60|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 802 ES_LKAS_State: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Keep_Hands_On_Wheel : 12|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Empty_Box : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal1 : 14|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ LKAS_ACTIVE : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 18|5@1+ (1,0) [0|31] "" XXX
|
||||
SG_ Backward_Speed_Limit_Menu : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_ENABLE_3 : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Left_Line_Light_Blink : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_ENABLE_2 : 26|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Right_Line_Light_Blink : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Left_Line_Visible : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Left_Line_Green : 29|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Right_Line_Visible : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Right_Line_Green : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Alert : 32|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal3 : 36|28@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 722 AC_State: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ AC_Mode : 37|3@1+ (1,0) [0|1] "" XXX
|
||||
SG_ AC_ON : 24|2@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 1677 Dash_State: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Units : 29|3@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
CM_ SG_ 64 Throttle_Combo "Throttle Cruise + Pedal";
|
||||
CM_ SG_ 313 Brake_Lights "Driver or Cruise Brake on";
|
||||
CM_ SG_ 544 Cruise_Brake_Lights "1 = switch on brake lights";
|
||||
CM_ SG_ 801 PCB_Off "Pre-Collision Braking off";
|
||||
CM_ SG_ 801 Brake_Lights "Driver or Cruise brake on";
|
||||
CM_ SG_ 801 Cruise_State "0 = Normal, 1 = Hold+User Brake, 2 = Ready, 3 = Hold";
|
||||
CM_ SG_ 801 Far_Distance "1=0-5m, 2=5-10m, 3=10-15m, 4=15-20m, 5=20-25m, 6=25-30m, 7=30-35m, 8=35-40m, 9=40-45m, 10=45-50m, 11=50-55m, 12=55-60m, 13=60-65m, 14=65-70m, 15=75m+";
|
||||
CM_ SG_ 801 Cruise_Soft_Disable "Eyesight soft disable (eg direct sunlight)";
|
||||
CM_ SG_ 802 LKAS_Alert "1 = FCW_Cont_Beep, 2 = FCW_Repeated_Beep, 3 = Throttle_Management_Activated_Warning, 4 = Throttle_Management_Activated_Alert, 8 = Traffic_Light_Ahead, 9 = Apply_Brake_to_Hold Position, 11 = LDW_Right, 12 = LDW_Left, 13 = Stay_Alert, 14 = Lead_Vehicle_Start_Alert";
|
||||
CM_ SG_ 912 ICY_ROAD "1 = DASHLIGHT ON, 2 = WARNING, 3 = OFF";
|
||||
CM_ SG_ 940 Highbeam "01 = low beam, 11 = high beam";
|
||||
CM_ SG_ 940 FOG_LIGHTS2 "yellow fog light in the dash";
|
||||
CM_ SG_ 1677 Units "AU/EU: 1 = imperial, 3 = metric US: 3 = imperial, 4 = metric";
|
||||
|
||||
CM_ "subaru_global_2017.dbc starts here"
|
||||
|
||||
|
||||
BO_ 72 Transmission: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Gear : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ RPM : 40|16@1+ (1,0) [0|65535] "" XXX
|
||||
|
||||
BO_ 73 CVT: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ CVT_Gear : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 545 ES_Distance: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Cruise_Fault : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Throttle : 16|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Signal2 : 28|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Car_Follow : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 33|3@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Brake_Active : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Distance_Swap : 37|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_EPB : 38|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal4 : 39|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Close_Distance : 40|8@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal5 : 48|8@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Cancel : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Set : 57|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Resume : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal6 : 59|5@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 546 ES_Status: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|3@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Fault : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_RPM : 16|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Signal2 : 28|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 29|1@0+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Lights : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Hold : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 32|32@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 576 CruiseControl: 8 XXX
|
||||
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Signal1 : 12|28@1+ (1,0) [0|268435455] "" XXX
|
||||
SG_ Cruise_On : 40|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 41|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 42|22@1+ (1,0) [0|4194303] "" XXX
|
||||
|
||||
CM_ SG_ 545 Cruise_Throttle "RPM-like output signal";
|
||||
CM_ SG_ 545 Cruise_EPB "1 = Electric Parking Brake set";
|
||||
CM_ SG_ 545 Distance_Swap "Switch from Close to Far distance";
|
||||
CM_ SG_ 546 Cruise_RPM "ES RPM output for ECM and TCM";
|
||||
CM_ SG_ 546 Signal3 "0 when cruise_activated = 1";
|
||||
VAL_ 72 Gear 2 "N" 3 "R" 4 "P" 121 "D" 137 "1" 145 "2" 153 "3" 161 "4" 169 "5" 177 "6";
|
||||
@@ -0,0 +1,273 @@
|
||||
CM_ "AUTOGENERATED FILE, DO NOT EDIT"
|
||||
|
||||
|
||||
CM_ "Imported file _subaru_preglobal_2015.dbc starts here"
|
||||
VERSION ""
|
||||
|
||||
|
||||
NS_ :
|
||||
NS_DESC_
|
||||
CM_
|
||||
BA_DEF_
|
||||
BA_
|
||||
VAL_
|
||||
CAT_DEF_
|
||||
CAT_
|
||||
FILTER
|
||||
BA_DEF_DEF_
|
||||
EV_DATA_
|
||||
ENVVAR_DATA_
|
||||
SGTYPE_
|
||||
SGTYPE_VAL_
|
||||
BA_DEF_SGTYPE_
|
||||
BA_SGTYPE_
|
||||
SIG_TYPE_REF_
|
||||
VAL_TABLE_
|
||||
SIG_GROUP_
|
||||
SIG_VALTYPE_
|
||||
SIGTYPE_VALTYPE_
|
||||
BO_TX_BU_
|
||||
BA_DEF_REL_
|
||||
BA_REL_
|
||||
BA_DEF_DEF_REL_
|
||||
BU_SG_REL_
|
||||
BU_EV_REL_
|
||||
BU_BO_REL_
|
||||
SG_MUL_VAL_
|
||||
|
||||
BS_:
|
||||
|
||||
BU_: XXX X
|
||||
|
||||
|
||||
BO_ 2 Steering: 8 XXX
|
||||
SG_ Steering_Angle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
|
||||
SG_ Counter : 27|3@0+ (1,0) [0|7] "" XXX
|
||||
SG_ Checksum : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 208 G_Sensor: 8 XXX
|
||||
SG_ Steering_Angle : 0|16@1- (-0.1,0) [-500|500] "" XXX
|
||||
SG_ Lateral : 16|16@1- (-0.0035,1) [-255|255] "" XXX
|
||||
SG_ Longitudinal : 48|16@1- (-0.00035,0) [-255|255] "" XXX
|
||||
|
||||
BO_ 209 Brake_Pedal: 8 XXX
|
||||
SG_ Speed : 0|16@1+ (0.05625,0) [0|255] "KPH" XXX
|
||||
SG_ Brake_Pedal : 16|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 210 Brake_2: 8 XXX
|
||||
SG_ Brake_Light : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Related : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Right_Brake : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Left_Brake : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 211 Brake_Type: 8 XXX
|
||||
SG_ Brake_Light : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Speed_Counter : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Cruise_On : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal_On : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 212 Wheel_Speeds: 8 XXX
|
||||
SG_ FL : 0|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ FR : 16|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ RL : 32|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ RR : 48|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
|
||||
BO_ 320 Throttle: 8 XXX
|
||||
SG_ Throttle_Pedal : 0|8@1+ (0.392157,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Not_Full_Throttle : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Engine_RPM : 16|14@1+ (1,0) [0|32767] "" XXX
|
||||
SG_ Off_Throttle : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Throttle_Cruise : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Combo : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Body : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Off_Throttle_2 : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 321 Engine: 8 XXX
|
||||
SG_ Engine_Torque : 0|15@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Engine_Stop : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Wheel_Torque : 16|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Engine_RPM : 32|12@1+ (1,0) [0|8191] "" XXX
|
||||
|
||||
BO_ 324 CruiseControl: 8 XXX
|
||||
SG_ OnOffButton : 2|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_BUTTON : 3|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RES_BUTTON : 4|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Button : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_On : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal_On : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 328 Transmission: 8 XXX
|
||||
SG_ Manual_Gear : 4|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Transmission_Engine : 16|15@1+ (1,0) [0|65535] "" XXX
|
||||
SG_ Gear : 48|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Gear_2 : 52|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Paddle_Shift : 60|2@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 329 CVT_Ratio: 8 XXX
|
||||
|
||||
BO_ 336 Brake_Pressure: 8 XXX
|
||||
SG_ Brake_Pressure_Right : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Pressure_Left : 8|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 338 Stalk: 8 XXX
|
||||
SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Brake_Light : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Runlights : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Headlights : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Highbeam : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Wiper : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 352 ES_Brake: 8 XXX
|
||||
SG_ Brake_Pressure : 0|16@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Light : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ES_Error : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_On : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 353 ES_CruiseThrottle: 8 XXX
|
||||
SG_ Throttle_Cruise : 0|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_Activated : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 17|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Brake_On : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DistanceSwap : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Standstill : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ CloseDistance : 24|8@1+ (0.0196,0) [0|255] "m" XXX
|
||||
SG_ Signal4 : 32|9@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Standstill_2 : 41|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ES_Error : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal5 : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 44|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Signal6 : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Button : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Signal7 : 51|5@1+ (1,0) [0|31] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 354 ES_RPM: 8 XXX
|
||||
SG_ Brake : 8|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 9|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RPM : 16|16@1+ (1,0) [0|65535] "" XXX
|
||||
SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
BO_ 356 ES_LKAS: 8 XXX
|
||||
SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ LKAS_Command : 8|13@1- (-1,0) [-4096|4096] "" XXX
|
||||
SG_ LKAS_Active : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 359 ES_LDW: 8 XXX
|
||||
SG_ All_depart_2015 : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Right_Line_2017 : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Left_Line_2017 : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1All_Depart : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig2All_Depart : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Inactive_2017 : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Active : 37|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1Right_Depart : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1Right_Depart_Front : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig2Right_Depart : 50|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Left_Depart_Front : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig3All_Depart : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 604 BSD_RCTA: 8 XXX
|
||||
SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ State : 5|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_ADJACENT : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_ADJACENT : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_APPROACHING : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_APPROACHING : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_RCTA : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_RCTA : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 642 Dashlights: 8 XXX
|
||||
SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ SEATBELT_FL : 40|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LEFT_BLINKER : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RIGHT_BLINKER : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 880 Steering_Torque_2: 8 XXX
|
||||
SG_ Steering_Voltage_Flat : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
|
||||
SG_ Counter : 40|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 884 BodyInfo: 8 XXX
|
||||
SG_ DOOR_OPEN_FR : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_FL : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RL : 26|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RR : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_Hatch : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 864 Engine_Temp: 8 XXX
|
||||
SG_ Oil_Temp : 16|8@1+ (1,-40) [0|255] "" XXX
|
||||
SG_ Coolant_Temp : 24|8@1+ (1,-40) [0|255] "" XXX
|
||||
SG_ Cruise_Activated : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Saved_Speed : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 866 Fuel: 8 XXX
|
||||
|
||||
BO_ 1745 Dash_State: 8 XXX
|
||||
SG_ Units : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
CM_ SG_ 320 Off_Throttle_2 "Less sensitive";
|
||||
CM_ SG_ 320 Throttle_Body "Throttle related";
|
||||
CM_ SG_ 328 Gear "15 = P, 14 = R, 0 = N, 1-6=gear";
|
||||
CM_ SG_ 328 Gear_2 "15 = P, 14 = R, 0 = N, 1-6=gear";
|
||||
CM_ SG_ 353 Button "1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 resume deep";
|
||||
CM_ SG_ 354 RPM "20hz version of Transmission_Engine under Transmission";
|
||||
CM_ SG_ 359 Sig1Right_Depart "right depart, hill steep and seatbelt disengage";
|
||||
CM_ SG_ 359 LKAS_Inactive_2017 "1 when not steering, 0 when lkas steering";
|
||||
CM_ SG_ 359 Sig1Right_Depart_Front "object in front, right depart, hill steep and seatbelt disengage alert ";
|
||||
CM_ SG_ 359 Left_Depart_Front "warning after acceleration into car in front and left depart";
|
||||
CM_ SG_ 359 Sig1All_Depart "Left and right depart";
|
||||
CM_ SG_ 359 Sig2All_Depart "Left and right depart";
|
||||
CM_ SG_ 359 All_depart_2015 "always 1 on 2017";
|
||||
CM_ SG_ 604 R_APPROACHING "Faster car approaching in far right lane";
|
||||
CM_ SG_ 604 L_APPROACHING "Faster car approaching in far left lane";
|
||||
CM_ SG_ 604 R_RCTA "Rear cross traffic alert, only when in R gear";
|
||||
CM_ SG_ 604 L_RCTA "Rear cross traffic alert, only when in R gear";
|
||||
CM_ SG_ 642 Counter "Affected by signals";
|
||||
CM_ SG_ 642 SEATBELT_FL "Driver seatbelt";
|
||||
CM_ SG_ 880 Steering_Voltage_Flat "receives later than 371";
|
||||
|
||||
VAL_ 328 Gear 0 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D" 14 "R" 15 "P";
|
||||
VAL_ 1745 Units 0 "Metric" 1 "Imperial";
|
||||
|
||||
CM_ "subaru_outback_2015.dbc starts here"
|
||||
|
||||
|
||||
BO_ 358 ES_DashStatus: 8 XXX
|
||||
SG_ Not_Ready_Startup : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Seatbelt_Disengage : 12|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Disengage_Alert : 14|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_On : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal1 : 18|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ WHEELS_MOVING_2015 : 19|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Driver_Input : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Distance_Bars : 21|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Cruise_Set_Speed : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ ES_Error : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_On_2 : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 37|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Steep_Hill_Disengage : 44|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Lead_Car : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Obstacle_Distance : 48|4@1+ (5,0) [0|15] "m" XXX
|
||||
|
||||
BO_ 881 Steering_Torque: 8 XXX
|
||||
SG_ Steering_Motor_Flat : 0|10@1+ (32,0) [0|1000] "" XXX
|
||||
SG_ Steer_Torque_Output : 16|11@1- (-32,0) [-1000|1000] "" XXX
|
||||
SG_ LKA_Lockout : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 29|11@1- (1,0) [-1000|1000] "" XXX
|
||||
SG_ Steering_Angle : 40|16@1- (-0.033,0) [-600|600] "" XXX
|
||||
|
||||
CM_ SG_ 358 Disengage_Alert "seatbelt and steep hill disengage";
|
||||
CM_ SG_ 358 ES_Error "No engagement until restart";
|
||||
CM_ SG_ 358 Lead_Car "front car detected";
|
||||
@@ -0,0 +1,273 @@
|
||||
CM_ "AUTOGENERATED FILE, DO NOT EDIT"
|
||||
|
||||
|
||||
CM_ "Imported file _subaru_preglobal_2015.dbc starts here"
|
||||
VERSION ""
|
||||
|
||||
|
||||
NS_ :
|
||||
NS_DESC_
|
||||
CM_
|
||||
BA_DEF_
|
||||
BA_
|
||||
VAL_
|
||||
CAT_DEF_
|
||||
CAT_
|
||||
FILTER
|
||||
BA_DEF_DEF_
|
||||
EV_DATA_
|
||||
ENVVAR_DATA_
|
||||
SGTYPE_
|
||||
SGTYPE_VAL_
|
||||
BA_DEF_SGTYPE_
|
||||
BA_SGTYPE_
|
||||
SIG_TYPE_REF_
|
||||
VAL_TABLE_
|
||||
SIG_GROUP_
|
||||
SIG_VALTYPE_
|
||||
SIGTYPE_VALTYPE_
|
||||
BO_TX_BU_
|
||||
BA_DEF_REL_
|
||||
BA_REL_
|
||||
BA_DEF_DEF_REL_
|
||||
BU_SG_REL_
|
||||
BU_EV_REL_
|
||||
BU_BO_REL_
|
||||
SG_MUL_VAL_
|
||||
|
||||
BS_:
|
||||
|
||||
BU_: XXX X
|
||||
|
||||
|
||||
BO_ 2 Steering: 8 XXX
|
||||
SG_ Steering_Angle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
|
||||
SG_ Counter : 27|3@0+ (1,0) [0|7] "" XXX
|
||||
SG_ Checksum : 39|8@0+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 208 G_Sensor: 8 XXX
|
||||
SG_ Steering_Angle : 0|16@1- (-0.1,0) [-500|500] "" XXX
|
||||
SG_ Lateral : 16|16@1- (-0.0035,1) [-255|255] "" XXX
|
||||
SG_ Longitudinal : 48|16@1- (-0.00035,0) [-255|255] "" XXX
|
||||
|
||||
BO_ 209 Brake_Pedal: 8 XXX
|
||||
SG_ Speed : 0|16@1+ (0.05625,0) [0|255] "KPH" XXX
|
||||
SG_ Brake_Pedal : 16|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 210 Brake_2: 8 XXX
|
||||
SG_ Brake_Light : 35|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Related : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Right_Brake : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Left_Brake : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 211 Brake_Type: 8 XXX
|
||||
SG_ Brake_Light : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Speed_Counter : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Cruise_On : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal_On : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 212 Wheel_Speeds: 8 XXX
|
||||
SG_ FL : 0|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ FR : 16|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ RL : 32|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
SG_ RR : 48|16@1+ (0.0592,0) [0|255] "KPH" XXX
|
||||
|
||||
BO_ 320 Throttle: 8 XXX
|
||||
SG_ Throttle_Pedal : 0|8@1+ (0.392157,0) [0|255] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Not_Full_Throttle : 14|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Engine_RPM : 16|14@1+ (1,0) [0|32767] "" XXX
|
||||
SG_ Off_Throttle : 30|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Throttle_Cruise : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Combo : 40|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Throttle_Body : 48|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Off_Throttle_2 : 56|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 321 Engine: 8 XXX
|
||||
SG_ Engine_Torque : 0|15@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Engine_Stop : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Wheel_Torque : 16|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Engine_RPM : 32|12@1+ (1,0) [0|8191] "" XXX
|
||||
|
||||
BO_ 324 CruiseControl: 8 XXX
|
||||
SG_ OnOffButton : 2|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ SET_BUTTON : 3|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RES_BUTTON : 4|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Button : 13|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_On : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_Pedal_On : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 328 Transmission: 8 XXX
|
||||
SG_ Manual_Gear : 4|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Transmission_Engine : 16|15@1+ (1,0) [0|65535] "" XXX
|
||||
SG_ Gear : 48|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Gear_2 : 52|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Paddle_Shift : 60|2@1+ (1,0) [0|3] "" XXX
|
||||
|
||||
BO_ 329 CVT_Ratio: 8 XXX
|
||||
|
||||
BO_ 336 Brake_Pressure: 8 XXX
|
||||
SG_ Brake_Pressure_Right : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Pressure_Left : 8|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 338 Stalk: 8 XXX
|
||||
SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Brake_Light : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Runlights : 58|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Headlights : 59|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Highbeam : 60|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Wiper : 62|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 352 ES_Brake: 8 XXX
|
||||
SG_ Brake_Pressure : 0|16@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Brake_Light : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ES_Error : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Brake_On : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 353 ES_CruiseThrottle: 8 XXX
|
||||
SG_ Throttle_Cruise : 0|12@1+ (1,0) [0|4095] "" XXX
|
||||
SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ Cruise_Activated : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal2 : 17|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Brake_On : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DistanceSwap : 21|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Standstill : 22|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal3 : 23|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ CloseDistance : 24|8@1+ (0.0196,0) [0|255] "m" XXX
|
||||
SG_ Signal4 : 32|9@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Standstill_2 : 41|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ ES_Error : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal5 : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 44|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Signal6 : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Button : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Signal7 : 51|5@1+ (1,0) [0|31] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 354 ES_RPM: 8 XXX
|
||||
SG_ Brake : 8|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 9|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RPM : 16|16@1+ (1,0) [0|65535] "" XXX
|
||||
SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
|
||||
|
||||
BO_ 356 ES_LKAS: 8 XXX
|
||||
SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ LKAS_Command : 8|13@1- (-1,0) [-4096|4096] "" XXX
|
||||
SG_ LKAS_Active : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 359 ES_LDW: 8 XXX
|
||||
SG_ All_depart_2015 : 0|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Right_Line_2017 : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Left_Line_2017 : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1All_Depart : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig2All_Depart : 31|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Inactive_2017 : 36|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LKAS_Active : 37|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1Right_Depart : 48|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig1Right_Depart_Front : 49|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig2Right_Depart : 50|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Left_Depart_Front : 51|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Sig3All_Depart : 52|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 604 BSD_RCTA: 8 XXX
|
||||
SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ State : 5|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_ADJACENT : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_ADJACENT : 33|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_APPROACHING : 42|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_APPROACHING : 43|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ R_RCTA : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ L_RCTA : 47|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 642 Dashlights: 8 XXX
|
||||
SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
|
||||
SG_ SEATBELT_FL : 40|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ LEFT_BLINKER : 44|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ RIGHT_BLINKER : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 880 Steering_Torque_2: 8 XXX
|
||||
SG_ Steering_Voltage_Flat : 0|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
|
||||
SG_ Counter : 40|4@1+ (1,0) [0|15] "" XXX
|
||||
|
||||
BO_ 884 BodyInfo: 8 XXX
|
||||
SG_ DOOR_OPEN_FR : 24|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_FL : 25|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RL : 26|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_RR : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ DOOR_OPEN_Hatch : 28|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
BO_ 864 Engine_Temp: 8 XXX
|
||||
SG_ Oil_Temp : 16|8@1+ (1,-40) [0|255] "" XXX
|
||||
SG_ Coolant_Temp : 24|8@1+ (1,-40) [0|255] "" XXX
|
||||
SG_ Cruise_Activated : 45|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Saved_Speed : 56|8@1+ (1,0) [0|255] "" XXX
|
||||
|
||||
BO_ 866 Fuel: 8 XXX
|
||||
|
||||
BO_ 1745 Dash_State: 8 XXX
|
||||
SG_ Units : 15|1@1+ (1,0) [0|1] "" XXX
|
||||
|
||||
CM_ SG_ 320 Off_Throttle_2 "Less sensitive";
|
||||
CM_ SG_ 320 Throttle_Body "Throttle related";
|
||||
CM_ SG_ 328 Gear "15 = P, 14 = R, 0 = N, 1-6=gear";
|
||||
CM_ SG_ 328 Gear_2 "15 = P, 14 = R, 0 = N, 1-6=gear";
|
||||
CM_ SG_ 353 Button "1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 resume deep";
|
||||
CM_ SG_ 354 RPM "20hz version of Transmission_Engine under Transmission";
|
||||
CM_ SG_ 359 Sig1Right_Depart "right depart, hill steep and seatbelt disengage";
|
||||
CM_ SG_ 359 LKAS_Inactive_2017 "1 when not steering, 0 when lkas steering";
|
||||
CM_ SG_ 359 Sig1Right_Depart_Front "object in front, right depart, hill steep and seatbelt disengage alert ";
|
||||
CM_ SG_ 359 Left_Depart_Front "warning after acceleration into car in front and left depart";
|
||||
CM_ SG_ 359 Sig1All_Depart "Left and right depart";
|
||||
CM_ SG_ 359 Sig2All_Depart "Left and right depart";
|
||||
CM_ SG_ 359 All_depart_2015 "always 1 on 2017";
|
||||
CM_ SG_ 604 R_APPROACHING "Faster car approaching in far right lane";
|
||||
CM_ SG_ 604 L_APPROACHING "Faster car approaching in far left lane";
|
||||
CM_ SG_ 604 R_RCTA "Rear cross traffic alert, only when in R gear";
|
||||
CM_ SG_ 604 L_RCTA "Rear cross traffic alert, only when in R gear";
|
||||
CM_ SG_ 642 Counter "Affected by signals";
|
||||
CM_ SG_ 642 SEATBELT_FL "Driver seatbelt";
|
||||
CM_ SG_ 880 Steering_Voltage_Flat "receives later than 371";
|
||||
|
||||
VAL_ 328 Gear 0 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D" 14 "R" 15 "P";
|
||||
VAL_ 1745 Units 0 "Metric" 1 "Imperial";
|
||||
|
||||
CM_ "subaru_outback_2019.dbc starts here"
|
||||
|
||||
|
||||
BO_ 358 ES_DashStatus: 8 XXX
|
||||
SG_ Not_Ready_Startup : 0|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Seatbelt_Disengage : 12|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Disengage_Alert : 14|2@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Cruise_On : 16|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_Activated : 17|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Signal1 : 18|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ WHEELS_MOVING_2015 : 19|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Driver_Input : 20|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Distance_Bars : 21|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Cruise_Set_Speed : 24|8@1+ (1,0) [0|255] "" XXX
|
||||
SG_ ES_Error : 32|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Cruise_On_2 : 34|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Counter : 37|3@1+ (1,0) [0|7] "" XXX
|
||||
SG_ Steep_Hill_Disengage : 44|1@1+ (1,0) [0|3] "" XXX
|
||||
SG_ Lead_Car : 46|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Obstacle_Distance : 48|4@1+ (5,0) [0|15] "m" XXX
|
||||
|
||||
BO_ 881 Steering_Torque: 8 XXX
|
||||
SG_ Steering_Motor_Flat : 0|10@1+ (32,0) [0|1000] "" XXX
|
||||
SG_ Steer_Torque_Output : 16|11@1- (-32,0) [-1000|1000] "" XXX
|
||||
SG_ LKA_Lockout : 27|1@1+ (1,0) [0|1] "" XXX
|
||||
SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
|
||||
SG_ Steering_Angle : 40|16@1- (-0.033,0) [-600|600] "" XXX
|
||||
|
||||
CM_ SG_ 358 Disengage_Alert "seatbelt and steep hill disengage";
|
||||
CM_ SG_ 358 ES_Error "No engagement until restart";
|
||||
CM_ SG_ 358 Lead_Car "front car detected";
|
||||
@@ -23,7 +23,11 @@ void detect_board_type(void) {
|
||||
// SPI lines floating: white (TODO: is this reliable? Not really, we have to enable ESP/GPS to be able to detect this on the UART)
|
||||
set_gpio_output(GPIOC, 14, 1);
|
||||
set_gpio_output(GPIOC, 5, 1);
|
||||
#ifdef CHECK_DOS
|
||||
if(!detect_with_pull(GPIOB, 1, PULL_UP) && detect_with_pull(GPIOB, 15, PULL_UP)){
|
||||
#else
|
||||
if (false) {
|
||||
#endif
|
||||
hw_type = HW_TYPE_DOS;
|
||||
current_board = &board_dos;
|
||||
} else if((detect_with_pull(GPIOA, 4, PULL_DOWN)) || (detect_with_pull(GPIOA, 5, PULL_DOWN)) || (detect_with_pull(GPIOA, 6, PULL_DOWN)) || (detect_with_pull(GPIOA, 7, PULL_DOWN))){
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/bin/bash
|
||||
sudo apt-get install gcc-arm-none-eabi python-pip
|
||||
sudo pip install libusb1 pycrypto requests
|
||||
sudo pip install libusb1 pycryptodome requests
|
||||
|
||||
@@ -4,4 +4,4 @@ sudo easy_install pip
|
||||
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||
brew tap ArmMbed/homebrew-formulae
|
||||
brew install python dfu-util arm-none-eabi-gcc
|
||||
pip install --user libusb1 pycrypto requests
|
||||
pip install --user libusb1 pycryptodome requests
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#define SAFETY_VOLKSWAGEN_PQ 21U
|
||||
#define SAFETY_SUBARU_LEGACY 22U
|
||||
#define SAFETY_HYUNDAI_LEGACY 23U
|
||||
#define SAFETY_HYUNDAI_COMMUNITY 24U
|
||||
|
||||
uint16_t current_safety_mode = SAFETY_SILENT;
|
||||
const safety_hooks *current_hooks = &nooutput_hooks;
|
||||
|
||||
@@ -56,7 +56,7 @@ static int nissan_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
|
||||
// X-Trail 0x15c, Leaf 0x239
|
||||
if ((addr == 0x15c) || (addr == 0x239)) {
|
||||
if (addr == 0x15c){
|
||||
gas_pressed = ((GET_BYTE(to_push, 5) << 2) | ((GET_BYTE(to_push, 6) >> 6) & 0x3)) > 1;
|
||||
gas_pressed = ((GET_BYTE(to_push, 5) << 2) | ((GET_BYTE(to_push, 6) >> 6) & 0x3)) > 3;
|
||||
} else {
|
||||
gas_pressed = GET_BYTE(to_push, 0) > 3;
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@ def gen_code(folder, name, f_sym, dt_sym, x_sym, obs_eqs, dim_x, dim_err, eskf_p
|
||||
|
||||
class EKF_sym():
|
||||
def __init__(self, folder, name, Q, x_initial, P_initial, dim_main, dim_main_err, # pylint: disable=dangerous-default-value
|
||||
N=0, dim_augment=0, dim_augment_err=0, maha_test_kinds=[], global_vars=None):
|
||||
N=0, dim_augment=0, dim_augment_err=0, maha_test_kinds=[], global_vars=None, max_rewind_age=1.0):
|
||||
"""Generates process function and all observation functions for the kalman filter."""
|
||||
self.msckf = N > 0
|
||||
self.N = N
|
||||
@@ -184,6 +184,7 @@ class EKF_sym():
|
||||
self.Q = Q
|
||||
|
||||
# rewind stuff
|
||||
self.max_rewind_age = max_rewind_age
|
||||
self.rewind_t = []
|
||||
self.rewind_states = []
|
||||
self.rewind_obscache = []
|
||||
@@ -379,7 +380,7 @@ class EKF_sym():
|
||||
|
||||
# rewind
|
||||
if self.filter_time is not None and t < self.filter_time:
|
||||
if len(self.rewind_t) == 0 or t < self.rewind_t[0] or t < self.rewind_t[-1] - 1.0:
|
||||
if len(self.rewind_t) == 0 or t < self.rewind_t[0] or t < self.rewind_t[-1] - self.max_rewind_age:
|
||||
print("observation too old at %.3f with filter at %.3f, ignoring" % (t, self.filter_time))
|
||||
return None
|
||||
rewound = self.rewind(t)
|
||||
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib
|
||||
export HOME=/data/data/com.termux/files/home
|
||||
export PATH=/usr/local/bin:/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/sbin:/data/data/com.termux/files/usr/bin/applets:/bin:/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin:/data/data/com.termux/files/usr/bin/git
|
||||
export PYTHONPATH=/data/openpilot
|
||||
echo -n 1 > /data/params/d/dp_is_updating
|
||||
rm -fr /data/params/d/dp_*
|
||||
rm -fr /data/params/d/Dragon*
|
||||
reboot
|
||||
+148
-139
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-07-14 16:46+1000\n"
|
||||
"POT-Creation-Date: 2020-09-01 16:34+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -17,488 +17,497 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:146
|
||||
#: selfdrive/controls/lib/events.py:151
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:153 selfdrive/controls/lib/events.py:160
|
||||
#: selfdrive/controls/lib/events.py:158 selfdrive/controls/lib/events.py:165
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:180 selfdrive/controls/lib/events.py:330
|
||||
#: selfdrive/controls/lib/events.py:356 selfdrive/controls/lib/events.py:420
|
||||
#: selfdrive/controls/lib/events.py:472 selfdrive/controls/lib/events.py:524
|
||||
#: selfdrive/controls/lib/events.py:534 selfdrive/controls/lib/events.py:543
|
||||
#: selfdrive/controls/lib/events.py:185 selfdrive/controls/lib/events.py:335
|
||||
#: selfdrive/controls/lib/events.py:361 selfdrive/controls/lib/events.py:425
|
||||
#: selfdrive/controls/lib/events.py:477 selfdrive/controls/lib/events.py:529
|
||||
#: selfdrive/controls/lib/events.py:539 selfdrive/controls/lib/events.py:654
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:181
|
||||
msgid "Steer Unavailable Below"
|
||||
#: selfdrive/controls/lib/events.py:186
|
||||
#, python-format
|
||||
msgid "Steer Unavailable Below %d %s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:190
|
||||
msgid "Drive Above"
|
||||
#: selfdrive/controls/lib/events.py:194
|
||||
#, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:189
|
||||
msgid "Calibration in Progress:"
|
||||
#: selfdrive/controls/lib/events.py:195
|
||||
#, python-format
|
||||
msgid "Drive Above %d %s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#: selfdrive/controls/lib/events.py:202
|
||||
msgid "Poor GPS reception"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:198
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:198
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
#: selfdrive/controls/lib/events.py:208
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Main Switch Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:215
|
||||
#: selfdrive/controls/lib/events.py:220
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:223
|
||||
#: selfdrive/controls/lib/events.py:228
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:224 selfdrive/controls/lib/events.py:240
|
||||
#: selfdrive/controls/lib/events.py:248 selfdrive/controls/lib/events.py:256
|
||||
#: selfdrive/controls/lib/events.py:229 selfdrive/controls/lib/events.py:245
|
||||
#: selfdrive/controls/lib/events.py:253 selfdrive/controls/lib/events.py:261
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231
|
||||
#: selfdrive/controls/lib/events.py:236
|
||||
msgid "WARNING: White panda is deprecated"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:232 selfdrive/controls/lib/events.py:272
|
||||
#: selfdrive/controls/lib/events.py:237 selfdrive/controls/lib/events.py:277
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:244
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:247
|
||||
#: selfdrive/controls/lib/events.py:252
|
||||
msgid "Dashcam mode"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:255
|
||||
#: selfdrive/controls/lib/events.py:260
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
#: selfdrive/controls/lib/events.py:268
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:264
|
||||
#: selfdrive/controls/lib/events.py:269
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
#: selfdrive/controls/lib/events.py:276
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:275
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
#: selfdrive/controls/lib/events.py:285
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:281
|
||||
#: selfdrive/controls/lib/events.py:286
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:290
|
||||
#: selfdrive/controls/lib/events.py:295
|
||||
msgid "Community Feature Detected"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:291
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:298
|
||||
#: selfdrive/controls/lib/events.py:303
|
||||
msgid "Dashcam Mode"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:299
|
||||
#: selfdrive/controls/lib/events.py:304
|
||||
msgid "Car Unrecognized"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:306 selfdrive/controls/lib/events.py:314
|
||||
#: selfdrive/controls/lib/events.py:322
|
||||
#: selfdrive/controls/lib/events.py:311 selfdrive/controls/lib/events.py:319
|
||||
#: selfdrive/controls/lib/events.py:327
|
||||
msgid "BRAKE!"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:307
|
||||
#: selfdrive/controls/lib/events.py:312
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:315
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:323
|
||||
#: selfdrive/controls/lib/events.py:328
|
||||
msgid "Risk of Collision"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:331
|
||||
#: selfdrive/controls/lib/events.py:336
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:340
|
||||
#: selfdrive/controls/lib/events.py:345
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:348
|
||||
#: selfdrive/controls/lib/events.py:353
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:357 selfdrive/controls/lib/events.py:525
|
||||
#: selfdrive/controls/lib/events.py:528
|
||||
#: selfdrive/controls/lib/events.py:362 selfdrive/controls/lib/events.py:530
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:364
|
||||
#: selfdrive/controls/lib/events.py:369
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:372
|
||||
#: selfdrive/controls/lib/events.py:377
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:373
|
||||
#: selfdrive/controls/lib/events.py:378
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:380 selfdrive/controls/lib/events.py:404
|
||||
#: selfdrive/controls/lib/events.py:385 selfdrive/controls/lib/events.py:409
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:381
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:388
|
||||
#: selfdrive/controls/lib/events.py:393
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:396
|
||||
#: selfdrive/controls/lib/events.py:401
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:397
|
||||
#: selfdrive/controls/lib/events.py:402
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:405
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:412
|
||||
#: selfdrive/controls/lib/events.py:417
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:413
|
||||
#: selfdrive/controls/lib/events.py:418
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:421
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:428
|
||||
#: selfdrive/controls/lib/events.py:433
|
||||
msgid "STOPPED"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:429
|
||||
#: selfdrive/controls/lib/events.py:434
|
||||
msgid "Press Resume to Move"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:440
|
||||
#: selfdrive/controls/lib/events.py:445
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:441 selfdrive/controls/lib/events.py:449
|
||||
#: selfdrive/controls/lib/events.py:457 selfdrive/controls/lib/events.py:465
|
||||
#: selfdrive/controls/lib/events.py:793 selfdrive/controls/lib/events.py:801
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
#: selfdrive/controls/lib/events.py:446 selfdrive/controls/lib/events.py:454
|
||||
#: selfdrive/controls/lib/events.py:462 selfdrive/controls/lib/events.py:470
|
||||
#: selfdrive/controls/lib/events.py:814 selfdrive/controls/lib/events.py:822
|
||||
#: selfdrive/controls/lib/events.py:830
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:448
|
||||
#: selfdrive/controls/lib/events.py:453
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:456
|
||||
#: selfdrive/controls/lib/events.py:461
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:464 selfdrive/controls/lib/events.py:808
|
||||
#: selfdrive/controls/lib/events.py:469 selfdrive/controls/lib/events.py:829
|
||||
msgid "Changing Lane"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:473
|
||||
#: selfdrive/controls/lib/events.py:478
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:498
|
||||
#: selfdrive/controls/lib/events.py:503
|
||||
msgid "Brake Hold Active"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:503
|
||||
#: selfdrive/controls/lib/events.py:508
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:508
|
||||
#: selfdrive/controls/lib/events.py:513
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:519
|
||||
#: selfdrive/controls/lib/events.py:524
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:535 selfdrive/controls/lib/events.py:538
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
#: selfdrive/controls/lib/events.py:540
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
#: selfdrive/controls/lib/events.py:546
|
||||
msgid "Out of Storage Space"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:555
|
||||
#: selfdrive/controls/lib/events.py:551
|
||||
msgid "Speed Too Low"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:560 selfdrive/controls/lib/events.py:564
|
||||
#: selfdrive/controls/lib/events.py:556 selfdrive/controls/lib/events.py:560
|
||||
msgid "NEOS Update Required"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:561
|
||||
#: selfdrive/controls/lib/events.py:557
|
||||
msgid "Please Wait for Update"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:569 selfdrive/controls/lib/events.py:573
|
||||
#: selfdrive/controls/lib/events.py:565 selfdrive/controls/lib/events.py:569
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:570 selfdrive/controls/lib/events.py:583
|
||||
#: selfdrive/controls/lib/events.py:665
|
||||
#: selfdrive/controls/lib/events.py:566 selfdrive/controls/lib/events.py:579
|
||||
#: selfdrive/controls/lib/events.py:686
|
||||
msgid "Reboot your Device"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:582 selfdrive/controls/lib/events.py:586
|
||||
#: selfdrive/controls/lib/events.py:578 selfdrive/controls/lib/events.py:582
|
||||
msgid "Speaker not found"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:590
|
||||
#: selfdrive/controls/lib/events.py:586
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
#: selfdrive/controls/lib/events.py:590
|
||||
msgid "System Overheated"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
#: selfdrive/controls/lib/events.py:591
|
||||
msgid "System overheated"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:599 selfdrive/controls/lib/events.py:600
|
||||
#: selfdrive/controls/lib/events.py:595 selfdrive/controls/lib/events.py:596
|
||||
msgid "Gear not D"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:604
|
||||
#: selfdrive/controls/lib/events.py:600
|
||||
msgid "Calibration Invalid: Reposition Device and Recalibrate"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:605
|
||||
#: selfdrive/controls/lib/events.py:601
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609 selfdrive/controls/lib/events.py:611
|
||||
#: selfdrive/controls/lib/events.py:605 selfdrive/controls/lib/events.py:607
|
||||
msgid "Calibration in Progress"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
#: selfdrive/controls/lib/events.py:611
|
||||
msgid "Door Open"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:616
|
||||
#: selfdrive/controls/lib/events.py:612
|
||||
msgid "Door open"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:620
|
||||
#: selfdrive/controls/lib/events.py:616
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:621
|
||||
#: selfdrive/controls/lib/events.py:617
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:625 selfdrive/controls/lib/events.py:626
|
||||
#: selfdrive/controls/lib/events.py:621 selfdrive/controls/lib/events.py:622
|
||||
msgid "ESP Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:630 selfdrive/controls/lib/events.py:631
|
||||
#: selfdrive/controls/lib/events.py:626 selfdrive/controls/lib/events.py:627
|
||||
msgid "Low Battery"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
#: selfdrive/controls/lib/events.py:631 selfdrive/controls/lib/events.py:632
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:637 selfdrive/controls/lib/events.py:638
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:647 selfdrive/controls/lib/events.py:648
|
||||
#: selfdrive/controls/lib/events.py:652 selfdrive/controls/lib/events.py:653
|
||||
#: selfdrive/controls/lib/events.py:643 selfdrive/controls/lib/events.py:644
|
||||
#: selfdrive/controls/lib/events.py:648 selfdrive/controls/lib/events.py:649
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:657 selfdrive/controls/lib/events.py:658
|
||||
#: selfdrive/controls/lib/events.py:655 selfdrive/controls/lib/events.py:659
|
||||
msgid "Driving model lagging"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:662 selfdrive/controls/lib/events.py:668
|
||||
#: selfdrive/controls/lib/events.py:663 selfdrive/controls/lib/events.py:664
|
||||
#: selfdrive/controls/lib/events.py:673 selfdrive/controls/lib/events.py:674
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668 selfdrive/controls/lib/events.py:669
|
||||
#: selfdrive/controls/lib/events.py:678 selfdrive/controls/lib/events.py:679
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:683 selfdrive/controls/lib/events.py:689
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:664
|
||||
#: selfdrive/controls/lib/events.py:685
|
||||
msgid "RAM Critically Low"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:673 selfdrive/controls/lib/events.py:674
|
||||
#: selfdrive/controls/lib/events.py:694 selfdrive/controls/lib/events.py:695
|
||||
msgid "Controls Failed"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:678
|
||||
#: selfdrive/controls/lib/events.py:699
|
||||
msgid "Controls Mismatch"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682 selfdrive/controls/lib/events.py:684
|
||||
#: selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:703 selfdrive/controls/lib/events.py:705
|
||||
#: selfdrive/controls/lib/events.py:709
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:692 selfdrive/controls/lib/events.py:698
|
||||
#: selfdrive/controls/lib/events.py:713 selfdrive/controls/lib/events.py:719
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:694
|
||||
#: selfdrive/controls/lib/events.py:715
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:702 selfdrive/controls/lib/events.py:708
|
||||
#: selfdrive/controls/lib/events.py:786
|
||||
#: selfdrive/controls/lib/events.py:723 selfdrive/controls/lib/events.py:729
|
||||
#: selfdrive/controls/lib/events.py:807
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:704 selfdrive/controls/lib/events.py:782
|
||||
#: selfdrive/controls/lib/events.py:725 selfdrive/controls/lib/events.py:803
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:733
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:713
|
||||
#: selfdrive/controls/lib/events.py:734
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717 selfdrive/controls/lib/events.py:718
|
||||
#: selfdrive/controls/lib/events.py:738 selfdrive/controls/lib/events.py:739
|
||||
msgid "Reverse Gear"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Cruise Is Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726 selfdrive/controls/lib/events.py:727
|
||||
#: selfdrive/controls/lib/events.py:747 selfdrive/controls/lib/events.py:748
|
||||
msgid "Planner Solution Error"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731 selfdrive/controls/lib/events.py:733
|
||||
#: selfdrive/controls/lib/events.py:737
|
||||
#: selfdrive/controls/lib/events.py:752 selfdrive/controls/lib/events.py:754
|
||||
#: selfdrive/controls/lib/events.py:758
|
||||
msgid "Harness Malfunction"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:734
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "Please Check Hardware"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:742 selfdrive/controls/lib/events.py:751
|
||||
#: selfdrive/controls/lib/events.py:763 selfdrive/controls/lib/events.py:772
|
||||
msgid "openpilot Canceled"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
#: selfdrive/controls/lib/events.py:764
|
||||
msgid "No close lead car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
#: selfdrive/controls/lib/events.py:767
|
||||
msgid "No Close Lead Car"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
#: selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed too low"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:759 selfdrive/controls/lib/events.py:764
|
||||
#: selfdrive/controls/lib/events.py:780 selfdrive/controls/lib/events.py:785
|
||||
msgid "Speed Too High"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:760
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:765
|
||||
#: selfdrive/controls/lib/events.py:786
|
||||
msgid "Slow down to engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:772
|
||||
#: selfdrive/controls/lib/events.py:793
|
||||
msgid "Please connect to Internet"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:773
|
||||
#: selfdrive/controls/lib/events.py:794
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:776
|
||||
#: selfdrive/controls/lib/events.py:797
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:792
|
||||
#: selfdrive/controls/lib/events.py:813
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:800
|
||||
#: selfdrive/controls/lib/events.py:821
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:816
|
||||
#: selfdrive/controls/lib/events.py:837
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:824
|
||||
#: selfdrive/controls/lib/events.py:845
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:832 selfdrive/controls/lib/events.py:837
|
||||
#: selfdrive/controls/lib/events.py:853 selfdrive/controls/lib/events.py:858
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr ""
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,513 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-09-01 16:34+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: ko-KR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:151
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr "오픈파일럿 사용불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:158 selfdrive/controls/lib/events.py:165
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr "핸들을 잡아주세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:185 selfdrive/controls/lib/events.py:335
|
||||
#: selfdrive/controls/lib/events.py:361 selfdrive/controls/lib/events.py:425
|
||||
#: selfdrive/controls/lib/events.py:477 selfdrive/controls/lib/events.py:529
|
||||
#: selfdrive/controls/lib/events.py:539 selfdrive/controls/lib/events.py:654
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr "핸들을 잡아주세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:186
|
||||
#, python-format
|
||||
msgid "Steer Unavailable Below %d %s"
|
||||
msgstr "%d %s 이하에서는 조향제어가 불가합니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:194
|
||||
#, fuzzy, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr "캘리브레이션 진행중: %d%%"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:195
|
||||
#, python-format
|
||||
msgid "Drive Above %d %s"
|
||||
msgstr "%d %s 이상의 속도로 주행하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:202
|
||||
msgid "Poor GPS reception"
|
||||
msgstr "GPS 신호 약함"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr "환경에 문제가 없을경우 서비스팀에 연락하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr "GPS안테나 위치를 점검하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:208
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr "크루즈 모드 꺼짐"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Main Switch Off"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:220
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:228
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr "오픈파일럿 사용준비가 되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:229 selfdrive/controls/lib/events.py:245
|
||||
#: selfdrive/controls/lib/events.py:253 selfdrive/controls/lib/events.py:261
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr "안전운전을 위해 항상 핸들을 잡고 도로교통 상황을 주시하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:236
|
||||
msgid "WARNING: White panda is deprecated"
|
||||
msgstr "경고: 화이트 판다는 더이상 사용되지 않습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:237 selfdrive/controls/lib/events.py:277
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr "콤마2나 블랙판다로 업그레이드 하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:244
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr "경고: 이 Branch는 테스트되지 않았습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:252
|
||||
msgid "Dashcam mode"
|
||||
msgstr "대시캠 모드"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:260
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr "안전운전을 위해 항상 핸들을 잡고 도로교통 상황을 주시하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:268
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr "지원되지 않는 지라프 설정"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:269
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr "comma.ai/tg 방문하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:276
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr "화이트판다는 더 이상 지원되지 않습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr "화이트판다는 더 이상 지원되지 않습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:285
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr "차량의 LKAS 기능이 켜져 있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:286
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr "오픈파일럿 사용을 위해 LKAS를 끄세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:295
|
||||
msgid "Community Feature Detected"
|
||||
msgstr "커뮤니티 기능 감지됨"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr "개발자 설정에서 커뮤니티 기능을 활성화하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:303
|
||||
msgid "Dashcam Mode"
|
||||
msgstr "대시캠 모드"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:304
|
||||
msgid "Car Unrecognized"
|
||||
msgstr "미인식 차량"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:311 selfdrive/controls/lib/events.py:319
|
||||
#: selfdrive/controls/lib/events.py:327
|
||||
msgid "BRAKE!"
|
||||
msgstr "브레이크!"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:312
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr "순정 AEB: 충돌 위험"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr "순정 FCW: 충돌 위험"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:328
|
||||
msgid "Risk of Collision"
|
||||
msgstr "충돌 위험"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:336
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr "차선이탈이 감지되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:345
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr "가속중에는 오픈파일럿 브레이크 작동불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:353
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr "차량 매개 변수 식별 실패"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:362 selfdrive/controls/lib/events.py:530
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr "조향제어가 일시적으로 비활성화 되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:369
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr "도로상황에 주의를 기울이세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:377
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr "도로상황에 주의하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:378
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr "전방주시 필요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:385 selfdrive/controls/lib/events.py:409
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr "경고: 조향제어가 즉시 해제됩니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr "운전자 전방주시 불안"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:393
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr "핸들을 터치하세요: 모니터링 없음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:401
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr "핸들을 터치하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:402
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr "운전자 모니터링 없음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr "운전자 모니터링 없음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:417
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr "운전자 얼굴 확인 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:418
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr "운전자 얼굴 인식이 어렵습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr "수동으로 재출발 하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:433
|
||||
msgid "STOPPED"
|
||||
msgstr "잠시멈춤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:434
|
||||
msgid "Press Resume to Move"
|
||||
msgstr "재출발을 위해 RES버튼을 누르세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:445
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr "차선 변경을 위해 핸들을 좌측으로 살짝 돌리세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:446 selfdrive/controls/lib/events.py:454
|
||||
#: selfdrive/controls/lib/events.py:462 selfdrive/controls/lib/events.py:470
|
||||
#: selfdrive/controls/lib/events.py:814 selfdrive/controls/lib/events.py:822
|
||||
#: selfdrive/controls/lib/events.py:830
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr "다른 차량에 주의하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:453
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr "차선 변경을 위해 핸들을 우측으로 살짝 돌리세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:461
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr "측면 차량 접근 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:469 selfdrive/controls/lib/events.py:829
|
||||
msgid "Changing Lane"
|
||||
msgstr "차선 변경 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:478
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:503
|
||||
msgid "Brake Hold Active"
|
||||
msgstr "브레이크 홀드 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:508
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr "파킹브레이크 체결 됨"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:513
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr "시작 중 페달 밟음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:524
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr "어댑티브 크루즈를 활성화하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:540
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr "카메라 포커스 조정중: 카메라 포커스 부정확"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:546
|
||||
msgid "Out of Storage Space"
|
||||
msgstr "저장공간 부족"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:551
|
||||
msgid "Speed Too Low"
|
||||
msgstr "차량의 속도 낮음"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:556 selfdrive/controls/lib/events.py:560
|
||||
msgid "NEOS Update Required"
|
||||
msgstr "NEOS 업데이트 필요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:557
|
||||
msgid "Please Wait for Update"
|
||||
msgstr "업데이트를 위해 기다리세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:565 selfdrive/controls/lib/events.py:569
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr "EON센서로부터 데이터를 받지 못했습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:566 selfdrive/controls/lib/events.py:579
|
||||
#: selfdrive/controls/lib/events.py:686
|
||||
msgid "Reboot your Device"
|
||||
msgstr "장치를 재시작 하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:578 selfdrive/controls/lib/events.py:582
|
||||
msgid "Speaker not found"
|
||||
msgstr "스피커를 찾을 수 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:586
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr "운전자 전방주시 매우 불안"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:590
|
||||
msgid "System Overheated"
|
||||
msgstr "시스템이 과열되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:591
|
||||
msgid "System overheated"
|
||||
msgstr "시스템이 과열되었습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595 selfdrive/controls/lib/events.py:596
|
||||
msgid "Gear not D"
|
||||
msgstr "기어가 드라이브모드가 아닙니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:600
|
||||
msgid "Calibration Invalid: Reposition Device and Recalibrate"
|
||||
msgstr "캘리브레이션 유효하지 않음: 장치 위치 조정 및 재 캘리브레이션"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:601
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr "캘리브레이션 유효하지 않음: 장치 위치 조정 및 재 캘리브레이션"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:605 selfdrive/controls/lib/events.py:607
|
||||
msgid "Calibration in Progress"
|
||||
msgstr "캘리브레이션 진행 중"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:611
|
||||
msgid "Door Open"
|
||||
msgstr "도어가 열려있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:612
|
||||
msgid "Door open"
|
||||
msgstr "도어가 열려있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:616
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr "안전벨트를 체결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:617
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr "안전벨트를 체결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:621 selfdrive/controls/lib/events.py:622
|
||||
msgid "ESP Off"
|
||||
msgstr "ESP 꺼짐"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:626 selfdrive/controls/lib/events.py:627
|
||||
msgid "Low Battery"
|
||||
msgstr "배터리 부족"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:631 selfdrive/controls/lib/events.py:632
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr "프로세스 간 통신 오류가 있습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:637 selfdrive/controls/lib/events.py:638
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr "레이더 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:643 selfdrive/controls/lib/events.py:644
|
||||
#: selfdrive/controls/lib/events.py:648 selfdrive/controls/lib/events.py:649
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr "레이더 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:655 selfdrive/controls/lib/events.py:659
|
||||
msgid "Driving model lagging"
|
||||
msgstr "주행 모델 지연"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:663 selfdrive/controls/lib/events.py:664
|
||||
#: selfdrive/controls/lib/events.py:673 selfdrive/controls/lib/events.py:674
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "전방 영상 인식 불안"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668 selfdrive/controls/lib/events.py:669
|
||||
#: selfdrive/controls/lib/events.py:678 selfdrive/controls/lib/events.py:679
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:683 selfdrive/controls/lib/events.py:689
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr "메모리 부족: 장치를 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:685
|
||||
msgid "RAM Critically Low"
|
||||
msgstr "메모리 부족 심각"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:694 selfdrive/controls/lib/events.py:695
|
||||
msgid "Controls Failed"
|
||||
msgstr "차량제어 불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:699
|
||||
msgid "Controls Mismatch"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:703 selfdrive/controls/lib/events.py:705
|
||||
#: selfdrive/controls/lib/events.py:709
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr "CAN 오류: CAN 신호를 확인하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:713 selfdrive/controls/lib/events.py:719
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr "LKAS 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:715
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr "LKAS 오류: 시작을 위해 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:723 selfdrive/controls/lib/events.py:729
|
||||
#: selfdrive/controls/lib/events.py:807
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr "크루즈 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:725 selfdrive/controls/lib/events.py:803
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr "크루즈 오류: 시작을 위해 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:733
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr "가속페달 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:734
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr "가속페달 오류: 차량을 재시작하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:738 selfdrive/controls/lib/events.py:739
|
||||
msgid "Reverse Gear"
|
||||
msgstr "후진 기어"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Cruise Is Off"
|
||||
msgstr "크루즈 꺼짐"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:747 selfdrive/controls/lib/events.py:748
|
||||
msgid "Planner Solution Error"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752 selfdrive/controls/lib/events.py:754
|
||||
#: selfdrive/controls/lib/events.py:758
|
||||
msgid "Harness Malfunction"
|
||||
msgstr "하네스 오작동"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "Please Check Hardware"
|
||||
msgstr "장치를 점검하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:763 selfdrive/controls/lib/events.py:772
|
||||
msgid "openpilot Canceled"
|
||||
msgstr "오픈파일럿 시작불가"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:764
|
||||
msgid "No close lead car"
|
||||
msgstr "선행차량이 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:767
|
||||
msgid "No Close Lead Car"
|
||||
msgstr "선행차량이 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed too low"
|
||||
msgstr "선행차량이 없습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:780 selfdrive/controls/lib/events.py:785
|
||||
msgid "Speed Too High"
|
||||
msgstr "속도가 너무 높습니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr "재 작동을 위해 차량의 속도를 낮추세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:786
|
||||
msgid "Slow down to engage"
|
||||
msgstr "시작을 위해 차량의 속도를 낮추세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:793
|
||||
msgid "Please connect to Internet"
|
||||
msgstr "인터넷에 연결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:794
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr "시작을 위해 업데이트를 확인해야 합니다"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:797
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr "인터넷에 연결하세요"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:813
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:821
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:837
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:845
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr ""
|
||||
|
||||
#: selfdrive/controls/lib/events.py:853 selfdrive/controls/lib/events.py:858
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr ""
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-07-14 16:46+1000\n"
|
||||
"POT-Creation-Date: 2020-09-01 16:34+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Rick Lan <ricklan@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,488 +16,497 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:146
|
||||
#: selfdrive/controls/lib/events.py:151
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr "无法使用 openpilot"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:153 selfdrive/controls/lib/events.py:160
|
||||
#: selfdrive/controls/lib/events.py:158 selfdrive/controls/lib/events.py:165
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr "即刻接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:180 selfdrive/controls/lib/events.py:330
|
||||
#: selfdrive/controls/lib/events.py:356 selfdrive/controls/lib/events.py:420
|
||||
#: selfdrive/controls/lib/events.py:472 selfdrive/controls/lib/events.py:524
|
||||
#: selfdrive/controls/lib/events.py:534 selfdrive/controls/lib/events.py:543
|
||||
#: selfdrive/controls/lib/events.py:185 selfdrive/controls/lib/events.py:335
|
||||
#: selfdrive/controls/lib/events.py:361 selfdrive/controls/lib/events.py:425
|
||||
#: selfdrive/controls/lib/events.py:477 selfdrive/controls/lib/events.py:529
|
||||
#: selfdrive/controls/lib/events.py:539 selfdrive/controls/lib/events.py:654
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr "接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:181
|
||||
msgid "Steer Unavailable Below"
|
||||
msgstr "横向控制暂时失效,车速低于 "
|
||||
#: selfdrive/controls/lib/events.py:186
|
||||
#, fuzzy, python-format
|
||||
msgid "Steer Unavailable Below %d %s"
|
||||
msgstr "横向控制暂时失效,车速低于 %d %s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:190
|
||||
msgid "Drive Above"
|
||||
msgstr "车速请高于"
|
||||
#: selfdrive/controls/lib/events.py:194
|
||||
#, fuzzy, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr "正在校准中:%d%%"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:189
|
||||
msgid "Calibration in Progress:"
|
||||
msgstr "正在校准中:"
|
||||
#: selfdrive/controls/lib/events.py:195
|
||||
#, fuzzy, python-format
|
||||
msgid "Drive Above %d %s"
|
||||
msgstr "车速请高于 %d %s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#: selfdrive/controls/lib/events.py:202
|
||||
msgid "Poor GPS reception"
|
||||
msgstr "GPS 讯号不良"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:198
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr "如果您不在地下室/隧道,请联系客服"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:198
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr "请检查 GPS 天线位置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
#: selfdrive/controls/lib/events.py:208
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr "巡航模式关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Main Switch Off"
|
||||
msgstr "主开关已关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:215
|
||||
#: selfdrive/controls/lib/events.py:220
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr "除错用警示讯息"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:223
|
||||
#: selfdrive/controls/lib/events.py:228
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr "请准备好随时接管"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:224 selfdrive/controls/lib/events.py:240
|
||||
#: selfdrive/controls/lib/events.py:248 selfdrive/controls/lib/events.py:256
|
||||
#: selfdrive/controls/lib/events.py:229 selfdrive/controls/lib/events.py:245
|
||||
#: selfdrive/controls/lib/events.py:253 selfdrive/controls/lib/events.py:261
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr "将手放在方向盘上并持续监视路况"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231
|
||||
#: selfdrive/controls/lib/events.py:236
|
||||
msgid "WARNING: White panda is deprecated"
|
||||
msgstr "注意:这个分支未经过测试"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:232 selfdrive/controls/lib/events.py:272
|
||||
#: selfdrive/controls/lib/events.py:237 selfdrive/controls/lib/events.py:277
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr "请升级至 comma two 或是使用 black panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:244
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr "注意:这个分支未经过测试"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:247
|
||||
#: selfdrive/controls/lib/events.py:252
|
||||
msgid "Dashcam mode"
|
||||
msgstr "行车记录模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:255
|
||||
#: selfdrive/controls/lib/events.py:260
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr "行车记录模式 (尚未支援车种)"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
#: selfdrive/controls/lib/events.py:268
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr "未支援的 Giraffe 设置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:264
|
||||
#: selfdrive/controls/lib/events.py:269
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr "请查阅 comma.ai/tg"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
#: selfdrive/controls/lib/events.py:276
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr "不再支持 White Panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:275
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr "不再支持 White panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
#: selfdrive/controls/lib/events.py:285
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr "原厂 LKAS 已开启"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:281
|
||||
#: selfdrive/controls/lib/events.py:286
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr "需关闭原厂 LKAS 才能启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:290
|
||||
#: selfdrive/controls/lib/events.py:295
|
||||
msgid "Community Feature Detected"
|
||||
msgstr "检测到社群开发功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:291
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr "请至开发人员设定裡启用社群开发功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:298
|
||||
#: selfdrive/controls/lib/events.py:303
|
||||
msgid "Dashcam Mode"
|
||||
msgstr "行车记录模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:299
|
||||
#: selfdrive/controls/lib/events.py:304
|
||||
msgid "Car Unrecognized"
|
||||
msgstr "无法辨识车款"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:306 selfdrive/controls/lib/events.py:314
|
||||
#: selfdrive/controls/lib/events.py:322
|
||||
#: selfdrive/controls/lib/events.py:311 selfdrive/controls/lib/events.py:319
|
||||
#: selfdrive/controls/lib/events.py:327
|
||||
msgid "BRAKE!"
|
||||
msgstr "刹车!"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:307
|
||||
#: selfdrive/controls/lib/events.py:312
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr "有碰撞的风险"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:315
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr "有碰撞的风险"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:323
|
||||
#: selfdrive/controls/lib/events.py:328
|
||||
msgid "Risk of Collision"
|
||||
msgstr "有碰撞的风险"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:331
|
||||
#: selfdrive/controls/lib/events.py:336
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr "偏离车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:340
|
||||
#: selfdrive/controls/lib/events.py:345
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr "在您踩着油门的时候 openpilot 将不会刹车"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:348
|
||||
#: selfdrive/controls/lib/events.py:353
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr "车子参数识别失败"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:357 selfdrive/controls/lib/events.py:525
|
||||
#: selfdrive/controls/lib/events.py:528
|
||||
#: selfdrive/controls/lib/events.py:362 selfdrive/controls/lib/events.py:530
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr "横向控制暂时失效"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:364
|
||||
#: selfdrive/controls/lib/events.py:369
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr "注意路况:驾驶分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:372
|
||||
#: selfdrive/controls/lib/events.py:377
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr "注意路况"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:373
|
||||
#: selfdrive/controls/lib/events.py:378
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr "驾驶分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:380 selfdrive/controls/lib/events.py:404
|
||||
#: selfdrive/controls/lib/events.py:385 selfdrive/controls/lib/events.py:409
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr "立即解除"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:381
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr "驾驶分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:388
|
||||
#: selfdrive/controls/lib/events.py:393
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr "请触碰方向盘:未侦测到驾驶面容"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:396
|
||||
#: selfdrive/controls/lib/events.py:401
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr "请触碰方向盘"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:397
|
||||
#: selfdrive/controls/lib/events.py:402
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr "驾驶没有反应"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:405
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr "驾驶没有反应"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:412
|
||||
#: selfdrive/controls/lib/events.py:417
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr "请检查驾驶面部的可见度"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:413
|
||||
#: selfdrive/controls/lib/events.py:418
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr "驾驶监控模型判断不明确"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:421
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr "请自行恢復驾驶"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:428
|
||||
#: selfdrive/controls/lib/events.py:433
|
||||
msgid "STOPPED"
|
||||
msgstr "已停止"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:429
|
||||
#: selfdrive/controls/lib/events.py:434
|
||||
msgid "Press Resume to Move"
|
||||
msgstr "请按 RES 继续"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:440
|
||||
#: selfdrive/controls/lib/events.py:445
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr "请往左打方向盘切换至左车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:441 selfdrive/controls/lib/events.py:449
|
||||
#: selfdrive/controls/lib/events.py:457 selfdrive/controls/lib/events.py:465
|
||||
#: selfdrive/controls/lib/events.py:793 selfdrive/controls/lib/events.py:801
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
#: selfdrive/controls/lib/events.py:446 selfdrive/controls/lib/events.py:454
|
||||
#: selfdrive/controls/lib/events.py:462 selfdrive/controls/lib/events.py:470
|
||||
#: selfdrive/controls/lib/events.py:814 selfdrive/controls/lib/events.py:822
|
||||
#: selfdrive/controls/lib/events.py:830
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr "请注意其它车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:448
|
||||
#: selfdrive/controls/lib/events.py:453
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr "请往右打方向盘切换至右车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:456
|
||||
#: selfdrive/controls/lib/events.py:461
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr "盲点侦测到车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:464 selfdrive/controls/lib/events.py:808
|
||||
#: selfdrive/controls/lib/events.py:469 selfdrive/controls/lib/events.py:829
|
||||
msgid "Changing Lane"
|
||||
msgstr "切换车道中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:473
|
||||
#: selfdrive/controls/lib/events.py:478
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr "弯道超过横向操控限制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:498
|
||||
#: selfdrive/controls/lib/events.py:503
|
||||
msgid "Brake Hold Active"
|
||||
msgstr "驻车煞车已启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:503
|
||||
#: selfdrive/controls/lib/events.py:508
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr "电子驻车已启动"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:508
|
||||
#: selfdrive/controls/lib/events.py:513
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr "启用时侦测到驾驶踩踏油门/刹车"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:519
|
||||
#: selfdrive/controls/lib/events.py:524
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr "启用自适应巡航"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:535 selfdrive/controls/lib/events.py:538
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "视觉模型判断不明确"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
#: selfdrive/controls/lib/events.py:540
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr "尝试对焦:相机已失焦"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
#: selfdrive/controls/lib/events.py:546
|
||||
msgid "Out of Storage Space"
|
||||
msgstr "存储空间不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:555
|
||||
#: selfdrive/controls/lib/events.py:551
|
||||
msgid "Speed Too Low"
|
||||
msgstr "车速过慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:560 selfdrive/controls/lib/events.py:564
|
||||
#: selfdrive/controls/lib/events.py:556 selfdrive/controls/lib/events.py:560
|
||||
msgid "NEOS Update Required"
|
||||
msgstr "NEOS 需要更新"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:561
|
||||
#: selfdrive/controls/lib/events.py:557
|
||||
msgid "Please Wait for Update"
|
||||
msgstr "更新中请稍候"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:569 selfdrive/controls/lib/events.py:573
|
||||
#: selfdrive/controls/lib/events.py:565 selfdrive/controls/lib/events.py:569
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr "未收到装置传感器数据"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:570 selfdrive/controls/lib/events.py:583
|
||||
#: selfdrive/controls/lib/events.py:665
|
||||
#: selfdrive/controls/lib/events.py:566 selfdrive/controls/lib/events.py:579
|
||||
#: selfdrive/controls/lib/events.py:686
|
||||
msgid "Reboot your Device"
|
||||
msgstr "请重启装置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:582 selfdrive/controls/lib/events.py:586
|
||||
#: selfdrive/controls/lib/events.py:578 selfdrive/controls/lib/events.py:582
|
||||
msgid "Speaker not found"
|
||||
msgstr "找不到音效装置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:590
|
||||
#: selfdrive/controls/lib/events.py:586
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr "驾驶分心太多次"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
#: selfdrive/controls/lib/events.py:590
|
||||
msgid "System Overheated"
|
||||
msgstr "系统过热"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
#: selfdrive/controls/lib/events.py:591
|
||||
msgid "System overheated"
|
||||
msgstr "系统过热"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:599 selfdrive/controls/lib/events.py:600
|
||||
#: selfdrive/controls/lib/events.py:595 selfdrive/controls/lib/events.py:596
|
||||
msgid "Gear not D"
|
||||
msgstr "不在 D 档位"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:604
|
||||
#: selfdrive/controls/lib/events.py:600
|
||||
msgid "Calibration Invalid: Reposition Device and Recalibrate"
|
||||
msgstr "校准无效:请将装置放于新的位置并重新校准"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:605
|
||||
#: selfdrive/controls/lib/events.py:601
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr "校准无效:请将装置放于新的位置并重新校准"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609 selfdrive/controls/lib/events.py:611
|
||||
#: selfdrive/controls/lib/events.py:605 selfdrive/controls/lib/events.py:607
|
||||
msgid "Calibration in Progress"
|
||||
msgstr "正在校准中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
#: selfdrive/controls/lib/events.py:611
|
||||
msgid "Door Open"
|
||||
msgstr "车门开启"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:616
|
||||
#: selfdrive/controls/lib/events.py:612
|
||||
msgid "Door open"
|
||||
msgstr "车门未关"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:620
|
||||
#: selfdrive/controls/lib/events.py:616
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr "安全带未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:621
|
||||
#: selfdrive/controls/lib/events.py:617
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr "安全带未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:625 selfdrive/controls/lib/events.py:626
|
||||
#: selfdrive/controls/lib/events.py:621 selfdrive/controls/lib/events.py:622
|
||||
msgid "ESP Off"
|
||||
msgstr "ESP 关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:630 selfdrive/controls/lib/events.py:631
|
||||
#: selfdrive/controls/lib/events.py:626 selfdrive/controls/lib/events.py:627
|
||||
msgid "Low Battery"
|
||||
msgstr "电量过低"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
#: selfdrive/controls/lib/events.py:631 selfdrive/controls/lib/events.py:632
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr "行程间出现通讯问题"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:637 selfdrive/controls/lib/events.py:638
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr "雷达通讯出现问题"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:647 selfdrive/controls/lib/events.py:648
|
||||
#: selfdrive/controls/lib/events.py:652 selfdrive/controls/lib/events.py:653
|
||||
#: selfdrive/controls/lib/events.py:643 selfdrive/controls/lib/events.py:644
|
||||
#: selfdrive/controls/lib/events.py:648 selfdrive/controls/lib/events.py:649
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr "雷达讯号错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:657 selfdrive/controls/lib/events.py:658
|
||||
#: selfdrive/controls/lib/events.py:655 selfdrive/controls/lib/events.py:659
|
||||
msgid "Driving model lagging"
|
||||
msgstr "操控模型有延迟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:662 selfdrive/controls/lib/events.py:668
|
||||
#: selfdrive/controls/lib/events.py:663 selfdrive/controls/lib/events.py:664
|
||||
#: selfdrive/controls/lib/events.py:673 selfdrive/controls/lib/events.py:674
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "视觉模型判断不明确"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668 selfdrive/controls/lib/events.py:669
|
||||
#: selfdrive/controls/lib/events.py:678 selfdrive/controls/lib/events.py:679
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr "装置掉落侦测"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:683 selfdrive/controls/lib/events.py:689
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr "记忆体不足:请重启您的装置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:664
|
||||
#: selfdrive/controls/lib/events.py:685
|
||||
msgid "RAM Critically Low"
|
||||
msgstr "记忆体严重不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:673 selfdrive/controls/lib/events.py:674
|
||||
#: selfdrive/controls/lib/events.py:694 selfdrive/controls/lib/events.py:695
|
||||
msgid "Controls Failed"
|
||||
msgstr "控制发生错误"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:678
|
||||
#: selfdrive/controls/lib/events.py:699
|
||||
msgid "Controls Mismatch"
|
||||
msgstr "控制不匹配"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682 selfdrive/controls/lib/events.py:684
|
||||
#: selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:703 selfdrive/controls/lib/events.py:705
|
||||
#: selfdrive/controls/lib/events.py:709
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr "CAN 讯号错误:请检查线路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:692 selfdrive/controls/lib/events.py:698
|
||||
#: selfdrive/controls/lib/events.py:713 selfdrive/controls/lib/events.py:719
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr "LKAS 错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:694
|
||||
#: selfdrive/controls/lib/events.py:715
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr "LKAS 错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:702 selfdrive/controls/lib/events.py:708
|
||||
#: selfdrive/controls/lib/events.py:786
|
||||
#: selfdrive/controls/lib/events.py:723 selfdrive/controls/lib/events.py:729
|
||||
#: selfdrive/controls/lib/events.py:807
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr "巡航系统错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:704 selfdrive/controls/lib/events.py:782
|
||||
#: selfdrive/controls/lib/events.py:725 selfdrive/controls/lib/events.py:803
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr "巡航系统错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:733
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr "油门错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:713
|
||||
#: selfdrive/controls/lib/events.py:734
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr "油门错误:请重新发动车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717 selfdrive/controls/lib/events.py:718
|
||||
#: selfdrive/controls/lib/events.py:738 selfdrive/controls/lib/events.py:739
|
||||
msgid "Reverse Gear"
|
||||
msgstr "切换至倒车档"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Cruise Is Off"
|
||||
msgstr "巡航系统关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726 selfdrive/controls/lib/events.py:727
|
||||
#: selfdrive/controls/lib/events.py:747 selfdrive/controls/lib/events.py:748
|
||||
msgid "Planner Solution Error"
|
||||
msgstr "Planner Solution 错误"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731 selfdrive/controls/lib/events.py:733
|
||||
#: selfdrive/controls/lib/events.py:737
|
||||
#: selfdrive/controls/lib/events.py:752 selfdrive/controls/lib/events.py:754
|
||||
#: selfdrive/controls/lib/events.py:758
|
||||
msgid "Harness Malfunction"
|
||||
msgstr "Harness 故障"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:734
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "Please Check Hardware"
|
||||
msgstr "请检查硬体"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:742 selfdrive/controls/lib/events.py:751
|
||||
#: selfdrive/controls/lib/events.py:763 selfdrive/controls/lib/events.py:772
|
||||
msgid "openpilot Canceled"
|
||||
msgstr "openpilot 已取消"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
#: selfdrive/controls/lib/events.py:764
|
||||
msgid "No close lead car"
|
||||
msgstr "前方没有车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
#: selfdrive/controls/lib/events.py:767
|
||||
msgid "No Close Lead Car"
|
||||
msgstr "前方没有车辆"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
#: selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed too low"
|
||||
msgstr "车速过慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:759 selfdrive/controls/lib/events.py:764
|
||||
#: selfdrive/controls/lib/events.py:780 selfdrive/controls/lib/events.py:785
|
||||
msgid "Speed Too High"
|
||||
msgstr "车速过快"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:760
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr "请减速后再启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:765
|
||||
#: selfdrive/controls/lib/events.py:786
|
||||
msgid "Slow down to engage"
|
||||
msgstr "请减速后再启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:772
|
||||
#: selfdrive/controls/lib/events.py:793
|
||||
msgid "Please connect to Internet"
|
||||
msgstr "请连接网路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:773
|
||||
#: selfdrive/controls/lib/events.py:794
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr "需检查更新后才能启用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:776
|
||||
#: selfdrive/controls/lib/events.py:797
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr "请连接网路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:792
|
||||
#: selfdrive/controls/lib/events.py:813
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr "准备自动切至左车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:800
|
||||
#: selfdrive/controls/lib/events.py:821
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr "准备自动切至右车道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:816
|
||||
#: selfdrive/controls/lib/events.py:837
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr "请接管方向盘:车道维持关闭"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:824
|
||||
#: selfdrive/controls/lib/events.py:845
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr "请接管方向盘:方向灯开启"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:832 selfdrive/controls/lib/events.py:837
|
||||
#: selfdrive/controls/lib/events.py:853 selfdrive/controls/lib/events.py:858
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr "前方车辆车移动中"
|
||||
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-07-14 16:46+1000\n"
|
||||
"POT-Creation-Date: 2020-09-01 16:34+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Rick Lan <ricklan@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,488 +16,497 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:146
|
||||
#: selfdrive/controls/lib/events.py:151
|
||||
msgid "openpilot Unavailable"
|
||||
msgstr "無法使用 openpilot"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:153 selfdrive/controls/lib/events.py:160
|
||||
#: selfdrive/controls/lib/events.py:158 selfdrive/controls/lib/events.py:165
|
||||
msgid "TAKE CONTROL IMMEDIATELY"
|
||||
msgstr "即刻接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:180 selfdrive/controls/lib/events.py:330
|
||||
#: selfdrive/controls/lib/events.py:356 selfdrive/controls/lib/events.py:420
|
||||
#: selfdrive/controls/lib/events.py:472 selfdrive/controls/lib/events.py:524
|
||||
#: selfdrive/controls/lib/events.py:534 selfdrive/controls/lib/events.py:543
|
||||
#: selfdrive/controls/lib/events.py:185 selfdrive/controls/lib/events.py:335
|
||||
#: selfdrive/controls/lib/events.py:361 selfdrive/controls/lib/events.py:425
|
||||
#: selfdrive/controls/lib/events.py:477 selfdrive/controls/lib/events.py:529
|
||||
#: selfdrive/controls/lib/events.py:539 selfdrive/controls/lib/events.py:654
|
||||
msgid "TAKE CONTROL"
|
||||
msgstr "接管控制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:181
|
||||
msgid "Steer Unavailable Below"
|
||||
msgstr "橫向控制暫時失效,車速低於 "
|
||||
#: selfdrive/controls/lib/events.py:186
|
||||
#, fuzzy, python-format
|
||||
msgid "Steer Unavailable Below %d %s"
|
||||
msgstr "橫向控制暫時失效,車速低於 %d %s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:190
|
||||
msgid "Drive Above"
|
||||
msgstr "車速請高於"
|
||||
#: selfdrive/controls/lib/events.py:194
|
||||
#, fuzzy, python-format
|
||||
msgid "Calibration in Progress: %d%%"
|
||||
msgstr "正在校準中:%d%%"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:189
|
||||
msgid "Calibration in Progress:"
|
||||
msgstr "正在校準中:"
|
||||
#: selfdrive/controls/lib/events.py:195
|
||||
#, fuzzy, python-format
|
||||
msgid "Drive Above %d %s"
|
||||
msgstr "車速請高於 %d %s"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:197
|
||||
#: selfdrive/controls/lib/events.py:202
|
||||
msgid "Poor GPS reception"
|
||||
msgstr "GPS 訊號不良"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:198
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "If sky is visible, contact support"
|
||||
msgstr "如果您不在地下室/隧道,請聯系客服"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:198
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
msgid "Check GPS antenna placement"
|
||||
msgstr "請檢查 GPS 天線位置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:203
|
||||
#: selfdrive/controls/lib/events.py:208
|
||||
msgid "Cruise Mode Disabled"
|
||||
msgstr "巡航模式關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:205
|
||||
#: selfdrive/controls/lib/events.py:210
|
||||
msgid "Main Switch Off"
|
||||
msgstr "主開關已關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:215
|
||||
#: selfdrive/controls/lib/events.py:220
|
||||
msgid "DEBUG ALERT"
|
||||
msgstr "除錯用警示訊息"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:223
|
||||
#: selfdrive/controls/lib/events.py:228
|
||||
msgid "Be ready to take over at any time"
|
||||
msgstr "請準備好隨時接管"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:224 selfdrive/controls/lib/events.py:240
|
||||
#: selfdrive/controls/lib/events.py:248 selfdrive/controls/lib/events.py:256
|
||||
#: selfdrive/controls/lib/events.py:229 selfdrive/controls/lib/events.py:245
|
||||
#: selfdrive/controls/lib/events.py:253 selfdrive/controls/lib/events.py:261
|
||||
msgid "Always keep hands on wheel and eyes on road"
|
||||
msgstr "將手放在方向盤上並持續監視路況"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:231
|
||||
#: selfdrive/controls/lib/events.py:236
|
||||
msgid "WARNING: White panda is deprecated"
|
||||
msgstr "注意:這個分支未經過測試"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:232 selfdrive/controls/lib/events.py:272
|
||||
#: selfdrive/controls/lib/events.py:237 selfdrive/controls/lib/events.py:277
|
||||
msgid "Upgrade to comma two or black panda"
|
||||
msgstr "請升級至 comma two 或是使用 black panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:239
|
||||
#: selfdrive/controls/lib/events.py:244
|
||||
msgid "WARNING: This branch is not tested"
|
||||
msgstr "注意:這個分支未經過測試"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:247
|
||||
#: selfdrive/controls/lib/events.py:252
|
||||
msgid "Dashcam mode"
|
||||
msgstr "行車記錄模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:255
|
||||
#: selfdrive/controls/lib/events.py:260
|
||||
msgid "Dashcam mode for unsupported car"
|
||||
msgstr "行車記錄模式 (尚未支援車種)"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:263
|
||||
#: selfdrive/controls/lib/events.py:268
|
||||
msgid "Unsupported Giraffe Configuration"
|
||||
msgstr "未支援的 Giraffe 設置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:264
|
||||
#: selfdrive/controls/lib/events.py:269
|
||||
msgid "Visit comma.ai/tg"
|
||||
msgstr "請查閱 comma.ai/tg"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:271
|
||||
#: selfdrive/controls/lib/events.py:276
|
||||
msgid "White Panda Is No Longer Supported"
|
||||
msgstr "不再支援 White Panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:275
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
msgid "White panda is no longer supported"
|
||||
msgstr "不再支援 White panda"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:280
|
||||
#: selfdrive/controls/lib/events.py:285
|
||||
msgid "Stock LKAS is turned on"
|
||||
msgstr "原廠 LKAS 已開啟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:281
|
||||
#: selfdrive/controls/lib/events.py:286
|
||||
msgid "Turn off stock LKAS to engage"
|
||||
msgstr "需關閉原廠 LKAS 才能啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:290
|
||||
#: selfdrive/controls/lib/events.py:295
|
||||
msgid "Community Feature Detected"
|
||||
msgstr "檢測到社群開發功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:291
|
||||
#: selfdrive/controls/lib/events.py:296
|
||||
msgid "Enable Community Features in Developer Settings"
|
||||
msgstr "請至開發人員設定裡啟用社群開發功能"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:298
|
||||
#: selfdrive/controls/lib/events.py:303
|
||||
msgid "Dashcam Mode"
|
||||
msgstr "行車記錄模式"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:299
|
||||
#: selfdrive/controls/lib/events.py:304
|
||||
msgid "Car Unrecognized"
|
||||
msgstr "無法辨識車款"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:306 selfdrive/controls/lib/events.py:314
|
||||
#: selfdrive/controls/lib/events.py:322
|
||||
#: selfdrive/controls/lib/events.py:311 selfdrive/controls/lib/events.py:319
|
||||
#: selfdrive/controls/lib/events.py:327
|
||||
msgid "BRAKE!"
|
||||
msgstr "剎車!"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:307
|
||||
#: selfdrive/controls/lib/events.py:312
|
||||
msgid "Stock AEB: Risk of Collision"
|
||||
msgstr "有碰撞的風險"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:315
|
||||
#: selfdrive/controls/lib/events.py:320
|
||||
msgid "Stock FCW: Risk of Collision"
|
||||
msgstr "有碰撞的風險"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:323
|
||||
#: selfdrive/controls/lib/events.py:328
|
||||
msgid "Risk of Collision"
|
||||
msgstr "有碰撞的風險"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:331
|
||||
#: selfdrive/controls/lib/events.py:336
|
||||
msgid "Lane Departure Detected"
|
||||
msgstr "偏離車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:340
|
||||
#: selfdrive/controls/lib/events.py:345
|
||||
msgid "openpilot will not brake while gas pressed"
|
||||
msgstr "在您踩著油門的時候 openpilot 將不會剎車"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:348
|
||||
#: selfdrive/controls/lib/events.py:353
|
||||
msgid "Vehicle Parameter Identification Failed"
|
||||
msgstr "車子參數識別失敗"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:357 selfdrive/controls/lib/events.py:525
|
||||
#: selfdrive/controls/lib/events.py:528
|
||||
#: selfdrive/controls/lib/events.py:362 selfdrive/controls/lib/events.py:530
|
||||
#: selfdrive/controls/lib/events.py:533
|
||||
msgid "Steering Temporarily Unavailable"
|
||||
msgstr "橫向控制暫時失效"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:364
|
||||
#: selfdrive/controls/lib/events.py:369
|
||||
msgid "KEEP EYES ON ROAD: Driver Distracted"
|
||||
msgstr "注意路況:駕駛分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:372
|
||||
#: selfdrive/controls/lib/events.py:377
|
||||
msgid "KEEP EYES ON ROAD"
|
||||
msgstr "注意路況"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:373
|
||||
#: selfdrive/controls/lib/events.py:378
|
||||
msgid "Driver Appears Distracted"
|
||||
msgstr "駕駛分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:380 selfdrive/controls/lib/events.py:404
|
||||
#: selfdrive/controls/lib/events.py:385 selfdrive/controls/lib/events.py:409
|
||||
msgid "DISENGAGE IMMEDIATELY"
|
||||
msgstr "立即解除"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:381
|
||||
#: selfdrive/controls/lib/events.py:386
|
||||
msgid "Driver Was Distracted"
|
||||
msgstr "駕駛分心"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:388
|
||||
#: selfdrive/controls/lib/events.py:393
|
||||
msgid "TOUCH STEERING WHEEL: No Face Detected"
|
||||
msgstr "請觸碰方向盤:未偵測到駕駛面容"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:396
|
||||
#: selfdrive/controls/lib/events.py:401
|
||||
msgid "TOUCH STEERING WHEEL"
|
||||
msgstr "請觸碰方向盤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:397
|
||||
#: selfdrive/controls/lib/events.py:402
|
||||
msgid "Driver Is Unresponsive"
|
||||
msgstr "駕駛沒有反應"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:405
|
||||
#: selfdrive/controls/lib/events.py:410
|
||||
msgid "Driver Was Unresponsive"
|
||||
msgstr "駕駛沒有反應"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:412
|
||||
#: selfdrive/controls/lib/events.py:417
|
||||
msgid "CHECK DRIVER FACE VISIBILITY"
|
||||
msgstr "請檢查駕駛面部的可見度"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:413
|
||||
#: selfdrive/controls/lib/events.py:418
|
||||
msgid "Driver Monitor Model Output Uncertain"
|
||||
msgstr "駕駛監控模型判斷不明確"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:421
|
||||
#: selfdrive/controls/lib/events.py:426
|
||||
msgid "Resume Driving Manually"
|
||||
msgstr "請自行恢復駕駛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:428
|
||||
#: selfdrive/controls/lib/events.py:433
|
||||
msgid "STOPPED"
|
||||
msgstr "已停止"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:429
|
||||
#: selfdrive/controls/lib/events.py:434
|
||||
msgid "Press Resume to Move"
|
||||
msgstr "請按 RES 繼續"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:440
|
||||
#: selfdrive/controls/lib/events.py:445
|
||||
msgid "Steer Left to Start Lane Change"
|
||||
msgstr "請往左打方向盤切換至左車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:441 selfdrive/controls/lib/events.py:449
|
||||
#: selfdrive/controls/lib/events.py:457 selfdrive/controls/lib/events.py:465
|
||||
#: selfdrive/controls/lib/events.py:793 selfdrive/controls/lib/events.py:801
|
||||
#: selfdrive/controls/lib/events.py:809
|
||||
#: selfdrive/controls/lib/events.py:446 selfdrive/controls/lib/events.py:454
|
||||
#: selfdrive/controls/lib/events.py:462 selfdrive/controls/lib/events.py:470
|
||||
#: selfdrive/controls/lib/events.py:814 selfdrive/controls/lib/events.py:822
|
||||
#: selfdrive/controls/lib/events.py:830
|
||||
msgid "Monitor Other Vehicles"
|
||||
msgstr "請注意其它車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:448
|
||||
#: selfdrive/controls/lib/events.py:453
|
||||
msgid "Steer Right to Start Lane Change"
|
||||
msgstr "請往右打方向盤切換至右車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:456
|
||||
#: selfdrive/controls/lib/events.py:461
|
||||
msgid "Car Detected in Blindspot"
|
||||
msgstr "盲點偵測到車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:464 selfdrive/controls/lib/events.py:808
|
||||
#: selfdrive/controls/lib/events.py:469 selfdrive/controls/lib/events.py:829
|
||||
msgid "Changing Lane"
|
||||
msgstr "切換車道中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:473
|
||||
#: selfdrive/controls/lib/events.py:478
|
||||
msgid "Turn Exceeds Steering Limit"
|
||||
msgstr "彎道超過橫向操控限制"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:498
|
||||
#: selfdrive/controls/lib/events.py:503
|
||||
msgid "Brake Hold Active"
|
||||
msgstr "駐車煞車已啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:503
|
||||
#: selfdrive/controls/lib/events.py:508
|
||||
msgid "Park Brake Engaged"
|
||||
msgstr "電子駐車已啟動"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:508
|
||||
#: selfdrive/controls/lib/events.py:513
|
||||
msgid "Pedal Pressed During Attempt"
|
||||
msgstr "啟用時偵測到駕駛踩踏油門/剎車"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:519
|
||||
#: selfdrive/controls/lib/events.py:524
|
||||
msgid "Enable Adaptive Cruise"
|
||||
msgstr "啟用主動定速巡航"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:535 selfdrive/controls/lib/events.py:538
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "視覺模型判斷不明確"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:544
|
||||
#: selfdrive/controls/lib/events.py:540
|
||||
msgid "Attempting Refocus: Camera Focus Invalid"
|
||||
msgstr "嘗試對焦:相機已失焦"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:550
|
||||
#: selfdrive/controls/lib/events.py:546
|
||||
msgid "Out of Storage Space"
|
||||
msgstr "儲存空間不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:555
|
||||
#: selfdrive/controls/lib/events.py:551
|
||||
msgid "Speed Too Low"
|
||||
msgstr "車速過慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:560 selfdrive/controls/lib/events.py:564
|
||||
#: selfdrive/controls/lib/events.py:556 selfdrive/controls/lib/events.py:560
|
||||
msgid "NEOS Update Required"
|
||||
msgstr "NEOS 需要更新"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:561
|
||||
#: selfdrive/controls/lib/events.py:557
|
||||
msgid "Please Wait for Update"
|
||||
msgstr "更新中請稍候"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:569 selfdrive/controls/lib/events.py:573
|
||||
#: selfdrive/controls/lib/events.py:565 selfdrive/controls/lib/events.py:569
|
||||
msgid "No Data from Device Sensors"
|
||||
msgstr "未收到裝置傳感器數據"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:570 selfdrive/controls/lib/events.py:583
|
||||
#: selfdrive/controls/lib/events.py:665
|
||||
#: selfdrive/controls/lib/events.py:566 selfdrive/controls/lib/events.py:579
|
||||
#: selfdrive/controls/lib/events.py:686
|
||||
msgid "Reboot your Device"
|
||||
msgstr "請重啟裝置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:582 selfdrive/controls/lib/events.py:586
|
||||
#: selfdrive/controls/lib/events.py:578 selfdrive/controls/lib/events.py:582
|
||||
msgid "Speaker not found"
|
||||
msgstr "找不到音效裝置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:590
|
||||
#: selfdrive/controls/lib/events.py:586
|
||||
msgid "Distraction Level Too High"
|
||||
msgstr "駕駛分心太多次"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:594
|
||||
#: selfdrive/controls/lib/events.py:590
|
||||
msgid "System Overheated"
|
||||
msgstr "系統過熱"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:595
|
||||
#: selfdrive/controls/lib/events.py:591
|
||||
msgid "System overheated"
|
||||
msgstr "系統過熱"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:599 selfdrive/controls/lib/events.py:600
|
||||
#: selfdrive/controls/lib/events.py:595 selfdrive/controls/lib/events.py:596
|
||||
msgid "Gear not D"
|
||||
msgstr "不在 D 檔位"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:604
|
||||
#: selfdrive/controls/lib/events.py:600
|
||||
msgid "Calibration Invalid: Reposition Device and Recalibrate"
|
||||
msgstr "校準無效:請將裝置放於新的位置並重新校準"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:605
|
||||
#: selfdrive/controls/lib/events.py:601
|
||||
msgid "Calibration Invalid: Reposition Device & Recalibrate"
|
||||
msgstr "校準無效:請將裝置放於新的位置並重新校準"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:609 selfdrive/controls/lib/events.py:611
|
||||
#: selfdrive/controls/lib/events.py:605 selfdrive/controls/lib/events.py:607
|
||||
msgid "Calibration in Progress"
|
||||
msgstr "正在校準中"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:615
|
||||
#: selfdrive/controls/lib/events.py:611
|
||||
msgid "Door Open"
|
||||
msgstr "車門開啟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:616
|
||||
#: selfdrive/controls/lib/events.py:612
|
||||
msgid "Door open"
|
||||
msgstr "車門未關"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:620
|
||||
#: selfdrive/controls/lib/events.py:616
|
||||
msgid "Seatbelt Unlatched"
|
||||
msgstr "安全帶未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:621
|
||||
#: selfdrive/controls/lib/events.py:617
|
||||
msgid "Seatbelt unlatched"
|
||||
msgstr "安全帶未繫"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:625 selfdrive/controls/lib/events.py:626
|
||||
#: selfdrive/controls/lib/events.py:621 selfdrive/controls/lib/events.py:622
|
||||
msgid "ESP Off"
|
||||
msgstr "ESP 關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:630 selfdrive/controls/lib/events.py:631
|
||||
#: selfdrive/controls/lib/events.py:626 selfdrive/controls/lib/events.py:627
|
||||
msgid "Low Battery"
|
||||
msgstr "電量過低"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:635 selfdrive/controls/lib/events.py:636
|
||||
#: selfdrive/controls/lib/events.py:631 selfdrive/controls/lib/events.py:632
|
||||
msgid "Communication Issue between Processes"
|
||||
msgstr "行程間出現通訊問題"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:641 selfdrive/controls/lib/events.py:642
|
||||
#: selfdrive/controls/lib/events.py:637 selfdrive/controls/lib/events.py:638
|
||||
msgid "Radar Communication Issue"
|
||||
msgstr "雷達通訊出現問題"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:647 selfdrive/controls/lib/events.py:648
|
||||
#: selfdrive/controls/lib/events.py:652 selfdrive/controls/lib/events.py:653
|
||||
#: selfdrive/controls/lib/events.py:643 selfdrive/controls/lib/events.py:644
|
||||
#: selfdrive/controls/lib/events.py:648 selfdrive/controls/lib/events.py:649
|
||||
msgid "Radar Error: Restart the Car"
|
||||
msgstr "雷達訊號錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:657 selfdrive/controls/lib/events.py:658
|
||||
#: selfdrive/controls/lib/events.py:655 selfdrive/controls/lib/events.py:659
|
||||
msgid "Driving model lagging"
|
||||
msgstr "操控模型有延遲"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:662 selfdrive/controls/lib/events.py:668
|
||||
#: selfdrive/controls/lib/events.py:663 selfdrive/controls/lib/events.py:664
|
||||
#: selfdrive/controls/lib/events.py:673 selfdrive/controls/lib/events.py:674
|
||||
msgid "Vision Model Output Uncertain"
|
||||
msgstr "視覺模型判斷不明確"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:668 selfdrive/controls/lib/events.py:669
|
||||
#: selfdrive/controls/lib/events.py:678 selfdrive/controls/lib/events.py:679
|
||||
msgid "Device Fell Off Mount"
|
||||
msgstr "裝置掉落偵測"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:683 selfdrive/controls/lib/events.py:689
|
||||
msgid "Low Memory: Reboot Your Device"
|
||||
msgstr "記憶體不足:請重啟您的裝置"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:664
|
||||
#: selfdrive/controls/lib/events.py:685
|
||||
msgid "RAM Critically Low"
|
||||
msgstr "記憶體嚴重不足"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:673 selfdrive/controls/lib/events.py:674
|
||||
#: selfdrive/controls/lib/events.py:694 selfdrive/controls/lib/events.py:695
|
||||
msgid "Controls Failed"
|
||||
msgstr "控制發生錯誤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:678
|
||||
#: selfdrive/controls/lib/events.py:699
|
||||
msgid "Controls Mismatch"
|
||||
msgstr "控制不匹配"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:682 selfdrive/controls/lib/events.py:684
|
||||
#: selfdrive/controls/lib/events.py:688
|
||||
#: selfdrive/controls/lib/events.py:703 selfdrive/controls/lib/events.py:705
|
||||
#: selfdrive/controls/lib/events.py:709
|
||||
msgid "CAN Error: Check Connections"
|
||||
msgstr "CAN 訊號錯誤:請檢查線路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:692 selfdrive/controls/lib/events.py:698
|
||||
#: selfdrive/controls/lib/events.py:713 selfdrive/controls/lib/events.py:719
|
||||
msgid "LKAS Fault: Restart the Car"
|
||||
msgstr "LKAS 錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:694
|
||||
#: selfdrive/controls/lib/events.py:715
|
||||
msgid "LKAS Fault: Restart the car to engage"
|
||||
msgstr "LKAS 錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:702 selfdrive/controls/lib/events.py:708
|
||||
#: selfdrive/controls/lib/events.py:786
|
||||
#: selfdrive/controls/lib/events.py:723 selfdrive/controls/lib/events.py:729
|
||||
#: selfdrive/controls/lib/events.py:807
|
||||
msgid "Cruise Fault: Restart the Car"
|
||||
msgstr "巡航系統錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:704 selfdrive/controls/lib/events.py:782
|
||||
#: selfdrive/controls/lib/events.py:725 selfdrive/controls/lib/events.py:803
|
||||
msgid "Cruise Fault: Restart the car to engage"
|
||||
msgstr "巡航系統錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:712
|
||||
#: selfdrive/controls/lib/events.py:733
|
||||
msgid "Gas Fault: Restart the Car"
|
||||
msgstr "油門錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:713
|
||||
#: selfdrive/controls/lib/events.py:734
|
||||
msgid "Gas Error: Restart the Car"
|
||||
msgstr "油門錯誤:請重新發動車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:717 selfdrive/controls/lib/events.py:718
|
||||
#: selfdrive/controls/lib/events.py:738 selfdrive/controls/lib/events.py:739
|
||||
msgid "Reverse Gear"
|
||||
msgstr "切換至倒車檔"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:722
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
msgid "Cruise Is Off"
|
||||
msgstr "巡航系統關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:726 selfdrive/controls/lib/events.py:727
|
||||
#: selfdrive/controls/lib/events.py:747 selfdrive/controls/lib/events.py:748
|
||||
msgid "Planner Solution Error"
|
||||
msgstr "Planner Solution 錯誤"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:731 selfdrive/controls/lib/events.py:733
|
||||
#: selfdrive/controls/lib/events.py:737
|
||||
#: selfdrive/controls/lib/events.py:752 selfdrive/controls/lib/events.py:754
|
||||
#: selfdrive/controls/lib/events.py:758
|
||||
msgid "Harness Malfunction"
|
||||
msgstr "Harness 故障"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:734
|
||||
#: selfdrive/controls/lib/events.py:755
|
||||
msgid "Please Check Hardware"
|
||||
msgstr "請檢查硬體"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:742 selfdrive/controls/lib/events.py:751
|
||||
#: selfdrive/controls/lib/events.py:763 selfdrive/controls/lib/events.py:772
|
||||
msgid "openpilot Canceled"
|
||||
msgstr "openpilot 已取消"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:743
|
||||
#: selfdrive/controls/lib/events.py:764
|
||||
msgid "No close lead car"
|
||||
msgstr "前方沒有車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:746
|
||||
#: selfdrive/controls/lib/events.py:767
|
||||
msgid "No Close Lead Car"
|
||||
msgstr "前方沒有車輛"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:752
|
||||
#: selfdrive/controls/lib/events.py:773
|
||||
msgid "Speed too low"
|
||||
msgstr "車速過慢"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:759 selfdrive/controls/lib/events.py:764
|
||||
#: selfdrive/controls/lib/events.py:780 selfdrive/controls/lib/events.py:785
|
||||
msgid "Speed Too High"
|
||||
msgstr "車速過快"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:760
|
||||
#: selfdrive/controls/lib/events.py:781
|
||||
msgid "Slow down to resume operation"
|
||||
msgstr "請減速後再啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:765
|
||||
#: selfdrive/controls/lib/events.py:786
|
||||
msgid "Slow down to engage"
|
||||
msgstr "請減速後再啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:772
|
||||
#: selfdrive/controls/lib/events.py:793
|
||||
msgid "Please connect to Internet"
|
||||
msgstr "請連接網路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:773
|
||||
#: selfdrive/controls/lib/events.py:794
|
||||
msgid "An Update Check Is Required to Engage"
|
||||
msgstr "需檢查更新後才能啟用"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:776
|
||||
#: selfdrive/controls/lib/events.py:797
|
||||
msgid "Please Connect to Internet"
|
||||
msgstr "請連接網路"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:792
|
||||
#: selfdrive/controls/lib/events.py:813
|
||||
msgid "Left ALC will start in 3s"
|
||||
msgstr "準備自動切至左車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:800
|
||||
#: selfdrive/controls/lib/events.py:821
|
||||
msgid "Right ALC will start in 3s"
|
||||
msgstr "準備自動切至右車道"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:816
|
||||
#: selfdrive/controls/lib/events.py:837
|
||||
msgid "STEERING REQUIRED: Lane Keeping OFF"
|
||||
msgstr "請接管方向盤:車道維持關閉"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:824
|
||||
#: selfdrive/controls/lib/events.py:845
|
||||
msgid "STEERING REQUIRED: Blinkers ON"
|
||||
msgstr "請接管方向盤:方向燈開啟"
|
||||
|
||||
#: selfdrive/controls/lib/events.py:832 selfdrive/controls/lib/events.py:837
|
||||
#: selfdrive/controls/lib/events.py:853 selfdrive/controls/lib/events.py:858
|
||||
msgid "Lead Car Is Moving"
|
||||
msgstr "前方車輛車移動中"
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
Import('env', 'common', 'cereal', 'messaging')
|
||||
|
||||
Import('env', 'common', 'cereal', 'messaging', 'cython_dependencies')
|
||||
# dp - Add read dp_disable_relay value
|
||||
if FindFile('dp_disable_relay', '/data/params/d') != None:
|
||||
with open('/data/params/d/dp_disable_relay') as f:
|
||||
if (int(f.read())) == 1:
|
||||
env.Append(CCFLAGS='-DDisableRelay')
|
||||
|
||||
env.Program('boardd.cc', LIBS=['usb-1.0', common, cereal, messaging, 'pthread', 'zmq', 'capnp', 'kj'])
|
||||
env.Program('boardd', ['boardd.cc', 'panda.cc'], LIBS=['usb-1.0', common, cereal, messaging, 'pthread', 'zmq', 'capnp', 'kj'])
|
||||
env.Library('libcan_list_to_can_capnp', ['can_list_to_can_capnp.cc'])
|
||||
|
||||
env.Command(['boardd_api_impl.so'],
|
||||
['libcan_list_to_can_capnp.a', 'boardd_api_impl.pyx', 'boardd_setup.py'],
|
||||
"cd selfdrive/boardd && python3 boardd_setup.py build_ext --inplace")
|
||||
|
||||
env.Command(['boardd_api_impl.so', 'boardd_api_impl.cpp'],
|
||||
cython_dependencies + ['libcan_list_to_can_capnp.a', 'boardd_api_impl.pyx', 'boardd_setup.py'],
|
||||
"cd selfdrive/boardd && python3 boardd_setup.py build_ext --inplace")
|
||||
|
||||
+281
-604
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,8 @@
|
||||
import subprocess
|
||||
from distutils.core import Extension, setup
|
||||
|
||||
from Cython.Build import cythonize
|
||||
|
||||
from common.cython_hacks import BuildExtWithoutPlatformSuffix
|
||||
from common.basedir import BASEDIR
|
||||
import os
|
||||
|
||||
PHONELIBS = os.path.join(BASEDIR, 'phonelibs')
|
||||
|
||||
ARCH = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip()
|
||||
libraries = ['can_list_to_can_capnp', 'capnp', 'kj']
|
||||
|
||||
setup(name='Boardd API Implementation',
|
||||
|
||||
@@ -0,0 +1,322 @@
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
||||
#include "common/swaglog.h"
|
||||
|
||||
#include "panda.h"
|
||||
|
||||
Panda::Panda(){
|
||||
int err;
|
||||
|
||||
err = pthread_mutex_init(&usb_lock, NULL);
|
||||
if (err != 0) { goto fail; }
|
||||
|
||||
// init libusb
|
||||
err = libusb_init(&ctx);
|
||||
if (err != 0) { goto fail; }
|
||||
|
||||
#if LIBUSB_API_VERSION >= 0x01000106
|
||||
libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_INFO);
|
||||
#else
|
||||
libusb_set_debug(ctx, 3);
|
||||
#endif
|
||||
|
||||
dev_handle = libusb_open_device_with_vid_pid(ctx, 0xbbaa, 0xddcc);
|
||||
if (dev_handle == NULL) { goto fail; }
|
||||
|
||||
if (libusb_kernel_driver_active(dev_handle, 0) == 1) {
|
||||
libusb_detach_kernel_driver(dev_handle, 0);
|
||||
}
|
||||
|
||||
err = libusb_set_configuration(dev_handle, 1);
|
||||
if (err != 0) { goto fail; }
|
||||
|
||||
err = libusb_claim_interface(dev_handle, 0);
|
||||
if (err != 0) { goto fail; }
|
||||
|
||||
hw_type = get_hw_type();
|
||||
is_pigeon =
|
||||
(hw_type == cereal::HealthData::HwType::GREY_PANDA) ||
|
||||
(hw_type == cereal::HealthData::HwType::BLACK_PANDA) ||
|
||||
(hw_type == cereal::HealthData::HwType::UNO);
|
||||
has_rtc = (hw_type == cereal::HealthData::HwType::UNO);
|
||||
|
||||
return;
|
||||
|
||||
fail:
|
||||
cleanup();
|
||||
throw std::runtime_error("Error connecting to panda");
|
||||
}
|
||||
|
||||
Panda::~Panda(){
|
||||
pthread_mutex_lock(&usb_lock);
|
||||
cleanup();
|
||||
connected = false;
|
||||
pthread_mutex_unlock(&usb_lock);
|
||||
}
|
||||
|
||||
void Panda::cleanup(){
|
||||
if (dev_handle){
|
||||
libusb_release_interface(dev_handle, 0);
|
||||
libusb_close(dev_handle);
|
||||
}
|
||||
|
||||
if (ctx) {
|
||||
libusb_exit(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
void Panda::handle_usb_issue(int err, const char func[]) {
|
||||
LOGE_100("usb error %d \"%s\" in %s", err, libusb_strerror((enum libusb_error)err), func);
|
||||
if (err == LIBUSB_ERROR_NO_DEVICE) {
|
||||
LOGE("lost connection");
|
||||
connected = false;
|
||||
}
|
||||
// TODO: check other errors, is simply retrying okay?
|
||||
}
|
||||
|
||||
int Panda::usb_write(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned int timeout) {
|
||||
int err;
|
||||
const uint8_t bmRequestType = LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE;
|
||||
|
||||
pthread_mutex_lock(&usb_lock);
|
||||
do {
|
||||
err = libusb_control_transfer(dev_handle, bmRequestType, bRequest, wValue, wIndex, NULL, 0, timeout);
|
||||
if (err < 0) handle_usb_issue(err, __func__);
|
||||
} while (err < 0 && connected);
|
||||
|
||||
pthread_mutex_unlock(&usb_lock);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int Panda::usb_read(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout) {
|
||||
int err;
|
||||
const uint8_t bmRequestType = LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE;
|
||||
|
||||
pthread_mutex_lock(&usb_lock);
|
||||
do {
|
||||
err = libusb_control_transfer(dev_handle, bmRequestType, bRequest, wValue, wIndex, data, wLength, timeout);
|
||||
if (err < 0) handle_usb_issue(err, __func__);
|
||||
} while (err < 0 && connected);
|
||||
pthread_mutex_unlock(&usb_lock);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int Panda::usb_bulk_write(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout) {
|
||||
int err;
|
||||
int transferred = 0;
|
||||
|
||||
pthread_mutex_lock(&usb_lock);
|
||||
do {
|
||||
// Try sending can messages. If the receive buffer on the panda is full it will NAK
|
||||
// and libusb will try again. After 5ms, it will time out. We will drop the messages.
|
||||
err = libusb_bulk_transfer(dev_handle, endpoint, data, length, &transferred, timeout);
|
||||
|
||||
if (err == LIBUSB_ERROR_TIMEOUT) {
|
||||
LOGW("Transmit buffer full");
|
||||
break;
|
||||
} else if (err != 0 || length != transferred) {
|
||||
handle_usb_issue(err, __func__);
|
||||
}
|
||||
} while(err != 0 && connected);
|
||||
|
||||
pthread_mutex_unlock(&usb_lock);
|
||||
return transferred;
|
||||
}
|
||||
|
||||
int Panda::usb_bulk_read(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout) {
|
||||
int err;
|
||||
int transferred = 0;
|
||||
|
||||
pthread_mutex_lock(&usb_lock);
|
||||
|
||||
do {
|
||||
err = libusb_bulk_transfer(dev_handle, endpoint, data, length, &transferred, timeout);
|
||||
|
||||
if (err == LIBUSB_ERROR_TIMEOUT) {
|
||||
break; // timeout is okay to exit, recv still happened
|
||||
} else if (err == LIBUSB_ERROR_OVERFLOW) {
|
||||
LOGE_100("overflow got 0x%x", transferred);
|
||||
} else if (err != 0) {
|
||||
handle_usb_issue(err, __func__);
|
||||
}
|
||||
|
||||
} while(err != 0 && connected);
|
||||
|
||||
pthread_mutex_unlock(&usb_lock);
|
||||
|
||||
return transferred;
|
||||
}
|
||||
|
||||
void Panda::set_safety_model(cereal::CarParams::SafetyModel safety_model, int safety_param){
|
||||
usb_write(0xdc, (uint16_t)safety_model, safety_param);
|
||||
}
|
||||
|
||||
void Panda::set_unsafe_mode(){
|
||||
usb_write(0xdf, 9, 0);
|
||||
}
|
||||
|
||||
cereal::HealthData::HwType Panda::get_hw_type() {
|
||||
unsigned char hw_query[1] = {0};
|
||||
|
||||
usb_read(0xc1, 0, 0, hw_query, 1);
|
||||
return (cereal::HealthData::HwType)(hw_query[0]);
|
||||
}
|
||||
|
||||
void Panda::set_rtc(struct tm sys_time){
|
||||
// tm struct has year defined as years since 1900
|
||||
usb_write(0xa1, (uint16_t)(1900 + sys_time.tm_year), 0);
|
||||
usb_write(0xa2, (uint16_t)(1 + sys_time.tm_mon), 0);
|
||||
usb_write(0xa3, (uint16_t)sys_time.tm_mday, 0);
|
||||
// usb_write(0xa4, (uint16_t)(1 + sys_time.tm_wday), 0);
|
||||
usb_write(0xa5, (uint16_t)sys_time.tm_hour, 0);
|
||||
usb_write(0xa6, (uint16_t)sys_time.tm_min, 0);
|
||||
usb_write(0xa7, (uint16_t)sys_time.tm_sec, 0);
|
||||
}
|
||||
|
||||
struct tm Panda::get_rtc(){
|
||||
struct __attribute__((packed)) timestamp_t {
|
||||
uint16_t year; // Starts at 0
|
||||
uint8_t month;
|
||||
uint8_t day;
|
||||
uint8_t weekday;
|
||||
uint8_t hour;
|
||||
uint8_t minute;
|
||||
uint8_t second;
|
||||
} rtc_time = {0};
|
||||
|
||||
usb_read(0xa0, 0, 0, (unsigned char*)&rtc_time, sizeof(rtc_time));
|
||||
|
||||
struct tm new_time = { 0 };
|
||||
new_time.tm_year = rtc_time.year - 1900; // tm struct has year defined as years since 1900
|
||||
new_time.tm_mon = rtc_time.month - 1;
|
||||
new_time.tm_mday = rtc_time.day;
|
||||
new_time.tm_hour = rtc_time.hour;
|
||||
new_time.tm_min = rtc_time.minute;
|
||||
new_time.tm_sec = rtc_time.second;
|
||||
|
||||
return new_time;
|
||||
}
|
||||
|
||||
void Panda::set_fan_speed(uint16_t fan_speed){
|
||||
usb_write(0xb1, fan_speed, 0);
|
||||
}
|
||||
|
||||
uint16_t Panda::get_fan_speed(){
|
||||
uint16_t fan_speed_rpm = 0;
|
||||
usb_read(0xb2, 0, 0, (unsigned char*)&fan_speed_rpm, sizeof(fan_speed_rpm));
|
||||
return fan_speed_rpm;
|
||||
}
|
||||
|
||||
void Panda::set_ir_pwr(uint16_t ir_pwr) {
|
||||
usb_write(0xb0, ir_pwr, 0);
|
||||
}
|
||||
|
||||
health_t Panda::get_health(){
|
||||
health_t health {0};
|
||||
usb_read(0xd2, 0, 0, (unsigned char*)&health, sizeof(health));
|
||||
return health;
|
||||
}
|
||||
|
||||
void Panda::set_loopback(bool loopback){
|
||||
usb_write(0xe5, loopback, 0);
|
||||
}
|
||||
|
||||
const char* Panda::get_firmware_version(){
|
||||
const char* fw_sig_buf = new char[128]();
|
||||
|
||||
int read_1 = usb_read(0xd3, 0, 0, (unsigned char*)fw_sig_buf, 64);
|
||||
int read_2 = usb_read(0xd4, 0, 0, (unsigned char*)fw_sig_buf + 64, 64);
|
||||
|
||||
if ((read_1 == 64) && (read_2 == 64)) {
|
||||
return fw_sig_buf;
|
||||
}
|
||||
|
||||
delete[] fw_sig_buf;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char* Panda::get_serial(){
|
||||
const char* serial_buf = new char[16]();
|
||||
|
||||
int err = usb_read(0xd0, 0, 0, (unsigned char*)serial_buf, 16);
|
||||
|
||||
if (err >= 0) {
|
||||
return serial_buf;
|
||||
}
|
||||
|
||||
delete[] serial_buf;
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
void Panda::set_power_saving(bool power_saving){
|
||||
usb_write(0xe7, power_saving, 0);
|
||||
}
|
||||
|
||||
void Panda::set_usb_power_mode(cereal::HealthData::UsbPowerMode power_mode){
|
||||
usb_write(0xe6, (uint16_t)power_mode, 0);
|
||||
}
|
||||
|
||||
void Panda::send_heartbeat(){
|
||||
usb_write(0xf3, 1, 0);
|
||||
}
|
||||
|
||||
void Panda::can_send(capnp::List<cereal::CanData>::Reader can_data_list){
|
||||
int msg_count = can_data_list.size();
|
||||
|
||||
uint32_t *send = new uint32_t[msg_count*0x10]();
|
||||
|
||||
for (int i = 0; i < msg_count; i++) {
|
||||
auto cmsg = can_data_list[i];
|
||||
if (cmsg.getAddress() >= 0x800) { // extended
|
||||
send[i*4] = (cmsg.getAddress() << 3) | 5;
|
||||
} else { // normal
|
||||
send[i*4] = (cmsg.getAddress() << 21) | 1;
|
||||
}
|
||||
auto can_data = cmsg.getDat();
|
||||
assert(can_data.size() <= 8);
|
||||
send[i*4+1] = can_data.size() | (cmsg.getSrc() << 4);
|
||||
memcpy(&send[i*4+2], can_data.begin(), can_data.size());
|
||||
}
|
||||
|
||||
usb_bulk_write(3, (unsigned char*)send, msg_count*0x10, 5);
|
||||
|
||||
delete[] send;
|
||||
}
|
||||
|
||||
int Panda::can_receive(cereal::Event::Builder &event){
|
||||
uint32_t data[RECV_SIZE/4];
|
||||
int recv = usb_bulk_read(0x81, (unsigned char*)data, RECV_SIZE);
|
||||
|
||||
// return if length is 0
|
||||
if (recv <= 0) {
|
||||
return 0;
|
||||
} else if (recv == RECV_SIZE) {
|
||||
LOGW("Receive buffer full");
|
||||
}
|
||||
|
||||
size_t num_msg = recv / 0x10;
|
||||
auto canData = event.initCan(num_msg);
|
||||
|
||||
// populate message
|
||||
for (int i = 0; i < num_msg; i++) {
|
||||
if (data[i*4] & 4) {
|
||||
// extended
|
||||
canData[i].setAddress(data[i*4] >> 3);
|
||||
//printf("got extended: %x\n", data[i*4] >> 3);
|
||||
} else {
|
||||
// normal
|
||||
canData[i].setAddress(data[i*4] >> 21);
|
||||
}
|
||||
canData[i].setBusTime(data[i*4+1] >> 16);
|
||||
int len = data[i*4+1]&0xF;
|
||||
canData[i].setDat(kj::arrayPtr((uint8_t*)&data[i*4+2], len));
|
||||
canData[i].setSrc((data[i*4+1] >> 4) & 0xff);
|
||||
}
|
||||
|
||||
return recv;
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
#pragma once
|
||||
|
||||
#include <ctime>
|
||||
#include <cstdint>
|
||||
#include <pthread.h>
|
||||
|
||||
#include <libusb-1.0/libusb.h>
|
||||
|
||||
#include "cereal/gen/cpp/car.capnp.h"
|
||||
#include "cereal/gen/cpp/log.capnp.h"
|
||||
|
||||
// double the FIFO size
|
||||
#define RECV_SIZE (0x1000)
|
||||
#define TIMEOUT 0
|
||||
|
||||
// copied from panda/board/main.c
|
||||
struct __attribute__((packed)) health_t {
|
||||
uint32_t uptime;
|
||||
uint32_t voltage;
|
||||
uint32_t current;
|
||||
uint32_t can_rx_errs;
|
||||
uint32_t can_send_errs;
|
||||
uint32_t can_fwd_errs;
|
||||
uint32_t gmlan_send_errs;
|
||||
uint32_t faults;
|
||||
uint8_t ignition_line;
|
||||
uint8_t ignition_can;
|
||||
uint8_t controls_allowed;
|
||||
uint8_t gas_interceptor_detected;
|
||||
uint8_t car_harness_status;
|
||||
uint8_t usb_power_mode;
|
||||
uint8_t safety_model;
|
||||
uint8_t fault_status;
|
||||
uint8_t power_save_enabled;
|
||||
};
|
||||
|
||||
class Panda {
|
||||
private:
|
||||
libusb_context *ctx = NULL;
|
||||
libusb_device_handle *dev_handle = NULL;
|
||||
pthread_mutex_t usb_lock;
|
||||
void handle_usb_issue(int err, const char func[]);
|
||||
void cleanup();
|
||||
|
||||
public:
|
||||
Panda();
|
||||
~Panda();
|
||||
|
||||
bool connected = true;
|
||||
cereal::HealthData::HwType hw_type = cereal::HealthData::HwType::UNKNOWN;
|
||||
bool is_pigeon = false;
|
||||
bool has_rtc = false;
|
||||
|
||||
// HW communication
|
||||
int usb_write(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned int timeout=TIMEOUT);
|
||||
int usb_read(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout=TIMEOUT);
|
||||
int usb_bulk_write(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout=TIMEOUT);
|
||||
int usb_bulk_read(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout=TIMEOUT);
|
||||
|
||||
// Panda functionality
|
||||
cereal::HealthData::HwType get_hw_type();
|
||||
void set_safety_model(cereal::CarParams::SafetyModel safety_model, int safety_param=0);
|
||||
void set_unsafe_mode();
|
||||
void set_rtc(struct tm sys_time);
|
||||
struct tm get_rtc();
|
||||
void set_fan_speed(uint16_t fan_speed);
|
||||
uint16_t get_fan_speed();
|
||||
void set_ir_pwr(uint16_t ir_pwr);
|
||||
health_t get_health();
|
||||
void set_loopback(bool loopback);
|
||||
const char* get_firmware_version();
|
||||
const char* get_serial();
|
||||
void set_power_saving(bool power_saving);
|
||||
void set_usb_power_mode(cereal::HealthData::UsbPowerMode power_mode);
|
||||
void send_heartbeat();
|
||||
void can_send(capnp::List<cereal::CanData>::Reader can_data_list);
|
||||
int can_receive(cereal::Event::Builder &event);
|
||||
|
||||
};
|
||||
@@ -94,8 +94,6 @@ CameraInfo cameras_supported[CAMERA_ID_MAX] = {
|
||||
};
|
||||
|
||||
void cameras_init(DualCameraState *s) {
|
||||
memset(s, 0, sizeof(*s));
|
||||
|
||||
camera_init(&s->rear, CAMERA_ID_IMX298, 20);
|
||||
s->rear.transform = (mat3){{
|
||||
1.0, 0.0, 0.0,
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <cutils/properties.h>
|
||||
|
||||
#include <pthread.h>
|
||||
#include <czmq.h>
|
||||
#include <capnp/serialize.h>
|
||||
#include "msmb_isp.h"
|
||||
#include "msmb_ispif.h"
|
||||
@@ -108,8 +107,6 @@ static void camera_release_buffer(void* cookie, int buf_idx) {
|
||||
static void camera_init(CameraState *s, int camera_id, int camera_num,
|
||||
uint32_t pixel_clock, uint32_t line_length_pclk,
|
||||
unsigned int max_gain, unsigned int fps) {
|
||||
memset(s, 0, sizeof(*s));
|
||||
|
||||
s->camera_num = camera_num;
|
||||
s->camera_id = camera_id;
|
||||
|
||||
@@ -125,9 +122,9 @@ static void camera_init(CameraState *s, int camera_id, int camera_num,
|
||||
|
||||
s->self_recover = 0;
|
||||
|
||||
zsock_t *ops_sock = zsock_new_push(">inproc://cameraops");
|
||||
assert(ops_sock);
|
||||
s->ops_sock = zsock_resolve(ops_sock);
|
||||
s->ops_sock = zsock_new_push(">inproc://cameraops");
|
||||
assert(s->ops_sock);
|
||||
s->ops_sock_handle = zsock_resolve(s->ops_sock);
|
||||
|
||||
tbuffer_init2(&s->camera_tb, FRAME_BUF_COUNT, "frame",
|
||||
camera_release_buffer, s);
|
||||
@@ -262,8 +259,6 @@ static int imx179_s5k3p8sp_apply_exposure(CameraState *s, int gain, int integ_li
|
||||
}
|
||||
|
||||
void cameras_init(DualCameraState *s) {
|
||||
memset(s, 0, sizeof(*s));
|
||||
|
||||
char project_name[1024] = {0};
|
||||
property_get("ro.boot.project_name", project_name, "");
|
||||
|
||||
@@ -397,7 +392,9 @@ static void set_exposure(CameraState *s, float exposure_frac, float gain_frac) {
|
||||
|
||||
if (err == 0) {
|
||||
s->cur_exposure_frac = exposure_frac;
|
||||
pthread_mutex_lock(&s->frame_info_lock);
|
||||
s->cur_gain_frac = gain_frac;
|
||||
pthread_mutex_unlock(&s->frame_info_lock);
|
||||
}
|
||||
|
||||
//LOGD("set exposure: %f %f - %d", exposure_frac, gain_frac, err);
|
||||
@@ -414,16 +411,20 @@ static void do_autoexposure(CameraState *s, float grey_frac) {
|
||||
const unsigned int exposure_time_min = 16;
|
||||
const unsigned int exposure_time_max = frame_length - 11; // copied from set_exposure()
|
||||
|
||||
float cur_gain_frac = s->cur_gain_frac;
|
||||
float exposure_factor = pow(1.05, (target_grey - grey_frac) / 0.05);
|
||||
if (s->cur_gain_frac > 0.125 && exposure_factor < 1) {
|
||||
s->cur_gain_frac *= exposure_factor;
|
||||
if (cur_gain_frac > 0.125 && exposure_factor < 1) {
|
||||
cur_gain_frac *= exposure_factor;
|
||||
} else if (s->cur_integ_lines * exposure_factor <= exposure_time_max && s->cur_integ_lines * exposure_factor >= exposure_time_min) { // adjust exposure time first
|
||||
s->cur_exposure_frac *= exposure_factor;
|
||||
} else if (s->cur_gain_frac * exposure_factor <= gain_frac_max && s->cur_gain_frac * exposure_factor >= gain_frac_min) {
|
||||
s->cur_gain_frac *= exposure_factor;
|
||||
} else if (cur_gain_frac * exposure_factor <= gain_frac_max && cur_gain_frac * exposure_factor >= gain_frac_min) {
|
||||
cur_gain_frac *= exposure_factor;
|
||||
}
|
||||
pthread_mutex_lock(&s->frame_info_lock);
|
||||
s->cur_gain_frac = cur_gain_frac;
|
||||
pthread_mutex_unlock(&s->frame_info_lock);
|
||||
|
||||
set_exposure(s, s->cur_exposure_frac, s->cur_gain_frac);
|
||||
set_exposure(s, s->cur_exposure_frac, cur_gain_frac);
|
||||
|
||||
} else { // keep the old for others
|
||||
float new_exposure = s->cur_exposure_frac;
|
||||
@@ -448,7 +449,7 @@ void camera_autoexposure(CameraState *s, float grey_frac) {
|
||||
.grey_frac = grey_frac,
|
||||
};
|
||||
|
||||
zmq_send(s->ops_sock, &msg, sizeof(msg), ZMQ_DONTWAIT);
|
||||
zmq_send(s->ops_sock_handle, &msg, sizeof(msg), ZMQ_DONTWAIT);
|
||||
}
|
||||
|
||||
static uint8_t* get_eeprom(int eeprom_fd, size_t *out_len) {
|
||||
@@ -1795,15 +1796,16 @@ static void do_autofocus(CameraState *s) {
|
||||
const int dac_up = s->device == DEVICE_LP3? LP3_AF_DAC_UP:OP3T_AF_DAC_UP;
|
||||
const int dac_down = s->device == DEVICE_LP3? LP3_AF_DAC_DOWN:OP3T_AF_DAC_DOWN;
|
||||
|
||||
float lens_true_pos = s->lens_true_pos;
|
||||
if (!isnan(err)) {
|
||||
// learn lens_true_pos
|
||||
s->lens_true_pos -= err*focus_kp;
|
||||
lens_true_pos -= err*focus_kp;
|
||||
}
|
||||
|
||||
// stay off the walls
|
||||
s->lens_true_pos = clamp(s->lens_true_pos, dac_down, dac_up);
|
||||
|
||||
int target = clamp(s->lens_true_pos - sag, dac_down, dac_up);
|
||||
lens_true_pos = clamp(lens_true_pos, dac_down, dac_up);
|
||||
int target = clamp(lens_true_pos - sag, dac_down, dac_up);
|
||||
s->lens_true_pos = lens_true_pos;
|
||||
|
||||
/*char debug[4096];
|
||||
char *pdebug = debug;
|
||||
@@ -1956,6 +1958,8 @@ static void camera_close(CameraState *s) {
|
||||
}
|
||||
|
||||
free(s->eeprom);
|
||||
|
||||
zsock_destroy(&s->ops_sock);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#ifndef CAMERA_H
|
||||
#define CAMERA_H
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <pthread.h>
|
||||
#include <czmq.h>
|
||||
#include <atomic>
|
||||
#include "messaging.hpp"
|
||||
|
||||
#include "msmb_isp.h"
|
||||
@@ -61,7 +62,8 @@ typedef struct CameraState {
|
||||
|
||||
int device;
|
||||
|
||||
void* ops_sock;
|
||||
void* ops_sock_handle;
|
||||
zsock_t * ops_sock;
|
||||
|
||||
uint32_t pixel_clock;
|
||||
uint32_t line_length_pclk;
|
||||
@@ -94,7 +96,7 @@ typedef struct CameraState {
|
||||
int cur_frame_length;
|
||||
int cur_integ_lines;
|
||||
|
||||
float digital_gain;
|
||||
std::atomic<float> digital_gain;
|
||||
|
||||
StreamState ss[3];
|
||||
|
||||
@@ -111,9 +113,9 @@ typedef struct CameraState {
|
||||
uint16_t cur_lens_pos;
|
||||
uint64_t last_sag_ts;
|
||||
float last_sag_acc_z;
|
||||
float lens_true_pos;
|
||||
std::atomic<float> lens_true_pos;
|
||||
|
||||
int self_recover; // af recovery counter, neg is patience, pos is active
|
||||
std::atomic<int> self_recover; // af recovery counter, neg is patience, pos is active
|
||||
|
||||
int fps;
|
||||
|
||||
@@ -142,5 +144,3 @@ int sensor_write_regs(CameraState *s, struct msm_camera_i2c_reg_array* arr, size
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
+38
-25
@@ -332,6 +332,7 @@ void* frontview_thread(void *arg) {
|
||||
//double t2 = millis_since_boot();
|
||||
//LOGD("front process: %.2fms", t2-t1);
|
||||
}
|
||||
clReleaseCommandQueue(q);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -345,6 +346,11 @@ void* processing_thread(void *arg) {
|
||||
err = set_realtime_priority(51);
|
||||
LOG("setpriority returns %d", err);
|
||||
|
||||
#if defined(QCOM) && !defined(QCOM_REPLAY)
|
||||
std::unique_ptr<uint8_t[]> rgb_roi_buf = std::make_unique<uint8_t[]>((s->rgb_width/NUM_SEGMENTS_X)*(s->rgb_height/NUM_SEGMENTS_Y)*3);
|
||||
std::unique_ptr<int16_t[]> conv_result = std::make_unique<int16_t[]>((s->rgb_width/NUM_SEGMENTS_X)*(s->rgb_height/NUM_SEGMENTS_Y));
|
||||
#endif
|
||||
|
||||
// init cl stuff
|
||||
#ifdef __APPLE__
|
||||
cl_command_queue q = clCreateCommandQueue(s->context, s->device_id, 0, &err);
|
||||
@@ -416,13 +422,12 @@ void* processing_thread(void *arg) {
|
||||
/*double t10 = millis_since_boot();*/
|
||||
|
||||
// cache rgb roi and write to cl
|
||||
uint8_t *rgb_roi_buf = new uint8_t[(s->rgb_width/NUM_SEGMENTS_X)*(s->rgb_height/NUM_SEGMENTS_Y)*3];
|
||||
int roi_id = cnt % ((ROI_X_MAX-ROI_X_MIN+1)*(ROI_Y_MAX-ROI_Y_MIN+1)); // rolling roi
|
||||
int roi_x_offset = roi_id % (ROI_X_MAX-ROI_X_MIN+1);
|
||||
int roi_y_offset = roi_id / (ROI_X_MAX-ROI_X_MIN+1);
|
||||
|
||||
for (int r=0;r<(s->rgb_height/NUM_SEGMENTS_Y);r++) {
|
||||
memcpy(rgb_roi_buf + r * (s->rgb_width/NUM_SEGMENTS_X) * 3,
|
||||
memcpy(rgb_roi_buf.get() + r * (s->rgb_width/NUM_SEGMENTS_X) * 3,
|
||||
(uint8_t *) s->rgb_bufs[rgb_idx].addr + \
|
||||
(ROI_Y_MIN + roi_y_offset) * s->rgb_height/NUM_SEGMENTS_Y * FULL_STRIDE_X * 3 + \
|
||||
(ROI_X_MIN + roi_x_offset) * s->rgb_width/NUM_SEGMENTS_X * 3 + r * FULL_STRIDE_X * 3,
|
||||
@@ -430,7 +435,7 @@ void* processing_thread(void *arg) {
|
||||
}
|
||||
|
||||
err = clEnqueueWriteBuffer (q, s->rgb_conv_roi_cl, true, 0,
|
||||
s->rgb_width/NUM_SEGMENTS_X * s->rgb_height/NUM_SEGMENTS_Y * 3 * sizeof(uint8_t), rgb_roi_buf, 0, 0, 0);
|
||||
s->rgb_width/NUM_SEGMENTS_X * s->rgb_height/NUM_SEGMENTS_Y * 3 * sizeof(uint8_t), rgb_roi_buf.get(), 0, 0, 0);
|
||||
assert(err == 0);
|
||||
|
||||
/*double t11 = millis_since_boot();
|
||||
@@ -453,48 +458,45 @@ void* processing_thread(void *arg) {
|
||||
clWaitForEvents(1, &conv_event);
|
||||
clReleaseEvent(conv_event);
|
||||
|
||||
int16_t *conv_result = new int16_t[(s->rgb_width/NUM_SEGMENTS_X)*(s->rgb_height/NUM_SEGMENTS_Y)];
|
||||
err = clEnqueueReadBuffer(q, s->rgb_conv_result_cl, true, 0,
|
||||
s->rgb_width/NUM_SEGMENTS_X * s->rgb_height/NUM_SEGMENTS_Y * sizeof(int16_t), conv_result, 0, 0, 0);
|
||||
s->rgb_width/NUM_SEGMENTS_X * s->rgb_height/NUM_SEGMENTS_Y * sizeof(int16_t), conv_result.get(), 0, 0, 0);
|
||||
assert(err == 0);
|
||||
|
||||
/*t11 = millis_since_boot();
|
||||
printf("conv time: %f ms\n", t11 - t10);
|
||||
t10 = millis_since_boot();*/
|
||||
|
||||
get_lapmap_one(conv_result, &s->lapres[roi_id], s->rgb_width/NUM_SEGMENTS_X, s->rgb_height/NUM_SEGMENTS_Y);
|
||||
get_lapmap_one(conv_result.get(), &s->lapres[roi_id], s->rgb_width/NUM_SEGMENTS_X, s->rgb_height/NUM_SEGMENTS_Y);
|
||||
|
||||
/*t11 = millis_since_boot();
|
||||
printf("pool time: %f ms\n", t11 - t10);
|
||||
t10 = millis_since_boot();*/
|
||||
|
||||
delete [] rgb_roi_buf;
|
||||
delete [] conv_result;
|
||||
|
||||
/*t11 = millis_since_boot();
|
||||
printf("process time: %f ms\n ----- \n", t11 - t10);
|
||||
t10 = millis_since_boot();*/
|
||||
|
||||
// setup self recover
|
||||
const float lens_true_pos = s->cameras.rear.lens_true_pos;
|
||||
if (is_blur(&s->lapres[0]) &&
|
||||
(s->cameras.rear.lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_DOWN:OP3T_AF_DAC_DOWN)+1 ||
|
||||
s->cameras.rear.lens_true_pos > (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_UP:OP3T_AF_DAC_UP)-1) &&
|
||||
(lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_DOWN:OP3T_AF_DAC_DOWN)+1 ||
|
||||
lens_true_pos > (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_UP:OP3T_AF_DAC_UP)-1) &&
|
||||
s->cameras.rear.self_recover < 2) {
|
||||
// truly stuck, needs help
|
||||
s->cameras.rear.self_recover -= 1;
|
||||
if (s->cameras.rear.self_recover < -FOCUS_RECOVER_PATIENCE) {
|
||||
LOGW("rear camera bad state detected. attempting recovery from %.1f, recover state is %d",
|
||||
s->cameras.rear.lens_true_pos, s->cameras.rear.self_recover);
|
||||
s->cameras.rear.self_recover = FOCUS_RECOVER_STEPS + ((s->cameras.rear.lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M:OP3T_AF_DAC_M))?1:0); // parity determined by which end is stuck at
|
||||
lens_true_pos, s->cameras.rear.self_recover.load());
|
||||
s->cameras.rear.self_recover = FOCUS_RECOVER_STEPS + ((lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M:OP3T_AF_DAC_M))?1:0); // parity determined by which end is stuck at
|
||||
}
|
||||
} else if ((s->cameras.rear.lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M - LP3_AF_DAC_3SIG:OP3T_AF_DAC_M - OP3T_AF_DAC_3SIG) ||
|
||||
s->cameras.rear.lens_true_pos > (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M + LP3_AF_DAC_3SIG:OP3T_AF_DAC_M + OP3T_AF_DAC_3SIG)) &&
|
||||
} else if ((lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M - LP3_AF_DAC_3SIG:OP3T_AF_DAC_M - OP3T_AF_DAC_3SIG) ||
|
||||
lens_true_pos > (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M + LP3_AF_DAC_3SIG:OP3T_AF_DAC_M + OP3T_AF_DAC_3SIG)) &&
|
||||
s->cameras.rear.self_recover < 2) {
|
||||
// in suboptimal position with high prob, but may still recover by itself
|
||||
s->cameras.rear.self_recover -= 1;
|
||||
if (s->cameras.rear.self_recover < -(FOCUS_RECOVER_PATIENCE*3)) {
|
||||
LOGW("rear camera bad state detected. attempting recovery from %.1f, recover state is %d", s->cameras.rear.lens_true_pos, s->cameras.rear.self_recover);
|
||||
s->cameras.rear.self_recover = FOCUS_RECOVER_STEPS/2 + ((s->cameras.rear.lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M:OP3T_AF_DAC_M))?1:0);
|
||||
LOGW("rear camera bad state detected. attempting recovery from %.1f, recover state is %d", lens_true_pos, s->cameras.rear.self_recover.load());
|
||||
s->cameras.rear.self_recover = FOCUS_RECOVER_STEPS/2 + ((lens_true_pos < (s->cameras.device == DEVICE_LP3? LP3_AF_DAC_M:OP3T_AF_DAC_M))?1:0);
|
||||
}
|
||||
} else if (s->cameras.rear.self_recover < 0) {
|
||||
s->cameras.rear.self_recover += 1; // reset if fine
|
||||
@@ -504,7 +506,9 @@ void* processing_thread(void *arg) {
|
||||
|
||||
double t2 = millis_since_boot();
|
||||
|
||||
#ifndef QCOM2
|
||||
uint8_t *bgr_ptr = (uint8_t*)s->rgb_bufs[rgb_idx].addr;
|
||||
#endif
|
||||
|
||||
double yt1 = millis_since_boot();
|
||||
|
||||
@@ -668,6 +672,7 @@ void* processing_thread(void *arg) {
|
||||
LOGD("queued: %.2fms, yuv: %.2f, | processing: %.3fms", (t2-t1), (yt2-yt1), (t5-t1));
|
||||
}
|
||||
|
||||
clReleaseCommandQueue(q);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1173,25 +1178,33 @@ void free_buffers(VisionState *s) {
|
||||
// free bufs
|
||||
for (int i=0; i<FRAME_BUF_COUNT; i++) {
|
||||
visionbuf_free(&s->camera_bufs[i]);
|
||||
visionbuf_free(&s->front_camera_bufs[i]);
|
||||
visionbuf_free(&s->focus_bufs[i]);
|
||||
visionbuf_free(&s->stats_bufs[i]);
|
||||
}
|
||||
|
||||
for (int i=0; i<FRAME_BUF_COUNT; i++) {
|
||||
visionbuf_free(&s->front_camera_bufs[i]);
|
||||
}
|
||||
|
||||
for (int i=0; i<UI_BUF_COUNT; i++) {
|
||||
visionbuf_free(&s->rgb_bufs[i]);
|
||||
}
|
||||
|
||||
for (int i=0; i<UI_BUF_COUNT; i++) {
|
||||
visionbuf_free(&s->rgb_front_bufs[i]);
|
||||
}
|
||||
|
||||
for (int i=0; i<YUV_COUNT; i++) {
|
||||
visionbuf_free(&s->yuv_ion[i]);
|
||||
visionbuf_free(&s->yuv_front_ion[i]);
|
||||
}
|
||||
|
||||
clReleaseMemObject(s->rgb_conv_roi_cl);
|
||||
clReleaseMemObject(s->rgb_conv_result_cl);
|
||||
clReleaseMemObject(s->rgb_conv_filter_cl);
|
||||
|
||||
clReleaseProgram(s->prg_debayer_rear);
|
||||
clReleaseProgram(s->prg_debayer_front);
|
||||
clReleaseKernel(s->krnl_debayer_rear);
|
||||
clReleaseKernel(s->krnl_debayer_front);
|
||||
|
||||
clReleaseProgram(s->prg_rgb_laplacian);
|
||||
clReleaseKernel(s->krnl_rgb_laplacian);
|
||||
|
||||
}
|
||||
|
||||
void party(VisionState *s) {
|
||||
@@ -1255,7 +1268,7 @@ int main(int argc, char *argv[]) {
|
||||
signal(SIGINT, (sighandler_t)set_do_exit);
|
||||
signal(SIGTERM, (sighandler_t)set_do_exit);
|
||||
|
||||
VisionState state = {0};
|
||||
VisionState state = {};
|
||||
VisionState *s = &state;
|
||||
|
||||
clu_init();
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import json
|
||||
import signal
|
||||
import subprocess
|
||||
import time
|
||||
@@ -8,9 +7,7 @@ from PIL import Image
|
||||
from common.basedir import BASEDIR
|
||||
from common.params import Params
|
||||
from selfdrive.camerad.snapshot.visionipc import VisionIPC
|
||||
|
||||
with open(BASEDIR + "/selfdrive/controls/lib/alerts_offroad.json") as json_file:
|
||||
OFFROAD_ALERTS = json.load(json_file)
|
||||
from selfdrive.controls.lib.alertmanager import set_offroad_alert
|
||||
|
||||
|
||||
def jpeg_write(fn, dat):
|
||||
@@ -26,7 +23,7 @@ def snapshot():
|
||||
return None
|
||||
|
||||
params.put("IsTakingSnapshot", "1")
|
||||
params.put("Offroad_IsTakingSnapshot", json.dumps(OFFROAD_ALERTS["Offroad_IsTakingSnapshot"]))
|
||||
set_offroad_alert("Offroad_IsTakingSnapshot", True)
|
||||
time.sleep(2.0) # Give thermald time to read the param, or if just started give camerad time to start
|
||||
|
||||
# Check if camerad is already started
|
||||
@@ -64,7 +61,7 @@ def snapshot():
|
||||
proc.communicate()
|
||||
|
||||
params.put("IsTakingSnapshot", "0")
|
||||
params.delete("Offroad_IsTakingSnapshot")
|
||||
set_offroad_alert("Offroad_IsTakingSnapshot", False)
|
||||
return ret
|
||||
|
||||
|
||||
|
||||
@@ -40,8 +40,8 @@ def scale_tire_stiffness(mass, wheelbase, center_to_front, tire_stiffness_factor
|
||||
return tire_stiffness_front, tire_stiffness_rear
|
||||
|
||||
|
||||
def dbc_dict(pt_dbc, radar_dbc, chassis_dbc=None):
|
||||
return {'pt': pt_dbc, 'radar': radar_dbc, 'chassis': chassis_dbc}
|
||||
def dbc_dict(pt_dbc, radar_dbc, chassis_dbc=None, body_dbc=None):
|
||||
return {'pt': pt_dbc, 'radar': radar_dbc, 'chassis': chassis_dbc, 'body': body_dbc}
|
||||
|
||||
|
||||
def apply_std_steer_torque_limits(apply_torque, apply_torque_last, driver_torque, LIMITS):
|
||||
|
||||
@@ -30,6 +30,13 @@ def get_startup_event(car_recognized, controller_available):
|
||||
return event
|
||||
|
||||
|
||||
def get_one_can(logcan):
|
||||
while True:
|
||||
can = messaging.recv_one_retry(logcan)
|
||||
if len(can.can) > 0:
|
||||
return can
|
||||
|
||||
|
||||
def load_interfaces(brand_names):
|
||||
ret = {}
|
||||
for brand_name in brand_names:
|
||||
@@ -117,7 +124,7 @@ def fingerprint(logcan, sendcan, has_relay):
|
||||
done = False
|
||||
|
||||
while not done:
|
||||
a = messaging.get_one_can(logcan)
|
||||
a = get_one_can(logcan)
|
||||
|
||||
for can in a.can:
|
||||
# need to independently try to fingerprint both bus 0 and 1 to work
|
||||
|
||||
@@ -12,7 +12,6 @@ class CarController():
|
||||
self.prev_frame = -1
|
||||
self.hud_count = 0
|
||||
self.car_fingerprint = CP.carFingerprint
|
||||
self.alert_active = False
|
||||
self.gone_fast_yet = False
|
||||
self.steer_rate_limited = False
|
||||
|
||||
|
||||
@@ -103,6 +103,13 @@ class CarState(CarStateBase):
|
||||
("WHEEL_SPEEDS", 50),
|
||||
("STEERING", 100),
|
||||
("ACC_2", 50),
|
||||
("GEAR", 50),
|
||||
("ACCEL_GAS_134", 50),
|
||||
("DASHBOARD", 15),
|
||||
("STEERING_LEVERS", 10),
|
||||
("SEATBELT_STATUS", 2),
|
||||
("DOORS", 1),
|
||||
("TRACTION_BUTTON", 1),
|
||||
]
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, 0)
|
||||
@@ -115,6 +122,10 @@ class CarState(CarStateBase):
|
||||
("CAR_MODEL", "LKAS_HUD", -1),
|
||||
("LKAS_STATUS_OK", "LKAS_HEARTBIT", -1)
|
||||
]
|
||||
checks = []
|
||||
checks = [
|
||||
("LKAS_COMMAND", 100),
|
||||
("LKAS_HEARTBIT", 10),
|
||||
("LKAS_HUD", 4),
|
||||
]
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, 2)
|
||||
|
||||
@@ -14,8 +14,6 @@ class CarInterface(CarInterfaceBase):
|
||||
def get_params(candidate, fingerprint=None, has_relay=False, car_fw=None):
|
||||
if fingerprint is None:
|
||||
fingerprint = gen_empty_fingerprint()
|
||||
if car_fw is None:
|
||||
car_fw = []
|
||||
|
||||
ret = CarInterfaceBase.get_std_params(candidate, fingerprint, has_relay)
|
||||
ret.carName = "chrysler"
|
||||
@@ -78,8 +76,6 @@ class CarInterface(CarInterfaceBase):
|
||||
# speeds
|
||||
ret.steeringRateLimited = self.CC.steer_rate_limited if self.CC is not None else False
|
||||
|
||||
ret.buttonEvents = []
|
||||
|
||||
# events
|
||||
events = self.create_common_events(ret, extra_gears=[car.CarState.GearShifter.low],
|
||||
gas_resume_speed=2.)
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
from opendbc.can.parser import CANParser
|
||||
from cereal import car
|
||||
from selfdrive.car.interfaces import RadarInterfaceBase
|
||||
from selfdrive.car.chrysler.values import DBC
|
||||
|
||||
RADAR_MSGS_C = list(range(0x2c2, 0x2d4+2, 2)) # c_ messages 706,...,724
|
||||
RADAR_MSGS_D = list(range(0x2a2, 0x2b4+2, 2)) # d_ messages
|
||||
LAST_MSG = max(RADAR_MSGS_C + RADAR_MSGS_D)
|
||||
NUMBER_MSGS = len(RADAR_MSGS_C) + len(RADAR_MSGS_D)
|
||||
|
||||
def _create_radar_can_parser():
|
||||
dbc_f = 'chrysler_pacifica_2017_hybrid_private_fusion.dbc'
|
||||
def _create_radar_can_parser(car_fingerprint):
|
||||
msg_n = len(RADAR_MSGS_C)
|
||||
# list of [(signal name, message name or number, initial values), (...)]
|
||||
# [('RADAR_STATE', 1024, 0),
|
||||
@@ -37,7 +36,7 @@ def _create_radar_can_parser():
|
||||
[20]*msg_n + # 20Hz (0.05s)
|
||||
[20]*msg_n)) # 20Hz (0.05s)
|
||||
|
||||
return CANParser(os.path.splitext(dbc_f)[0], signals, checks, 1)
|
||||
return CANParser(DBC[car_fingerprint]['radar'], signals, checks, 1)
|
||||
|
||||
def _address_to_track(address):
|
||||
if address in RADAR_MSGS_C:
|
||||
@@ -49,7 +48,7 @@ def _address_to_track(address):
|
||||
class RadarInterface(RadarInterfaceBase):
|
||||
def __init__(self, CP):
|
||||
super().__init__(CP)
|
||||
self.rcp = _create_radar_can_parser()
|
||||
self.rcp = _create_radar_can_parser(CP.carFingerprint)
|
||||
self.updated_messages = set()
|
||||
self.trigger_msg = LAST_MSG
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ from selfdrive.car import dbc_dict
|
||||
from cereal import car
|
||||
Ecu = car.CarParams.Ecu
|
||||
|
||||
|
||||
class SteerLimitParams:
|
||||
STEER_MAX = 261 # 262 faults
|
||||
STEER_DELTA_UP = 3 # 3 is stock. 100 is fine. 200 is too much it seems
|
||||
@@ -82,32 +81,18 @@ FINGERPRINTS = {
|
||||
|
||||
|
||||
DBC = {
|
||||
CAR.PACIFICA_2017_HYBRID: dbc_dict(
|
||||
'chrysler_pacifica_2017_hybrid', # 'pt'
|
||||
'chrysler_pacifica_2017_hybrid_private_fusion'), # 'radar'
|
||||
CAR.PACIFICA_2018: dbc_dict( # Same DBC file works.
|
||||
'chrysler_pacifica_2017_hybrid', # 'pt'
|
||||
'chrysler_pacifica_2017_hybrid_private_fusion'), # 'radar'
|
||||
CAR.PACIFICA_2020: dbc_dict( # Same DBC file works.
|
||||
'chrysler_pacifica_2017_hybrid', # 'pt'
|
||||
'chrysler_pacifica_2017_hybrid_private_fusion'), # 'radar'
|
||||
CAR.PACIFICA_2018_HYBRID: dbc_dict( # Same DBC file works.
|
||||
'chrysler_pacifica_2017_hybrid', # 'pt'
|
||||
'chrysler_pacifica_2017_hybrid_private_fusion'), # 'radar'
|
||||
CAR.PACIFICA_2019_HYBRID: dbc_dict( # Same DBC file works.
|
||||
'chrysler_pacifica_2017_hybrid', # 'pt'
|
||||
'chrysler_pacifica_2017_hybrid_private_fusion'), # 'radar'
|
||||
CAR.JEEP_CHEROKEE: dbc_dict( # Same DBC file works.
|
||||
'chrysler_pacifica_2017_hybrid', # 'pt'
|
||||
'chrysler_pacifica_2017_hybrid_private_fusion'), # 'radar'
|
||||
CAR.JEEP_CHEROKEE_2019: dbc_dict( # Same DBC file works.
|
||||
'chrysler_pacifica_2017_hybrid', # 'pt'
|
||||
'chrysler_pacifica_2017_hybrid_private_fusion'), # 'radar'
|
||||
CAR.PACIFICA_2017_HYBRID: dbc_dict('chrysler_pacifica_2017_hybrid', 'chrysler_pacifica_2017_hybrid_private_fusion'),
|
||||
CAR.PACIFICA_2018: dbc_dict('chrysler_pacifica_2017_hybrid', 'chrysler_pacifica_2017_hybrid_private_fusion'),
|
||||
CAR.PACIFICA_2020: dbc_dict('chrysler_pacifica_2017_hybrid', 'chrysler_pacifica_2017_hybrid_private_fusion'),
|
||||
CAR.PACIFICA_2018_HYBRID: dbc_dict('chrysler_pacifica_2017_hybrid', 'chrysler_pacifica_2017_hybrid_private_fusion'),
|
||||
CAR.PACIFICA_2019_HYBRID: dbc_dict('chrysler_pacifica_2017_hybrid', 'chrysler_pacifica_2017_hybrid_private_fusion'),
|
||||
CAR.JEEP_CHEROKEE: dbc_dict('chrysler_pacifica_2017_hybrid', 'chrysler_pacifica_2017_hybrid_private_fusion'),
|
||||
CAR.JEEP_CHEROKEE_2019: dbc_dict('chrysler_pacifica_2017_hybrid', 'chrysler_pacifica_2017_hybrid_private_fusion'),
|
||||
}
|
||||
|
||||
STEER_THRESHOLD = 120
|
||||
|
||||
|
||||
ECU_FINGERPRINT = {
|
||||
Ecu.fwdCamera: [0x292], # lkas cmd
|
||||
Ecu.fwdCamera: [0x292], # lkas cmd
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class CarInterface(CarInterfaceBase):
|
||||
return float(accel) / 3.0
|
||||
|
||||
@staticmethod
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=[]): # pylint: disable=dangerous-default-value
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=None):
|
||||
ret = CarInterfaceBase.get_std_params(candidate, fingerprint, has_relay)
|
||||
ret.carName = "ford"
|
||||
ret.safetyModel = car.CarParams.SafetyModel.ford
|
||||
|
||||
@@ -8,14 +8,13 @@ from selfdrive.car.interfaces import RadarInterfaceBase
|
||||
RADAR_MSGS = list(range(0x500, 0x540))
|
||||
|
||||
def _create_radar_can_parser(car_fingerprint):
|
||||
dbc_f = DBC[car_fingerprint]['radar']
|
||||
msg_n = len(RADAR_MSGS)
|
||||
signals = list(zip(['X_Rel'] * msg_n + ['Angle'] * msg_n + ['V_Rel'] * msg_n,
|
||||
RADAR_MSGS * 3,
|
||||
[0] * msg_n + [0] * msg_n + [0] * msg_n))
|
||||
checks = list(zip(RADAR_MSGS, [20]*msg_n))
|
||||
|
||||
return CANParser(dbc_f, signals, checks, 1)
|
||||
return CANParser(DBC[car_fingerprint]['radar'], signals, checks, 1)
|
||||
|
||||
class RadarInterface(RadarInterfaceBase):
|
||||
def __init__(self, CP):
|
||||
|
||||
@@ -17,14 +17,14 @@ class CarInterface(CarInterfaceBase):
|
||||
return float(accel) / 4.0
|
||||
|
||||
@staticmethod
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=[]): # pylint: disable=dangerous-default-value
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=None):
|
||||
ret = CarInterfaceBase.get_std_params(candidate, fingerprint, has_relay)
|
||||
ret.carName = "gm"
|
||||
ret.safetyModel = car.CarParams.SafetyModel.gm # default to gm
|
||||
ret.safetyModel = car.CarParams.SafetyModel.gm
|
||||
ret.enableCruise = False # stock cruise control is kept off
|
||||
ret.lateralTuning.init('pid')
|
||||
|
||||
# GM port is considered a community feature, since it disables AEB;
|
||||
# GM port is a community feature
|
||||
# TODO: make a port that uses a car harness and it only intercepts the camera
|
||||
ret.communityFeature = True
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import print_function
|
||||
import math
|
||||
import time
|
||||
from cereal import car
|
||||
from opendbc.can.parser import CANParser
|
||||
from selfdrive.car.gm.values import DBC, CAR, CanBus
|
||||
@@ -17,30 +16,28 @@ NUM_SLOTS = 20
|
||||
LAST_RADAR_MSG = RADAR_HEADER_MSG + NUM_SLOTS
|
||||
|
||||
def create_radar_can_parser(car_fingerprint):
|
||||
|
||||
dbc_f = DBC[car_fingerprint]['radar']
|
||||
if car_fingerprint in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
|
||||
# C1A-ARS3-A by Continental
|
||||
radar_targets = list(range(SLOT_1_MSG, SLOT_1_MSG + NUM_SLOTS))
|
||||
signals = list(zip(['FLRRNumValidTargets',
|
||||
'FLRRSnsrBlckd', 'FLRRYawRtPlsblityFlt',
|
||||
'FLRRHWFltPrsntInt', 'FLRRAntTngFltPrsnt',
|
||||
'FLRRAlgnFltPrsnt', 'FLRRSnstvFltPrsntInt'] +
|
||||
['TrkRange'] * NUM_SLOTS + ['TrkRangeRate'] * NUM_SLOTS +
|
||||
['TrkRangeAccel'] * NUM_SLOTS + ['TrkAzimuth'] * NUM_SLOTS +
|
||||
['TrkWidth'] * NUM_SLOTS + ['TrkObjectID'] * NUM_SLOTS,
|
||||
[RADAR_HEADER_MSG] * 7 + radar_targets * 6,
|
||||
[0] * 7 +
|
||||
[0.0] * NUM_SLOTS + [0.0] * NUM_SLOTS +
|
||||
[0.0] * NUM_SLOTS + [0.0] * NUM_SLOTS +
|
||||
[0.0] * NUM_SLOTS + [0] * NUM_SLOTS))
|
||||
|
||||
checks = []
|
||||
|
||||
return CANParser(dbc_f, signals, checks, CanBus.OBSTACLE)
|
||||
else:
|
||||
if car_fingerprint not in (CAR.VOLT, CAR.MALIBU, CAR.HOLDEN_ASTRA, CAR.ACADIA, CAR.CADILLAC_ATS):
|
||||
return None
|
||||
|
||||
# C1A-ARS3-A by Continental
|
||||
radar_targets = list(range(SLOT_1_MSG, SLOT_1_MSG + NUM_SLOTS))
|
||||
signals = list(zip(['FLRRNumValidTargets',
|
||||
'FLRRSnsrBlckd', 'FLRRYawRtPlsblityFlt',
|
||||
'FLRRHWFltPrsntInt', 'FLRRAntTngFltPrsnt',
|
||||
'FLRRAlgnFltPrsnt', 'FLRRSnstvFltPrsntInt'] +
|
||||
['TrkRange'] * NUM_SLOTS + ['TrkRangeRate'] * NUM_SLOTS +
|
||||
['TrkRangeAccel'] * NUM_SLOTS + ['TrkAzimuth'] * NUM_SLOTS +
|
||||
['TrkWidth'] * NUM_SLOTS + ['TrkObjectID'] * NUM_SLOTS,
|
||||
[RADAR_HEADER_MSG] * 7 + radar_targets * 6,
|
||||
[0] * 7 +
|
||||
[0.0] * NUM_SLOTS + [0.0] * NUM_SLOTS +
|
||||
[0.0] * NUM_SLOTS + [0.0] * NUM_SLOTS +
|
||||
[0.0] * NUM_SLOTS + [0] * NUM_SLOTS))
|
||||
|
||||
checks = []
|
||||
|
||||
return CANParser(DBC[car_fingerprint]['radar'], signals, checks, CanBus.OBSTACLE)
|
||||
|
||||
class RadarInterface(RadarInterfaceBase):
|
||||
def __init__(self, CP):
|
||||
super().__init__(CP)
|
||||
@@ -53,8 +50,7 @@ class RadarInterface(RadarInterfaceBase):
|
||||
|
||||
def update(self, can_strings):
|
||||
if self.rcp is None:
|
||||
time.sleep(self.radar_ts) # nothing to do
|
||||
return car.RadarData.new_message()
|
||||
return super().update(None)
|
||||
|
||||
vls = self.rcp.update_strings(can_strings)
|
||||
self.updated_messages.update(vls)
|
||||
|
||||
@@ -107,7 +107,7 @@ def get_can_signals(CP):
|
||||
signals += [("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK", 1)]
|
||||
elif CP.carFingerprint == CAR.ODYSSEY_CHN:
|
||||
signals += [("DRIVERS_DOOR_OPEN", "SCM_BUTTONS", 1)]
|
||||
elif CP.carFingerprint == CAR.HRV:
|
||||
elif CP.carFingerprint in [CAR.HRV, CAR.JADE]:
|
||||
signals += [("DRIVERS_DOOR_OPEN", "SCM_BUTTONS", 1),
|
||||
("WHEELS_MOVING", "STANDSTILL", 1)]
|
||||
else:
|
||||
@@ -132,11 +132,10 @@ def get_can_signals(CP):
|
||||
signals += [("CAR_GAS", "GAS_PEDAL_2", 0),
|
||||
("MAIN_ON", "SCM_BUTTONS", 0),
|
||||
("BRAKE_HOLD_ACTIVE", "VSA_STATUS", 0)]
|
||||
elif CP.carFingerprint == CAR.HRV:
|
||||
elif CP.carFingerprint in [CAR.HRV, CAR.JADE]:
|
||||
signals += [("CAR_GAS", "GAS_PEDAL", 0),
|
||||
("MAIN_ON", "SCM_BUTTONS", 0),
|
||||
("BRAKE_HOLD_ACTIVE", "VSA_STATUS", 0)]
|
||||
|
||||
elif CP.carFingerprint == CAR.ODYSSEY:
|
||||
signals += [("MAIN_ON", "SCM_FEEDBACK", 0),
|
||||
("EPB_STATE", "EPB_STATUS", 0)]
|
||||
@@ -175,7 +174,7 @@ class CarState(CarStateBase):
|
||||
#dp
|
||||
self.lkMode = True
|
||||
|
||||
def update(self, cp, cp_cam):
|
||||
def update(self, cp, cp_cam, cp_body):
|
||||
ret = car.CarState.new_message()
|
||||
|
||||
# car params
|
||||
@@ -194,7 +193,7 @@ class CarState(CarStateBase):
|
||||
elif self.CP.carFingerprint == CAR.ODYSSEY_CHN:
|
||||
ret.standstill = cp.vl["ENGINE_DATA"]['XMISSION_SPEED'] < 0.1
|
||||
ret.doorOpen = bool(cp.vl["SCM_BUTTONS"]['DRIVERS_DOOR_OPEN'])
|
||||
elif self.CP.carFingerprint == CAR.HRV:
|
||||
elif self.CP.carFingerprint in [CAR.HRV, CAR.JADE]:
|
||||
ret.doorOpen = bool(cp.vl["SCM_BUTTONS"]['DRIVERS_DOOR_OPEN'])
|
||||
else:
|
||||
ret.standstill = not cp.vl["STANDSTILL"]['WHEELS_MOVING']
|
||||
@@ -261,7 +260,7 @@ class CarState(CarStateBase):
|
||||
|
||||
self.pedal_gas = cp.vl["POWERTRAIN_DATA"]['PEDAL_GAS']
|
||||
# crv doesn't include cruise control
|
||||
if self.CP.carFingerprint in (CAR.CRV, CAR.CRV_EU, CAR.HRV, CAR.ODYSSEY, CAR.ACURA_RDX, CAR.RIDGELINE, CAR.PILOT_2019, CAR.ODYSSEY_CHN):
|
||||
if self.CP.carFingerprint in (CAR.CRV, CAR.CRV_EU, CAR.HRV, CAR.JADE, CAR.ODYSSEY, CAR.ACURA_RDX, CAR.RIDGELINE, CAR.PILOT_2019, CAR.ODYSSEY_CHN):
|
||||
ret.gas = self.pedal_gas / 256.
|
||||
else:
|
||||
ret.gas = cp.vl["GAS_PEDAL_2"]['CAR_GAS'] / 256.
|
||||
@@ -333,6 +332,12 @@ class CarState(CarStateBase):
|
||||
self.stock_hud = cp_cam.vl["ACC_HUD"]
|
||||
self.stock_brake = cp_cam.vl["BRAKE_COMMAND"]
|
||||
|
||||
if self.CP.carFingerprint in (CAR.CRV_5G, ):
|
||||
# BSM messages are on B-CAN, requires a panda forwarding B-CAN messages to CAN 0
|
||||
# more info here: https://github.com/commaai/openpilot/pull/1867
|
||||
ret.leftBlindspot = cp_body.vl["BSM_STATUS_LEFT"]['BSM_ALERT'] == 1
|
||||
ret.rightBlindspot = cp_body.vl["BSM_STATUS_RIGHT"]['BSM_ALERT'] == 1
|
||||
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
@@ -365,3 +370,17 @@ class CarState(CarStateBase):
|
||||
|
||||
bus_cam = 1 if CP.carFingerprint in HONDA_BOSCH and not CP.isPandaBlack else 2
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, bus_cam)
|
||||
|
||||
@staticmethod
|
||||
def get_body_can_parser(CP):
|
||||
signals = []
|
||||
checks = []
|
||||
|
||||
if CP.carFingerprint == CAR.CRV_5G:
|
||||
signals += [("BSM_ALERT", "BSM_STATUS_RIGHT", 0),
|
||||
("BSM_ALERT", "BSM_STATUS_LEFT", 0)]
|
||||
|
||||
bus_body = 0 # B-CAN is forwarded to ACC-CAN radar side (CAN 0 on fake ethernet port)
|
||||
return CANParser(DBC[CP.carFingerprint]['body'], signals, checks, bus_body)
|
||||
|
||||
return None
|
||||
|
||||
@@ -84,7 +84,7 @@ class CarInterface(CarInterfaceBase):
|
||||
self.compute_gb = compute_gb_honda
|
||||
|
||||
@staticmethod
|
||||
def compute_gb(accel, speed):
|
||||
def compute_gb(accel, speed): # pylint: disable=method-hidden
|
||||
raise NotImplementedError
|
||||
|
||||
@staticmethod
|
||||
@@ -191,9 +191,9 @@ class CarInterface(CarInterfaceBase):
|
||||
tire_stiffness_factor = 1.
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]]
|
||||
ret.longitudinalTuning.kpBP = [0., 5., 35.]
|
||||
ret.longitudinalTuning.kpV = [3.6, 2.4, 1.5]
|
||||
ret.longitudinalTuning.kpV = [1.2, 0.8, 0.5]
|
||||
ret.longitudinalTuning.kiBP = [0., 35.]
|
||||
ret.longitudinalTuning.kiV = [0.54, 0.36]
|
||||
ret.longitudinalTuning.kiV = [0.18, 0.12]
|
||||
|
||||
elif candidate in (CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH):
|
||||
stop_and_go = True
|
||||
@@ -308,6 +308,20 @@ class CarInterface(CarInterfaceBase):
|
||||
ret.longitudinalTuning.kiBP = [0., 35.]
|
||||
ret.longitudinalTuning.kiV = [0.18, 0.12]
|
||||
|
||||
elif candidate == CAR.JADE:
|
||||
stop_and_go = False
|
||||
ret.mass = 1557. + STD_CARGO_KG
|
||||
ret.wheelbase = 2.76
|
||||
ret.centerToFront = ret.wheelbase * 0.41
|
||||
ret.steerRatio = 15.2
|
||||
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]]
|
||||
tire_stiffness_factor = 0.5
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.16], [0.025]]
|
||||
ret.longitudinalTuning.kpBP = [0., 5., 35.]
|
||||
ret.longitudinalTuning.kpV = [1.2, 0.8, 0.5]
|
||||
ret.longitudinalTuning.kiBP = [0., 35.]
|
||||
ret.longitudinalTuning.kiV = [0.18, 0.12]
|
||||
|
||||
elif candidate == CAR.ACURA_RDX:
|
||||
stop_and_go = False
|
||||
ret.mass = 3935. * CV.LB_TO_KG + STD_CARGO_KG
|
||||
@@ -431,12 +445,14 @@ class CarInterface(CarInterfaceBase):
|
||||
# ******************* do can recv *******************
|
||||
self.cp.update_strings(can_strings)
|
||||
self.cp_cam.update_strings(can_strings)
|
||||
if self.cp_body:
|
||||
self.cp_body.update_strings(can_strings)
|
||||
|
||||
ret = self.CS.update(self.cp, self.cp_cam)
|
||||
ret = self.CS.update(self.cp, self.cp_cam, self.cp_body)
|
||||
# dp
|
||||
self.dragonconf = dragonconf
|
||||
ret.cruiseState.enabled = common_interface_atl(ret, dragonconf.dpAtl)
|
||||
ret.canValid = self.cp.can_valid and self.cp_cam.can_valid
|
||||
ret.canValid = self.cp.can_valid and self.cp_cam.can_valid and (self.cp_body is None or self.cp_body.can_valid)
|
||||
ret.yawRate = self.VM.yaw_rate(ret.steeringAngle * CV.DEG_TO_RAD, ret.vEgo)
|
||||
# FIXME: read sendcan for brakelights
|
||||
brakelights_threshold = 0.02 if self.CS.CP.carFingerprint == CAR.CIVIC else 0.1
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import time
|
||||
from cereal import car
|
||||
from opendbc.can.parser import CANParser
|
||||
from selfdrive.car.interfaces import RadarInterfaceBase
|
||||
from selfdrive.car.honda.values import DBC
|
||||
|
||||
def _create_nidec_can_parser():
|
||||
dbc_f = 'acura_ilx_2016_nidec.dbc'
|
||||
def _create_nidec_can_parser(car_fingerprint):
|
||||
radar_messages = [0x400] + list(range(0x430, 0x43A)) + list(range(0x440, 0x446))
|
||||
signals = list(zip(['RADAR_STATE'] +
|
||||
['LONG_DIST'] * 16 + ['NEW_TRACK'] * 16 + ['LAT_DIST'] * 16 +
|
||||
@@ -14,8 +12,7 @@ def _create_nidec_can_parser():
|
||||
[0x400] + radar_messages[1:] * 4,
|
||||
[0] + [255] * 16 + [1] * 16 + [0] * 16 + [0] * 16))
|
||||
checks = list(zip([0x445], [20]))
|
||||
fn = os.path.splitext(dbc_f)[0].encode('utf8')
|
||||
return CANParser(fn, signals, checks, 1)
|
||||
return CANParser(DBC[car_fingerprint]['radar'], signals, checks, 1)
|
||||
|
||||
|
||||
class RadarInterface(RadarInterfaceBase):
|
||||
@@ -30,7 +27,10 @@ class RadarInterface(RadarInterfaceBase):
|
||||
self.delay = int(round(0.1 / CP.radarTimeStep)) # 0.1s delay of radar
|
||||
|
||||
# Nidec
|
||||
self.rcp = _create_nidec_can_parser()
|
||||
if self.radar_off_can:
|
||||
self.rcp = None
|
||||
else:
|
||||
self.rcp = _create_nidec_can_parser(CP.carFingerprint)
|
||||
self.trigger_msg = 0x445
|
||||
self.updated_messages = set()
|
||||
|
||||
@@ -38,9 +38,7 @@ class RadarInterface(RadarInterfaceBase):
|
||||
# in Bosch radar and we are only steering for now, so sleep 0.05s to keep
|
||||
# radard at 20Hz and return no points
|
||||
if self.radar_off_can:
|
||||
if 'NO_RADAR_SLEEP' not in os.environ:
|
||||
time.sleep(self.radar_ts)
|
||||
return car.RadarData.new_message()
|
||||
return super().update(None)
|
||||
|
||||
vls = self.rcp.update_strings(can_strings)
|
||||
self.updated_messages.update(vls)
|
||||
|
||||
@@ -37,6 +37,7 @@ class CAR:
|
||||
CRV_HYBRID = "HONDA CR-V 2019 HYBRID"
|
||||
FIT = "HONDA FIT 2018 EX"
|
||||
HRV = "HONDA HRV 2019 TOURING"
|
||||
JADE = "HONDA JADE 2017"
|
||||
ODYSSEY = "HONDA ODYSSEY 2018 EX-L"
|
||||
ODYSSEY_CHN = "HONDA ODYSSEY 2019 EXCLUSIVE CHN"
|
||||
ACURA_RDX = "ACURA RDX 2018 ACURAWATCH PLUS"
|
||||
@@ -107,6 +108,9 @@ FINGERPRINTS = {
|
||||
CAR.HRV: [{
|
||||
57: 3, 145: 8, 228: 5, 316: 8, 340: 8, 342: 6, 344: 8, 380: 8, 399: 7, 401: 8, 420: 8, 422: 8, 423: 2, 426: 8, 427: 3, 432: 7, 441: 5, 450: 8, 464: 8, 474: 8, 490: 8, 493: 3, 506: 8, 538: 5, 578: 2, 597: 8, 660: 8, 661: 4, 773: 7, 777: 8, 780: 8, 804: 8, 808: 8, 829: 5, 862: 8, 882: 2, 884: 7, 892: 8, 929: 8, 985: 3, 1030: 5, 1033: 5, 1108: 8, 1137: 8, 1348: 5, 1361: 5, 1365: 5, 1600: 5, 1601: 8, 1618: 5
|
||||
}],
|
||||
CAR.JADE: [{
|
||||
57: 3, 145: 8, 228: 5, 304: 8, 342: 6, 344: 8, 380: 8, 398: 3, 399: 7, 401: 8, 420: 8, 422: 8, 428: 8, 432: 7, 464: 8, 487: 4, 490: 8, 506: 8, 507: 1, 597: 8, 660: 8, 661: 4, 773: 7, 777: 8, 780: 8, 804: 8, 808: 8, 829: 5, 862: 8, 884: 7, 892: 8, 923: 2, 929: 4, 1057: 5, 1365: 5, 1424: 5, 1600: 5, 1601: 8
|
||||
}],
|
||||
# 2018 Odyssey w/ Added Comma Pedal Support (512L & 513L)
|
||||
CAR.ODYSSEY: [{
|
||||
57: 3, 148: 8, 228: 5, 229: 4, 316: 8, 342: 6, 344: 8, 380: 8, 399: 7, 411: 5, 419: 8, 420: 8, 427: 3, 432: 7, 450: 8, 463: 8, 464: 8, 476: 4, 490: 8, 506: 8, 512: 6, 513: 6, 542: 7, 545: 6, 597: 8, 662: 4, 773: 7, 777: 8, 780: 8, 795: 8, 800: 8, 804: 8, 806: 8, 808: 8, 817: 4, 819: 7, 821: 5, 825: 4, 829: 5, 837: 5, 856: 7, 862: 8, 871: 8, 881: 8, 882: 4, 884: 8, 891: 8, 892: 8, 905: 8, 923: 2, 927: 8, 929: 8, 963: 8, 965: 8, 966: 8, 967: 8, 983: 8, 985: 3, 1029: 8, 1036: 8, 1052: 8, 1064: 7, 1088: 8, 1089: 8, 1092: 1, 1108: 8, 1110: 8, 1125: 8, 1296: 8, 1302: 8, 1600: 5, 1601: 8, 1612: 5, 1613: 5, 1614: 5, 1615: 8, 1616: 5, 1619: 5, 1623: 5, 1668: 5
|
||||
@@ -906,10 +910,23 @@ FW_VERSIONS = {
|
||||
],
|
||||
(Ecu.fwdCamera, 0x18dab5f1, None): [
|
||||
b'36161-TXM-A050\x00\x00',
|
||||
b'36161-TXM-A060\x00\x00',
|
||||
],
|
||||
(Ecu.srs, 0x18da53f1, None): [
|
||||
b'77959-TXM-A230\x00\x00',
|
||||
],
|
||||
(Ecu.vsa, 0x18da28f1, None): [
|
||||
b'57114-TXM-A040\x00\x00',
|
||||
],
|
||||
(Ecu.shiftByWire, 0x18da0bf1, None): [
|
||||
b'54008-TWA-A910\x00\x00',
|
||||
],
|
||||
(Ecu.gateway, 0x18daeff1, None): [
|
||||
b'38897-TXM-A020\x00\x00',
|
||||
],
|
||||
(Ecu.combinationMeter, 0x18da60f1, None): [
|
||||
b'78109-TXM-A020\x00\x00',
|
||||
],
|
||||
},
|
||||
CAR.HRV: {
|
||||
(Ecu.gateway, 0x18daeff1, None): [b'38897-T7A-A010\x00\x00'],
|
||||
@@ -930,11 +947,12 @@ DBC = {
|
||||
CAR.CIVIC_BOSCH: dbc_dict('honda_civic_hatchback_ex_2017_can_generated', None),
|
||||
CAR.CIVIC_BOSCH_DIESEL: dbc_dict('honda_civic_sedan_16_diesel_2019_can_generated', None),
|
||||
CAR.CRV: dbc_dict('honda_crv_touring_2016_can_generated', 'acura_ilx_2016_nidec'),
|
||||
CAR.CRV_5G: dbc_dict('honda_crv_ex_2017_can_generated', None),
|
||||
CAR.CRV_5G: dbc_dict('honda_crv_ex_2017_can_generated', None, body_dbc='honda_crv_ex_2017_body_generated'),
|
||||
CAR.CRV_EU: dbc_dict('honda_crv_executive_2016_can_generated', 'acura_ilx_2016_nidec'),
|
||||
CAR.CRV_HYBRID: dbc_dict('honda_crv_hybrid_2019_can_generated', None),
|
||||
CAR.FIT: dbc_dict('honda_fit_ex_2018_can_generated', 'acura_ilx_2016_nidec'),
|
||||
CAR.HRV: dbc_dict('honda_hrv_touring_2019_can_generated', 'acura_ilx_2016_nidec'),
|
||||
CAR.JADE: dbc_dict('honda_hrv_touring_2019_can_generated', 'acura_ilx_2016_nidec'),
|
||||
CAR.ODYSSEY: dbc_dict('honda_odyssey_exl_2018_generated', 'acura_ilx_2016_nidec'),
|
||||
CAR.ODYSSEY_CHN: dbc_dict('honda_odyssey_extreme_edition_2018_china_can_generated', 'acura_ilx_2016_nidec'),
|
||||
CAR.PILOT: dbc_dict('honda_pilot_touring_2017_can_generated', 'acura_ilx_2016_nidec'),
|
||||
@@ -958,6 +976,7 @@ STEER_THRESHOLD = {
|
||||
CAR.CRV_HYBRID: 1200,
|
||||
CAR.FIT: 1200,
|
||||
CAR.HRV: 1200,
|
||||
CAR.JADE: 1200,
|
||||
CAR.ODYSSEY: 1200,
|
||||
CAR.ODYSSEY_CHN: 1200,
|
||||
CAR.PILOT: 1200,
|
||||
@@ -981,6 +1000,7 @@ SPEED_FACTOR = {
|
||||
CAR.CRV_HYBRID: 1.025,
|
||||
CAR.FIT: 1.,
|
||||
CAR.HRV: 1.025,
|
||||
CAR.JADE: 1.025,
|
||||
CAR.ODYSSEY: 1.,
|
||||
CAR.ODYSSEY_CHN: 1.,
|
||||
CAR.PILOT: 1.,
|
||||
@@ -995,4 +1015,4 @@ ECU_FINGERPRINT = {
|
||||
Ecu.fwdCamera: [0xE4, 0x194], # steer torque cmd
|
||||
}
|
||||
|
||||
HONDA_BOSCH = [CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_5G, CAR.CRV_HYBRID, CAR.INSIGHT]
|
||||
HONDA_BOSCH = set([CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_5G, CAR.CRV_HYBRID, CAR.INSIGHT])
|
||||
|
||||
@@ -44,8 +44,7 @@ class CarState(CarStateBase):
|
||||
ret.cruiseState.standstill = cp.vl["SCC11"]['SCCInfoDisplay'] == 4.
|
||||
|
||||
if ret.cruiseState.enabled:
|
||||
is_set_speed_in_mph = int(cp.vl["CLU11"]["CF_Clu_SPEED_UNIT"])
|
||||
speed_conv = CV.MPH_TO_MS if is_set_speed_in_mph else CV.KPH_TO_MS
|
||||
speed_conv = CV.MPH_TO_MS if cp.vl["CLU11"]["CF_Clu_SPEED_UNIT"] else CV.KPH_TO_MS
|
||||
ret.cruiseState.speed = cp.vl["SCC11"]['VSetDis'] * speed_conv
|
||||
else:
|
||||
ret.cruiseState.speed = 0
|
||||
@@ -285,7 +284,7 @@ class CarState(CarStateBase):
|
||||
|
||||
signals = [
|
||||
# sig_name, sig_address, default
|
||||
("CF_Lkas_Bca_R", "LKAS11", 0),
|
||||
("CF_Lkas_LdwsActivemode", "LKAS11", 0),
|
||||
("CF_Lkas_LdwsSysState", "LKAS11", 0),
|
||||
("CF_Lkas_SysWarning", "LKAS11", 0),
|
||||
("CF_Lkas_LdwsLHWarning", "LKAS11", 0),
|
||||
@@ -302,6 +301,8 @@ class CarState(CarStateBase):
|
||||
("CF_Lkas_LdwsOpt_USM", "LKAS11", 0)
|
||||
]
|
||||
|
||||
checks = []
|
||||
checks = [
|
||||
("LKAS11", 100)
|
||||
]
|
||||
|
||||
return CANParser(DBC[CP.carFingerprint]['pt'], signals, checks, 2)
|
||||
|
||||
@@ -20,7 +20,7 @@ def create_lkas11(packer, frame, car_fingerprint, apply_steer, steer_req,
|
||||
values["CF_Lkas_Chksum"] = 0
|
||||
|
||||
if car_fingerprint in [CAR.SONATA, CAR.PALISADE]:
|
||||
values["CF_Lkas_Bca_R"] = int(left_lane) + (int(right_lane) << 1)
|
||||
values["CF_Lkas_LdwsActivemode"] = int(left_lane) + (int(right_lane) << 1)
|
||||
values["CF_Lkas_LdwsOpt_USM"] = 2
|
||||
|
||||
# FcwOpt_USM 5 = Orange blinking car + lanes
|
||||
@@ -40,9 +40,9 @@ def create_lkas11(packer, frame, car_fingerprint, apply_steer, steer_req,
|
||||
elif car_fingerprint == CAR.HYUNDAI_GENESIS:
|
||||
# This field is actually LdwsActivemode
|
||||
# Genesis and Optima fault when forwarding while engaged
|
||||
values["CF_Lkas_Bca_R"] = 2
|
||||
values["CF_Lkas_LdwsActivemode"] = 2
|
||||
elif car_fingerprint == CAR.KIA_OPTIMA:
|
||||
values["CF_Lkas_Bca_R"] = 0
|
||||
values["CF_Lkas_LdwsActivemode"] = 0
|
||||
|
||||
dat = packer.make_can_msg("LKAS11", 0, values)[2]
|
||||
|
||||
|
||||
@@ -84,6 +84,13 @@ class CarInterface(CarInterfaceBase):
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.16], [0.01]]
|
||||
ret.minSteerSpeed = 60 * CV.KPH_TO_MS
|
||||
elif candidate == CAR.GENESIS_G70:
|
||||
ret.lateralTuning.pid.kf = 0.00005
|
||||
ret.mass = 1640. + STD_CARGO_KG
|
||||
ret.wheelbase = 2.84
|
||||
ret.steerRatio = 16.5
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.16], [0.01]]
|
||||
elif candidate == CAR.GENESIS_G80:
|
||||
ret.lateralTuning.pid.kf = 0.00005
|
||||
ret.mass = 2060. + STD_CARGO_KG
|
||||
@@ -113,10 +120,10 @@ class CarInterface(CarInterfaceBase):
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
|
||||
elif candidate == CAR.KONA:
|
||||
ret.lateralTuning.pid.kf = 0.00006
|
||||
ret.lateralTuning.pid.kf = 0.00005
|
||||
ret.mass = 1275. + STD_CARGO_KG
|
||||
ret.wheelbase = 2.7
|
||||
ret.steerRatio = 13.73 # Spec
|
||||
ret.steerRatio = 13.73 * 1.15 # Spec
|
||||
tire_stiffness_factor = 0.385
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
|
||||
@@ -145,12 +152,21 @@ class CarInterface(CarInterfaceBase):
|
||||
tire_stiffness_factor = 0.5
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
|
||||
elif candidate == CAR.VELOSTER:
|
||||
ret.lateralTuning.pid.kf = 0.00005
|
||||
ret.mass = 3558. * CV.LB_TO_KG
|
||||
ret.wheelbase = 2.80
|
||||
ret.steerRatio = 13.75 * 1.15
|
||||
tire_stiffness_factor = 0.5
|
||||
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
|
||||
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
|
||||
|
||||
# dp
|
||||
ret = common_interface_get_params_lqr(ret)
|
||||
|
||||
# these cars require a special panda safety mode due to missing counters and checksums in the messages
|
||||
if candidate in [CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_LTD, CAR.IONIQ, CAR.KONA_EV]:
|
||||
if candidate in [CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_LTD, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_SORENTO, CAR.SONATA_2019,
|
||||
CAR.KIA_OPTIMA, CAR.VELOSTER, CAR.KIA_STINGER, CAR.GENESIS_G70]:
|
||||
ret.safetyModel = car.CarParams.SafetyModel.hyundaiLegacy
|
||||
|
||||
ret.centerToFront = ret.wheelbase * 0.4
|
||||
@@ -178,9 +194,6 @@ class CarInterface(CarInterfaceBase):
|
||||
ret.cruiseState.enabled = common_interface_atl(ret, dragonconf.dpAtl)
|
||||
ret.canValid = self.cp.can_valid and self.cp_cam.can_valid
|
||||
|
||||
# TODO: button presses
|
||||
ret.buttonEvents = []
|
||||
|
||||
events = self.create_common_events(ret)
|
||||
#TODO: addd abs(self.CS.angle_steers) > 90 to 'steerTempUnavailable' event
|
||||
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import time
|
||||
from cereal import car
|
||||
from opendbc.can.parser import CANParser
|
||||
from selfdrive.car.interfaces import RadarInterfaceBase
|
||||
@@ -33,10 +31,7 @@ class RadarInterface(RadarInterfaceBase):
|
||||
|
||||
def update(self, can_strings):
|
||||
if self.radar_off_can:
|
||||
if 'NO_RADAR_SLEEP' not in os.environ:
|
||||
time.sleep(0.05) # radard runs on RI updates
|
||||
|
||||
return car.RadarData.new_message()
|
||||
return super().update(None)
|
||||
|
||||
vls = self.rcp.update_strings(can_strings)
|
||||
self.updated_messages.update(vls)
|
||||
|
||||
@@ -17,6 +17,7 @@ class SteerLimitParams:
|
||||
class CAR:
|
||||
ELANTRA = "HYUNDAI ELANTRA LIMITED ULTIMATE 2017"
|
||||
ELANTRA_GT_I30 = "HYUNDAI I30 N LINE 2019 & GT 2018 DCT"
|
||||
GENESIS_G70 = "GENESIS G70 2018"
|
||||
GENESIS_G80 = "GENESIS G80 2017"
|
||||
GENESIS_G90 = "GENESIS G90 2017"
|
||||
HYUNDAI_GENESIS = "HYUNDAI GENESIS 2015-2016"
|
||||
@@ -27,13 +28,13 @@ class CAR:
|
||||
KIA_OPTIMA_H = "KIA OPTIMA HYBRID 2017 & SPORTS 2019"
|
||||
KIA_SORENTO = "KIA SORENTO GT LINE 2018"
|
||||
KIA_STINGER = "KIA STINGER GT2 2018"
|
||||
KONA = "HYUNDAI KONA 2019"
|
||||
KONA = "HYUNDAI KONA 2020"
|
||||
KONA_EV = "HYUNDAI KONA ELECTRIC 2019"
|
||||
SANTA_FE = "HYUNDAI SANTA FE LIMITED 2019"
|
||||
SANTA_FE_1 = "HYUNDAI SANTA FE has no scc"
|
||||
SONATA = "HYUNDAI SONATA 2020"
|
||||
SONATA_2019 = "HYUNDAI SONATA 2019"
|
||||
PALISADE = "HYUNDAI PALISADE 2020"
|
||||
VELOSTER = "HYUNDAI VELOSTER 2019"
|
||||
|
||||
|
||||
class Buttons:
|
||||
@@ -85,20 +86,18 @@ FINGERPRINTS = {
|
||||
CAR.SONATA_2019: [
|
||||
{66: 8, 67: 8, 68: 8, 127: 8, 273: 8, 274: 8, 275: 8, 339: 8, 356: 4, 399: 8, 447: 8, 512: 6, 544: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1253: 8, 1254: 8, 1255: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1314: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1397: 8, 1407: 8, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2008: 8, 2009: 8, 2012: 8, 2013: 8, 2014: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8},
|
||||
],
|
||||
CAR.KIA_OPTIMA: [
|
||||
{
|
||||
64: 8, 66: 8, 67: 8, 68: 8, 127: 8, 273: 8, 274: 8, 275: 8, 339: 8, 356: 4, 399: 8, 447: 8, 512: 6, 544: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 6, 909: 8, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1186: 2, 1191: 2, 1253: 8, 1254: 8, 1255: 8, 1265: 4, 1280: 1, 1282: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1407: 8, 1414: 3, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 1952: 8, 1960: 8, 1988: 8, 1996: 8, 2001: 8, 2004: 8, 2008: 8, 2009: 8, 2012: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8
|
||||
},
|
||||
{
|
||||
64: 8, 66: 8, 67: 8, 68: 8, 127: 8, 128: 8, 129: 8, 273: 8, 274: 8, 275: 8, 339: 8, 354: 3, 356: 4, 399: 8, 512: 6, 544: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 897: 8, 899: 8, 902: 8, 903: 6, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1265: 4, 1268: 8, 1280: 1, 1282: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1356: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1491: 8, 1492: 8
|
||||
},
|
||||
],
|
||||
CAR.KIA_OPTIMA: [{
|
||||
64: 8, 66: 8, 67: 8, 68: 8, 127: 8, 128: 8, 129: 8, 273: 8, 274: 8, 275: 8, 339: 8, 354: 3, 356: 4, 399: 8, 447: 8, 512: 6, 544: 8, 558: 8, 593: 8, 608: 8, 640: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 6, 909: 8, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1186: 2, 1191: 2, 1253: 8, 1254: 8, 1255: 8, 1265: 4, 1268: 8, 1280: 1, 1282: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1356: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1407: 8, 1414: 3, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1492: 8, 1530: 8, 1532: 5, 1792: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 1996: 8, 2000: 8, 2001: 8, 2004: 8, 2008: 8, 2009: 8, 2012: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8
|
||||
}],
|
||||
CAR.KIA_SORENTO: [{
|
||||
67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1384: 8, 1407: 8, 1411: 8, 1419: 8, 1425: 2, 1427: 6, 1444: 8, 1456: 4, 1470: 8, 1489: 1
|
||||
}],
|
||||
CAR.KIA_STINGER: [{
|
||||
67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 359: 8, 544: 8, 576: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 4, 1379: 8, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1456: 4, 1470: 8
|
||||
}],
|
||||
CAR.GENESIS_G70: [{
|
||||
67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 544: 8, 576: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832:8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1168: 7, 1170: 8, 1173:8, 1184: 8, 1186: 2, 1191: 2, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1379: 8, 1384: 8, 1407: 8, 1419:8, 1427: 6, 1456: 4, 1470: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8, 2015: 8
|
||||
}],
|
||||
CAR.GENESIS_G80: [{
|
||||
67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1024: 2, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1191: 2, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1434: 2, 1456: 4, 1470: 8
|
||||
},
|
||||
@@ -119,9 +118,9 @@ FINGERPRINTS = {
|
||||
},
|
||||
{
|
||||
68:8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 524: 8, 544: 8, 576:8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1164: 8, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1379: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1473: 8, 1476: 8, 1507: 8, 1535: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8, 2013: 8
|
||||
}],
|
||||
}],
|
||||
CAR.KONA: [{
|
||||
67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 354: 3, 356: 4, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 909: 8, 916: 8, 1040: 8, 1078: 4, 1107: 5, 1136: 8, 1156: 8, 1170: 8, 1173: 8, 1191: 2, 1265: 4, 1280: 1, 1287: 4, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1384: 8, 1394: 8, 1407: 8, 1414: 3, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 2004: 8, 2009: 8, 2012: 8
|
||||
67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 354: 3, 356: 4, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832 : 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1170: 8, 1173: 8, 1186: 2, 1191: 2, 1193: 8, 1265: 4,1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1378: 8, 1384: 8, 1394: 8, 1407: 8, 1414: 3, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 1988: 8, 1996: 8, 2000: 8, 2001: 8, 2004: 8, 2008: 8, 2009: 8, 2012: 8
|
||||
}],
|
||||
CAR.KONA_EV: [{
|
||||
127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 549: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 8, 1151: 6, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1307: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1378: 4, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1456: 4, 1470: 8, 1473: 8, 1507: 8, 1535: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8
|
||||
@@ -136,14 +135,20 @@ FINGERPRINTS = {
|
||||
68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 576: 8, 593: 8, 688: 5, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 909: 8, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1168: 7, 1173: 8, 1180: 8, 1186: 2, 1191: 2, 1265: 4, 1268: 8, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1371: 8, 1407: 8, 1419: 8, 1420: 8, 1425: 2, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1476: 8, 1535: 8
|
||||
}],
|
||||
CAR.PALISADE: [{
|
||||
67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 549: 8, 576: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1123: 8, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1180: 8, 1186: 2, 1191: 2, 1193: 8, 1210: 8, 1225: 8, 1227: 8, 1265: 4, 1280: 8, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1384: 8, 1407: 8, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 2000: 8, 2005: 8, 2008: 8
|
||||
67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 549: 8, 576: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1123: 8, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1180: 8, 1186: 2, 1191: 2, 1193: 8, 1210: 8, 1225: 8, 1227: 8, 1265: 4, 1280: 8, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1384: 8, 1407: 8, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8
|
||||
}],
|
||||
CAR.VELOSTER: [{
|
||||
64: 8, 66: 8, 67: 8, 68: 8, 127: 8, 128: 8, 129: 8, 273: 8, 274: 8, 275: 8, 339: 8, 354: 3, 356: 4, 399: 8, 512: 6, 544: 8, 558: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1170: 8, 1181: 5, 1186: 2, 1191: 2, 1265: 4, 1280: 1, 1282: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1356: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1378: 4, 1407: 8, 1414: 3, 1415: 8, 1419: 8, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 1872: 8, 1988: 8, 1996: 8, 2000: 8, 2001: 8, 2004: 8, 2008: 8, 2009: 8, 2012: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8
|
||||
}]
|
||||
}
|
||||
|
||||
ECU_FINGERPRINT = {
|
||||
Ecu.fwdCamera: [832, 1156, 1191, 1342]
|
||||
}
|
||||
|
||||
# Don't use these fingerprints for fingerprinting, they are still used for ECU detection
|
||||
IGNORED_FINGERPRINTS = [CAR.VELOSTER, CAR.GENESIS_G70, CAR.KONA]
|
||||
|
||||
FW_VERSIONS = {
|
||||
CAR.SONATA: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
@@ -181,7 +186,10 @@ FW_VERSIONS = {
|
||||
(Ecu.engine, 0x7e0, None): [ b'\xf1\x81640E0051\x00\x00\x00\x00\x00\x00\x00\x00',],
|
||||
(Ecu.eps, 0x7d4, None): [b'\xf1\x00CK MDPS R 1.00 1.04 57700-J5420 4C4VL104'],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00CK MFC AT USA LHD 1.00 1.03 95740-J5000 170822'],
|
||||
(Ecu.transmission, 0x7e1, None): [b'\xf1\x87VDHLG17118862DK2\x8awWwgu\x96wVfUVwv\x97xWvfvUTGTx\x87o\xff\xc9\xed\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0'],
|
||||
(Ecu.transmission, 0x7e1, None): [
|
||||
b'\xf1\x87VDHLG17118862DK2\x8awWwgu\x96wVfUVwv\x97xWvfvUTGTx\x87o\xff\xc9\xed\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0',
|
||||
b'\xf1\x87VDHLG17000192DK2xdFffT\xa5VUD$DwT\x86wveVeeD&T\x99\xba\x8f\xff\xcc\x99\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0',
|
||||
],
|
||||
},
|
||||
CAR.KIA_OPTIMA_H: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00DEhe SCC H-CUP 1.01 1.02 96400-G5100 ',],
|
||||
@@ -190,16 +198,58 @@ FW_VERSIONS = {
|
||||
(Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00DEP MFC AT USA LHD 1.00 1.01 95740-G5010 170424',],
|
||||
(Ecu.transmission, 0x7e1, None): [b"\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PDE0G16NS2\xf4'\\\x91",],
|
||||
},
|
||||
CAR.PALISADE: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00LX2_ SCC FHCUP 1.00 1.04 99110-S8100 \xf1\xa01.04',],
|
||||
CAR.PALISADE: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [
|
||||
b'\xf1\x00LX2_ SCC FHCUP 1.00 1.04 99110-S8100 \xf1\xa01.04',
|
||||
b'\xf1\x00LX2 SCC FHCUP 1.00 1.04 99110-S8100 \xf1\xa01.04',
|
||||
],
|
||||
(Ecu.esp, 0x7d1, None): [
|
||||
b'\xf1\x00LX ESC \x0b 102\x19\x05\x07 58910-S8330',
|
||||
b'\xf1\x00LX ESC \v 102\x19\x05\a 58910-S8330\xf1\xa01.02',
|
||||
b'\xf1\x00LX ESC \v 103\x19\t\x10 58910-S8360\xf1\xa01.03',
|
||||
],
|
||||
(Ecu.engine, 0x7e0, None): [b'\xf1\x81640J0051\x00\x00\x00\x00\x00\x00\x00\x00',],
|
||||
(Ecu.eps, 0x7d4, None): [b'\xf1\x00LX2 MDPS C 1.00 1.03 56310-S8020 4LXDC103',],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.03 99211-S8100 190125',],
|
||||
(Ecu.transmission, 0x7e1, None): [b'\xf1\x87LDKVBN424201KF26\xba\xaa\x9a\xa9\x99\x99\x89\x98\x89\x99\xa8\x99\x88\x99\x98\x89\x88\x99\xa8\x89v\x7f\xf7\xffwf_\xffq\xa6\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7',],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [
|
||||
b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.03 99211-S8100 190125',
|
||||
b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.05 99211-S8100 190909',
|
||||
],
|
||||
(Ecu.transmission, 0x7e1, None): [
|
||||
b'\xf1\x87LDKVBN424201KF26\xba\xaa\x9a\xa9\x99\x99\x89\x98\x89\x99\xa8\x99\x88\x99\x98\x89\x88\x99\xa8\x89v\x7f\xf7\xffwf_\xffq\xa6\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7',
|
||||
b'\xf1\x87LDLVBN560098KF26\x86fff\x87vgfg\x88\x96xfw\x86gfw\x86g\x95\xf6\xffeU_\xff\x92c\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7',
|
||||
],
|
||||
},
|
||||
CAR.VELOSTER: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00JS__ SCC H-CUP 1.00 1.02 95650-J3200 ', ],
|
||||
(Ecu.esp, 0x7d1, None): [b'\xf1\x00\x00\x00\x00\x00\x00\x00', ],
|
||||
(Ecu.engine, 0x7e0, None): [b'\x01TJS-JNU06F200H0A', ],
|
||||
(Ecu.eps, 0x7d4, None): [b'\xf1\x00JSL MDPS C 1.00 1.03 56340-J3000 8308', ],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00JS LKAS AT USA LHD 1.00 1.02 95740-J3000 K32', ],
|
||||
(Ecu.transmission, 0x7e1, None): [b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJS0T16NS1\xba\x02\xb8\x80', ],
|
||||
},
|
||||
CAR.GENESIS_G70: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00IK__ SCC F-CUP 1.00 1.02 96400-G9100 \xf1\xa01.02', ],
|
||||
(Ecu.esp, 0x7d1, None): [b'\xf1\x00\x00\x00\x00\x00\x00\x00', ],
|
||||
(Ecu.engine, 0x7e0, None): [b'\xf1\x81640F0051\x00\x00\x00\x00\x00\x00\x00\x00', ],
|
||||
(Ecu.eps, 0x7d4, None): [b'\xf1\x00IK MDPS R 1.00 1.06 57700-G9420 4I4VL106', ],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00IK MFC AT USA LHD 1.00 1.01 95740-G9000 170920', ],
|
||||
(Ecu.transmission, 0x7e1, None): [b'\xf1\x87VDJLT17895112DN4\x88fVf\x99\x88\x88\x88\x87fVe\x88vhwwUFU\x97eFex\x99\xff\xb7\x82\xf1\x81E25\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB2\x11\x1am\xda', ],
|
||||
},
|
||||
CAR.KONA: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00OS__ SCC F-CUP 1.00 1.00 95655-J9200 \xf1\xa01.00', ],
|
||||
(Ecu.esp, 0x7d1, None): [b'\xf1\x816V5RAK00018.ELF\xf1\x00\x00\x00\x00\x00\x00\x00\xf1\xa01.05', ],
|
||||
(Ecu.engine, 0x7e0, None): [b'"\x01TOS-0NU06F301J02', ],
|
||||
(Ecu.eps, 0x7d4, None): [b'\xf1\x00OS MDPS C 1.00 1.05 56310J9030\x00 4OSDC105', ],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00OS9 LKAS AT USA LHD 1.00 1.00 95740-J9300 g21', ],
|
||||
(Ecu.transmission, 0x7e1, None): [b'\xf1\x816U2VE051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VE051\x00\x00DOS4T16NS3\x00\x00\x00\x00', ],
|
||||
},
|
||||
CAR.KIA_OPTIMA: {
|
||||
(Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4110 '],
|
||||
(Ecu.esp, 0x7d1, None): [b'\xf1\x00JF ESC \v 11 \x18\x030 58920-D5180',],
|
||||
(Ecu.engine, 0x7e0, None): [b'\x01TJFAJNU06F201H03'],
|
||||
(Ecu.eps, 0x7d4, None): [b'\xf1\x00TM MDPS C 1.00 1.00 56340-S2000 8409'],
|
||||
(Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.02 95895-D5000 h31'],
|
||||
(Ecu.transmission, 0x7e1, None): [b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJF0T16NL0\t\xd2GW'],
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,21 +260,22 @@ CHECKSUM = {
|
||||
|
||||
FEATURES = {
|
||||
# which message has the gear
|
||||
"use_cluster_gears": [CAR.ELANTRA, CAR.KONA, CAR.ELANTRA_GT_I30],
|
||||
"use_tcu_gears": [CAR.KIA_OPTIMA, CAR.SONATA_2019],
|
||||
"use_elect_gears": [CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ],
|
||||
"use_cluster_gears": set([CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.KONA]),
|
||||
"use_tcu_gears": set([CAR.KIA_OPTIMA, CAR.SONATA_2019, CAR.VELOSTER]),
|
||||
"use_elect_gears": set([CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ]),
|
||||
|
||||
# these cars use the FCA11 message for the AEB and FCW signals, all others use SCC12
|
||||
"use_fca": [CAR.SONATA, CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.KIA_STINGER, CAR.IONIQ, CAR.KONA, CAR.KONA_EV, CAR.KIA_FORTE, CAR.PALISADE],
|
||||
"use_fca": set([CAR.SONATA, CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.KIA_STINGER, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_FORTE, CAR.PALISADE, CAR.GENESIS_G70, CAR.KONA]),
|
||||
|
||||
"use_bsm": [CAR.SONATA, CAR.PALISADE, CAR.HYUNDAI_GENESIS, CAR.GENESIS_G80, CAR.GENESIS_G90],
|
||||
"use_bsm": set([CAR.SONATA, CAR.PALISADE, CAR.HYUNDAI_GENESIS, CAR.GENESIS_G70, CAR.GENESIS_G80, CAR.GENESIS_G90, CAR.KONA]),
|
||||
}
|
||||
|
||||
EV_HYBRID = [CAR.IONIQ_EV_LTD, CAR.IONIQ, CAR.KONA_EV]
|
||||
EV_HYBRID = set([CAR.IONIQ_EV_LTD, CAR.IONIQ, CAR.KONA_EV])
|
||||
|
||||
DBC = {
|
||||
CAR.ELANTRA: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.ELANTRA_GT_I30: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.GENESIS_G70: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.GENESIS_G80: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.GENESIS_G90: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.HYUNDAI_GENESIS: dbc_dict('hyundai_kia_generic', None),
|
||||
@@ -241,6 +292,7 @@ DBC = {
|
||||
CAR.SONATA: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.SONATA_2019: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.PALISADE: dbc_dict('hyundai_kia_generic', None),
|
||||
CAR.VELOSTER: dbc_dict('hyundai_kia_generic', None),
|
||||
}
|
||||
|
||||
STEER_THRESHOLD = 150
|
||||
|
||||
@@ -27,6 +27,7 @@ class CarInterfaceBase():
|
||||
self.CS = CarState(CP)
|
||||
self.cp = self.CS.get_can_parser(CP)
|
||||
self.cp_cam = self.CS.get_cam_can_parser(CP)
|
||||
self.cp_body = self.CS.get_body_can_parser(CP)
|
||||
|
||||
self.CC = None
|
||||
if CarController is not None:
|
||||
@@ -43,7 +44,7 @@ class CarInterfaceBase():
|
||||
raise NotImplementedError
|
||||
|
||||
@staticmethod
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=[]): # pylint: disable=dangerous-default-value
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=None):
|
||||
raise NotImplementedError
|
||||
|
||||
# returns a set of default params to avoid repetition in car specific params
|
||||
@@ -149,13 +150,12 @@ class RadarInterfaceBase():
|
||||
self.pts = {}
|
||||
self.delay = 0
|
||||
self.radar_ts = CP.radarTimeStep
|
||||
self.no_radar_sleep = 'NO_RADAR_SLEEP' in os.environ
|
||||
|
||||
def update(self, can_strings):
|
||||
ret = car.RadarData.new_message()
|
||||
|
||||
if 'NO_RADAR_SLEEP' not in os.environ:
|
||||
if not self.no_radar_sleep:
|
||||
time.sleep(self.radar_ts) # radard runs on RI updates
|
||||
|
||||
return ret
|
||||
|
||||
class CarStateBase:
|
||||
@@ -188,3 +188,7 @@ class CarStateBase:
|
||||
@staticmethod
|
||||
def get_cam_can_parser(CP):
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def get_body_can_parser(CP):
|
||||
return None
|
||||
|
||||
@@ -162,8 +162,8 @@ class CarState(CarStateBase):
|
||||
|
||||
@staticmethod
|
||||
def get_cam_can_parser(CP):
|
||||
signals = [ ]
|
||||
checks = [ ]
|
||||
signals = []
|
||||
checks = []
|
||||
|
||||
if CP.carFingerprint == CAR.CX5:
|
||||
signals += [
|
||||
|
||||
@@ -16,7 +16,7 @@ class CarInterface(CarInterfaceBase):
|
||||
return float(accel) / 4.0
|
||||
|
||||
@staticmethod
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=[]): # pylint: disable=dangerous-default-value
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=None):
|
||||
ret = CarInterfaceBase.get_std_params(candidate, fingerprint, has_relay)
|
||||
|
||||
ret.carName = "mazda"
|
||||
@@ -78,9 +78,6 @@ class CarInterface(CarInterfaceBase):
|
||||
ret.cruiseState.enabled = common_interface_atl(ret, dragonconf.dpAtl)
|
||||
ret.canValid = self.cp.can_valid and self.cp_cam.can_valid
|
||||
|
||||
# TODO: button presses
|
||||
ret.buttonEvents = []
|
||||
|
||||
# events
|
||||
events = self.create_common_events(ret)
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class CarInterface(CarInterfaceBase):
|
||||
return accel
|
||||
|
||||
@staticmethod
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=[]): # pylint: disable=dangerous-default-value
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=None):
|
||||
ret = CarInterfaceBase.get_std_params(candidate, fingerprint, has_relay)
|
||||
ret.carName = "mock"
|
||||
ret.safetyModel = car.CarParams.SafetyModel.noOutput
|
||||
|
||||
@@ -2,7 +2,7 @@ from cereal import car
|
||||
from common.numpy_fast import clip, interp
|
||||
from selfdrive.car.nissan import nissancan
|
||||
from opendbc.can.packer import CANPacker
|
||||
from selfdrive.car.nissan.values import CAR
|
||||
from selfdrive.car.nissan.values import CAR, STEER_THRESHOLD
|
||||
from common.dp_common import common_controller_ctrl
|
||||
|
||||
# Steer angle limits
|
||||
@@ -58,7 +58,11 @@ class CarController():
|
||||
else:
|
||||
# Scale max torque based on how much torque the driver is applying to the wheel
|
||||
self.lkas_max_torque = max(
|
||||
0, LKAS_MAX_TORQUE - 0.4 * abs(CS.out.steeringTorque))
|
||||
# Scale max torque down to half LKAX_MAX_TORQUE as a minimum
|
||||
LKAS_MAX_TORQUE * 0.5,
|
||||
# Start scaling torque at STEER_THRESHOLD
|
||||
LKAS_MAX_TORQUE - 0.6 * max(0, abs(CS.out.steeringTorque) - STEER_THRESHOLD)
|
||||
)
|
||||
|
||||
else:
|
||||
apply_angle = CS.out.steeringAngle
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import copy
|
||||
from collections import deque
|
||||
from cereal import car
|
||||
from opendbc.can.can_define import CANDefine
|
||||
from selfdrive.car.interfaces import CarStateBase
|
||||
@@ -6,12 +7,14 @@ from selfdrive.config import Conversions as CV
|
||||
from opendbc.can.parser import CANParser
|
||||
from selfdrive.car.nissan.values import CAR, DBC, STEER_THRESHOLD
|
||||
|
||||
TORQUE_SAMPLES = 12
|
||||
|
||||
class CarState(CarStateBase):
|
||||
def __init__(self, CP):
|
||||
super().__init__(CP)
|
||||
can_define = CANDefine(DBC[CP.carFingerprint]['pt'])
|
||||
|
||||
self.steeringTorqueSamples = deque(TORQUE_SAMPLES*[0], TORQUE_SAMPLES)
|
||||
self.shifter_values = can_define.dv["GEARBOX"]["GEAR_SHIFTER"]
|
||||
|
||||
def update(self, cp, cp_adas, cp_cam):
|
||||
@@ -60,7 +63,9 @@ class CarState(CarStateBase):
|
||||
ret.cruiseState.speed = speed * conversion
|
||||
|
||||
ret.steeringTorque = cp.vl["STEER_TORQUE_SENSOR"]["STEER_TORQUE_DRIVER"]
|
||||
ret.steeringPressed = abs(ret.steeringTorque) > STEER_THRESHOLD
|
||||
self.steeringTorqueSamples.append(ret.steeringTorque)
|
||||
# Filtering driver torque to prevent steeringPressed false positives
|
||||
ret.steeringPressed = bool(abs(sum(self.steeringTorqueSamples) / TORQUE_SAMPLES) > STEER_THRESHOLD)
|
||||
|
||||
ret.steeringAngle = cp.vl["STEER_ANGLE_SENSOR"]["STEER_ANGLE"]
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class CarInterface(CarInterfaceBase):
|
||||
return float(accel) / 4.0
|
||||
|
||||
@staticmethod
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=[]): # pylint: disable=dangerous-default-value
|
||||
def get_params(candidate, fingerprint=gen_empty_fingerprint(), has_relay=False, car_fw=None):
|
||||
|
||||
ret = CarInterfaceBase.get_std_params(candidate, fingerprint, has_relay)
|
||||
ret.carName = "nissan"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user